"getcwd" vs. "getwd" (was Re: Re GNU emacs 18.55)

Guy Harris guy at auspex.auspex.com
Mon Sep 3 08:00:01 AEST 1990


 >The original poster is correct; in 3.3, getcwd does call getwd.  The
 >getwd call is not completely the same as BSD 4.3, it uses the POSIX
 >PATH_MAX (as does getcwd), instead of MAXPATHLEN; it won't return
 >anything longer.  getcwd calls getwd with a buffer of size PATH_MAX,
 >then checks the length to see if it is too long (for the error check),
 >and strncpy's it if not.
 >
 >This is still faster than the 'standard' S5 getcwd, which does a popen
 >on /bin/pwd, and appears to have been done as part of some performance
 >tuning.

I would have made "getwd()" a wrapper around "getcwd()" instead (pass
PATH_MAX or MAXINT or whatever as the buffer size), and shoved the
"getwd()" code into "getcwd()" in favor of the "popen()" code.  A little
less clumsy - no "strncpy()" needed - and a little less likely to
surprise folks who have code that calls "getcwd()" and - for whatever
reason - has its own routine named "getwd()".

I'm not certain whether POSIX would actually *require* that "getcwd()"
not drag in any routines with names that aren't part of the POSIX
standard and don't begin with "_" (as the ANSI C standard does for
routines it specifies, for quite good reason), but even if it isn't the
law, it's still a good idea....



More information about the Comp.sys.sgi mailing list