version 1.44, 2007/06/03 17:39:26 |
version 1.51, 2012/03/13 21:13:35 |
Line 50 __RCSID("$NetBSD$"); |
|
Line 50 __RCSID("$NetBSD$"); |
|
#include <stdlib.h> |
#include <stdlib.h> |
#include <string.h> |
#include <string.h> |
#include <unistd.h> |
#include <unistd.h> |
|
#include <ssp/ssp.h> |
|
|
#include "extern.h" |
#include "extern.h" |
|
|
#ifdef __weak_alias |
#ifdef __weak_alias |
__weak_alias(getcwd,_getcwd) |
__weak_alias(getcwd,_getcwd) |
|
__weak_alias(_sys_getcwd,_getcwd) |
__weak_alias(realpath,_realpath) |
__weak_alias(realpath,_realpath) |
#endif |
#endif |
|
|
|
|
realpath(const char *path, char *resolved) |
realpath(const char *path, char *resolved) |
{ |
{ |
struct stat sb; |
struct stat sb; |
int idx = 0, n, nlnk = 0; |
int idx = 0, nlnk = 0; |
const char *q; |
const char *q; |
char *p, wbuf[2][MAXPATHLEN]; |
char *p, wbuf[2][MAXPATHLEN]; |
size_t len; |
size_t len; |
|
ssize_t n; |
|
|
_DIAGASSERT(path != NULL); |
|
_DIAGASSERT(resolved != NULL); |
_DIAGASSERT(resolved != NULL); |
|
|
|
/* POSIX sez we must test for this */ |
|
if (path == NULL) { |
|
errno = EINVAL; |
|
return NULL; |
|
} |
|
|
/* |
/* |
* Build real path one by one with paying an attention to ., |
* Build real path one by one with paying an attention to ., |
* .. and symbolic link. |
* .. and symbolic link. |
|
|
goto loop; |
goto loop; |
} |
} |
|
|
|
|
#ifdef _FORTIFY_SOURCE |
|
#undef getcwd |
|
#define getcwd _getcwd |
|
#endif |
|
|
|
char * |
char * |
getcwd(char *pt, size_t size) |
__ssp_real(getcwd)(char *pt, size_t size) |
{ |
{ |
char *npt; |
char *npt; |
|
|