docs/82508: misleading man page for basename/dirname

Vlad Skvortsov vss at 73rus.com
Fri Jul 1 06:30:29 UTC 2005


The following reply was made to PR docs/82508; it has been noted by GNATS.

From: Vlad Skvortsov <vss at 73rus.com>
To: Giorgos Keramidas <keramida at freebsd.org>
Cc: Vlad Skvortsov <vss at high.net.ru>, bug-followup at freebsd.org
Subject: Re: docs/82508: misleading man page for basename/dirname
Date: Thu, 30 Jun 2005 23:24:25 -0700

 Giorgos Keramidas wrote:
 > On 2005-06-22 02:51, Vlad Skvortsov <vss at high.net.ru> wrote:
 > 
 >>The man pages for both basename(3) and dirname(3) state that the
 >>functions return pointers to the internal _static_ storage. However,
 >>those functions actually perform malloc() call to allocate storage on
 >>the first invocation. Thus, the memory pointer returned is actually a
 >>pointer to internal but dynamically allocated storage.
 >>
 >>I don't know whether this violates standard or not, but the
 >>documentation is misleading.
 > 
 > 
 > The term 'static' here is a warning that these functions are not thread-safe.
 > 
 > It does NOT mean that the ``bname'' object that is internal to basename() is
 > actually an array declared as:
 > 
 > 	char bname[MAXPATHLEN];
 > 
 > It merely means that multiple invocations of the function from concurrent
 > threads may clobber each other's data, so some form of locking should be used
 > around calls to basename() from threaded applications or the function should
 > be avoided altogether.
 > 
 
 Yes, I do understand what it supposed to mean. But, anyway, 'static' 
 means 'static', not (not only) 'thread-safe'. ;-)
 
 I've ran into this issue while running a testsuite checking for memory 
 leaks. I expected those values to be static, not thread-safe.
 
 
 -- 
 Vlad Skvortsov, vss at 73rus.com, vss at high.net.ru



More information about the freebsd-doc mailing list