Am 10.09.2011 20:33, schrieb Laurent Bercot: >>> #if !defined __FreeBSD__ >>> char *dirname(char *path); >>> #endif >>> Can you confirm that it helps? >> It's bogus because ours is const char *. > > FreeBSD defines dirname as a different function from the standard > and then *busybox* is bogus ? > Please. > > This is the exact kind of bullshit incompatibilities that application > developers should not have to care about, ever. FreeBSD has no business > redefining dirname's prototype; if it's not char *dirname (char *), > it's not conformant, period.
FreeBSD's dirname is conforming. Note: * Applications (busybox) have no business redeclaring library functions. Instead, they are supposed to include the corresponding headers, dirname.h in this case. * POSIX conforming applications using dirname() need not be changed for use with FreeBSD's dirname() implementation. * It is safe to pass a char * or char [] argument to a function expecting const char *. * Advertising "const" can enable optimizing compilers generate better code. Quoting POSIX: "The dirname() function may modify the string pointed to by path, and may return a pointer to static storage that may then be overwritten by subsequent calls to dirname()." FreeBSD waives the former and implements the latter. And because it does not modify the string, it advertises so through its header by adding the const keyword. The standard cannot do that because it permits modification of the string. _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox