2012/6/2 Igor Stasenko <[email protected]>: > On 2 June 2012 17:26, Stéphane Ducasse <[email protected]> wrote: > >> Don't you think that this is what we are trying to do since ages: improving >> the infrastructure >> but not by piling junk on junk. > > hehe stef.. I can say this happens everywhere. Piles of junk on top of > each other.. > > Like figuring out, why output of readdir() function having strange results.. > To figure it out, you have to read this code, and understand what's going on: > this is part of standard C library on mac (/usr/include/dirent.h on > your machine, you can check it) > > > __BEGIN_DECLS > #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) > int alphasort(const void *, const void *) __DARWIN_INODE64(alphasort); > #endif /* not POSIX */ > int closedir(DIR *) __DARWIN_ALIAS(closedir); > #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) > int getdirentries(int, char *, int, long *) > #if __DARWIN_64_BIT_INO_T > /* > * getdirentries() doesn't work when 64-bit inodes is in effect, so we > * generate a link error. > */ > > __asm("_getdirentries_is_not_available_when_64_bit_inodes_are_in_effect") > #else /* !__DARWIN_64_BIT_INO_T */ > > __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_6, > __IPHONE_2_0,__IPHONE_2_0) > #endif /* __DARWIN_64_BIT_INO_T */ > ; > #endif /* not POSIX */ > DIR *opendir(const char *) __DARWIN_ALIAS_I(opendir); > #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) > DIR *__opendir2(const char *, int) __DARWIN_ALIAS_I(__opendir2); > #endif /* not POSIX */ > struct dirent *readdir(DIR *) __DARWIN_INODE64(readdir); > int readdir_r(DIR *, struct dirent *, struct dirent **) > __DARWIN_INODE64(readdir_r); > void rewinddir(DIR *) __DARWIN_ALIAS_I(rewinddir); > #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) > int scandir(const char *, struct dirent ***, > int (*)(struct dirent *), int (*)(const void *, const void *)) > __DARWIN_INODE64(scandir); > #ifdef __BLOCKS__ > int scandir_b(const char *, struct dirent ***, > int (^)(struct dirent *), int (^)(const void *, const void *)) > __DARWIN_INODE64(scandir_b) __OSX_AVAILABLE_STARTING(__MAC_10_6, > __IPHONE_3_2); > #endif /* __BLOCKS__ */ > #endif /* not POSIX */ > void seekdir(DIR *, long) __DARWIN_ALIAS_I(seekdir); > long telldir(DIR *) __DARWIN_ALIAS_I(telldir); > __END_DECLS > > #endif /* !KERNEL */ >
Ouch, Igor, you gonna give us a headache. That's exatly the kind of niceties that makes FFI impracticle without a pre-processor, remember our discussion? Nicolas
