Closed GoogleCodeExporter closed 9 years ago
fdatasync() appears to be implemented in current Mac OS X.
Original comment by zik.sale...@gmail.com
on 1 Mar 2014 at 4:36
It isn't. The only mention of fdatasync() is in <sys/sysproto.h>, as a system
call; it is not implemented at the library level.
Please re-consider not fixing this; the patch included above has worked well
for me, and it is correct for both current and older OS X versions.
Original comment by DrZip...@gmail.com
on 1 Mar 2014 at 7:55
picoc compiles without modification on my mac. Here's what I see:
$ make
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o picoc.o
picoc.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o table.o
table.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o lex.o lex.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o parse.o
parse.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o
expression.o expression.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o heap.o
heap.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o type.o
type.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o variable.o
variable.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o clibrary.o
clibrary.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o platform.o
platform.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o include.o
include.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o debug.o
debug.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o
platform/platform_unix.o platform/platform_unix.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o
platform/library_unix.o platform/library_unix.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o
cstdlib/stdio.o cstdlib/stdio.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o
cstdlib/math.o cstdlib/math.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o
cstdlib/string.o cstdlib/string.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o
cstdlib/stdlib.o cstdlib/stdlib.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o
cstdlib/time.o cstdlib/time.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o
cstdlib/errno.o cstdlib/errno.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o
cstdlib/ctype.o cstdlib/ctype.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o
cstdlib/stdbool.o cstdlib/stdbool.c
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -c -o
cstdlib/unistd.o cstdlib/unistd.c
cstdlib/unistd.c:85:33: warning: implicit declaration of function 'fdatasync'
is invalid in C99 [-Wimplicit-function-declaration]
ReturnValue->Val->Integer = fdatasync(Param[0]->Val->Integer);
^
cstdlib/unistd.c:266:33: warning: 'sbrk' is deprecated
[-Wdeprecated-declarations]
ReturnValue->Val->Pointer = sbrk(Param[0]->Val->Integer);
^
/usr/include/unistd.h:582:7: note: 'sbrk' declared here
void *sbrk(int);
^
2 warnings generated.
gcc -Wall -pedantic -g -DUNIX_HOST -DVER=\"`svnversion -n`\" -o picoc picoc.o
table.o lex.o parse.o expression.o heap.o type.o variable.o clibrary.o
platform.o include.o debug.o platform/platform_unix.o platform/library_unix.o
cstdlib/stdio.o cstdlib/math.o cstdlib/string.o cstdlib/stdlib.o cstdlib/time.o
cstdlib/errno.o cstdlib/ctype.o cstdlib/stdbool.o cstdlib/unistd.o -lm
-lreadline
Am I missing something here?
Original comment by zik.sale...@gmail.com
on 2 Mar 2014 at 12:09
As I noted above, fdatasync isn't implemented at the library level, it's a
system call and it doesn't take the arguments you're assuming it does.
You don't have a prototype in scope (see the warning, which should be an error)
and what you're actually linking against is the system call stub:
_fdatasync:
00000000000161d8 movl $0x20000bb, %eax
00000000000161dd movq %rcx, %r10
00000000000161e0 syscall
00000000000161e2 jae 0x161ec
00000000000161e4 movq %rax, %rdi
00000000000161e7 jmpq _cerror
00000000000161ec ret
from <sys/sysproto.h>
struct fdatasync_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
};
...
int fdatasync(struct proc *, struct fdatasync_args *, int *);
For whatever reason, it's not surfaced anywhere in a user-callable fashion. The
F_FULLFSYNC fcntl is the standard mechanism for achieving the equivalent
functionality on OS X.
Original comment by DrZip...@gmail.com
on 2 Mar 2014 at 12:48
Oh I see. Thanks for that.
Fixed in r608.
Original comment by zik.sale...@gmail.com
on 2 Mar 2014 at 1:34
Thanks!
Original comment by DrZip...@gmail.com
on 2 Mar 2014 at 1:35
Original issue reported on code.google.com by
DrZip...@gmail.com
on 13 Nov 2011 at 2:55