
On 04/25/2013 02:41 PM, Laine Stump wrote:
On 04/25/2013 04:30 PM, Eric Blake wrote:
POSIX says that both basename() and dirname() may return static storage (aka they are not thread-safe); and that they may but not must modify their input argument. Furthermore, <libgen.h> is not available on all platforms. For these reasons, you should never use these functions in a multi-threaded library.
Gnulib instead recommends a way to avoid the portability nightmare: gnulib's "dirname.h" provides useful counterparts. The obvious dir_name() and base_name() are GPL (because they malloc(), but call exit() on failure) so we can't use them; but the LGPL variants mdir_name() (malloc's or returns NULL) and last_component (always points into the incoming string without modifying it, differing from basename semantics only on corner cases like the empty string that we shouldn't be hitting in the first place) are already in use in libvirt. This finishes the swap over to the safe functions.
ACK. Thanks!
Now pushed. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org