/* When called with a NULL buffer and a positive size argument the man page states that a buffer of size bytes is allocated. This does not apear true as appending to the end of the buffer causes a SEGV when later malloc/free calls are made: */ #include <unistd.h> #include <stdlib.h> int main (int argc, char *argv[]) { char *cwd; char *chunk; size_t buffsize = 1024; size_t bigbuffsize = 10000; if ((cwd = getcwd(NULL, buffsize)) == NULL) { printf ("getcwd (NULL, %d) == NULL\n"); exit (1); } else printf ("cwd: %s\n", cwd); strcat (cwd, ":This is a bogus string"); printf ("Now my buffer contains \"%s\"[%d]\n", cwd, strlen(cwd)); if ((chunk = malloc (10000)) == NULL) { printf ("malloc(%d) failure!\n", bigbuffsize); } else { printf ("Grabbed %d bytes\n", bigbuffsize); free (chunk); } if (cwd) free (cwd); return (0); }
This function behaves as defined by the Single Unix Specification version 2. We will have to fix the man page for it, but the behavior is according to the specs: The getcwd() function places an absolute pathname of the current working directory in the array pointed to by buf, and returns buf. The size argument is the size in bytes of the character array pointed to by the buf argument. If buf is a null pointer, the behaviour of getcwd() is undefined.