> Date: Mon, 21 Mar 2016 15:31:42 +0300
> From: Alexei Malinin <[email protected]>
>
> Hello.
>
> I'm not sure but it seems to me that there are several missed things:
> - checking path against NULL,
POSIX says that we should return EINVAL in that case.
> - setting errno to ENOMEM in case of malloc() failure,
malloc already does that
> - clarification in comments.
More words don't clarify things.
> --- src/lib/libc/stdlib/realpath.c.orig Tue Oct 13 23:55:37 2015
> +++ src/lib/libc/stdlib/realpath.c Mon Mar 21 15:16:52 2016
> @@ -41,8 +41,9 @@
> * char *realpath(const char *path, char resolved[PATH_MAX]);
> *
> * Find the real name of path, by removing all ".", ".." and symlink
> - * components. Returns (resolved) on success, or (NULL) on failure,
> - * in which case the path which caused trouble is left in (resolved).
> + * components. Returns (resolved) on success; sets (errno) and returns
> + * (NULL) on failure, in which case the path which caused trouble
> + * is left in (resolved).
> */
> char *
> realpath(const char *path, char *resolved)
> @@ -54,6 +55,11 @@
> int serrno, slen, mem_allocated;
> char left[PATH_MAX], next_token[PATH_MAX], symlink[PATH_MAX];
>
> + if (path == NULL) {
> + errno = ENOENT;
> + return (NULL);
> + }
> +
> if (path[0] == '\0') {
> errno = ENOENT;
> return (NULL);
> @@ -63,8 +69,10 @@
>
> if (resolved == NULL) {
> resolved = malloc(PATH_MAX);
> - if (resolved == NULL)
> + if (resolved == NULL) {
> + errno = ENOMEM;
> return (NULL);
> + }
> mem_allocated = 1;
> } else
> mem_allocated = 0;
>
>
>