version 1.15, 1998/11/06 19:43:23 |
version 1.16, 1999/03/26 04:04:13 |
Line 186 err2: (void)close(fd); |
|
Line 186 err2: (void)close(fd); |
|
return (NULL); |
return (NULL); |
} |
} |
|
|
|
#ifdef OLD_GETCWD |
|
|
char * |
char * |
getcwd(pt, size) |
getcwd(pt, size) |
char *pt; |
char *pt; |
|
|
free(up); |
free(up); |
return (NULL); |
return (NULL); |
} |
} |
|
|
|
#else /* New getcwd */ |
|
|
|
char * |
|
getcwd(pt, size) |
|
char *pt; |
|
size_t size; |
|
{ |
|
int ptsize, bufsize, len; |
|
|
|
/* |
|
* If no buffer specified by the user, allocate one as necessary. |
|
* If a buffer is specified, the size has to be non-zero. The path |
|
* is built from the end of the buffer backwards. |
|
*/ |
|
if (pt) { |
|
ptsize = 0; |
|
if (!size) { |
|
errno = EINVAL; |
|
return (NULL); |
|
} |
|
bufsize = size; |
|
} else { |
|
if ((pt = malloc(ptsize = 1024 - 4)) == NULL) |
|
return (NULL); |
|
bufsize = ptsize; |
|
} |
|
do { |
|
len = __getcwd(pt, bufsize); |
|
if ((len < 0) && (size == 0) && (errno == ERANGE)) { |
|
if ((pt = realloc(pt, ptsize *= 2)) == NULL) |
|
return NULL; |
|
bufsize = ptsize; |
|
continue; |
|
} |
|
} while (0); |
|
if (len < 0) |
|
return NULL; |
|
else |
|
return pt; |
|
} |
|
|
|
#endif |