| version 1.24.6.3, 2002/12/10 06:25:48 |
version 1.25, 2002/04/16 19:08:43 |
| Line 95 realpath(path, resolved) |
|
| Line 95 realpath(path, resolved) |
|
| |
|
| /* Save the starting point. */ |
/* Save the starting point. */ |
| if ((fd = open(".", O_RDONLY)) < 0) { |
if ((fd = open(".", O_RDONLY)) < 0) { |
| (void)strlcpy(resolved, ".", MAXPATHLEN); |
(void)strcpy(resolved, "."); |
| return (NULL); |
return (NULL); |
| } |
} |
| |
|
| Line 107 realpath(path, resolved) |
|
| Line 107 realpath(path, resolved) |
|
| * if it is a directory, then change to that directory. |
* if it is a directory, then change to that directory. |
| * get the current directory name and append the basename. |
* get the current directory name and append the basename. |
| */ |
*/ |
| (void)strlcpy(resolved, path, MAXPATHLEN); |
(void)strncpy(resolved, path, MAXPATHLEN - 1); |
| |
resolved[MAXPATHLEN - 1] = '\0'; |
| loop: |
loop: |
| q = strrchr(resolved, '/'); |
q = strrchr(resolved, '/'); |
| if (q != NULL) { |
if (q != NULL) { |
|
|
| errno = ELOOP; |
errno = ELOOP; |
| goto err1; |
goto err1; |
| } |
} |
| n = readlink(p, resolved, MAXPATHLEN-1); |
n = readlink(p, resolved, MAXPATHLEN); |
| if (n < 0) |
if (n < 0) |
| goto err1; |
goto err1; |
| resolved[n] = '\0'; |
resolved[n] = '\0'; |