svn commit: r206898 - head/lib/libc/stdlib

Konstantin Belousov kib at FreeBSD.org
Tue Apr 20 14:22:29 UTC 2010


Author: kib
Date: Tue Apr 20 14:22:29 2010
New Revision: 206898
URL: http://svn.freebsd.org/changeset/base/206898

Log:
  Free() is not allowed to modify errno, remove safety brackets around it [1].
  Add small optimization, do not copy a string to the buffer that is
  to be freed immediately after.
  
  Noted by:	jh [1]
  Reviewed by:	jh
  MFC after:	2 weeks

Modified:
  head/lib/libc/stdlib/realpath.c

Modified: head/lib/libc/stdlib/realpath.c
==============================================================================
--- head/lib/libc/stdlib/realpath.c	Tue Apr 20 12:22:06 2010	(r206897)
+++ head/lib/libc/stdlib/realpath.c	Tue Apr 20 14:22:29 2010	(r206898)
@@ -84,12 +84,10 @@ realpath(const char * __restrict path, c
 		left_len = strlcpy(left, path + 1, sizeof(left));
 	} else {
 		if (getcwd(resolved, PATH_MAX) == NULL) {
-			strlcpy(resolved, ".", PATH_MAX);
-			if (m) {
-				serrno = errno;
+			if (m)
 				free(resolved);
-				errno = serrno;
-			}
+			else
+				strlcpy(resolved, ".", PATH_MAX);
 			return (NULL);
 		}
 		resolved_len = strlen(resolved);
@@ -168,11 +166,8 @@ realpath(const char * __restrict path, c
 				errno = serrno;
 				return (resolved);
 			}
-			if (m) {
-				serrno = errno;
+			if (m)
 				free(resolved);
-				errno = serrno;
-			}
 			return (NULL);
 		}
 		if (S_ISLNK(sb.st_mode)) {
@@ -184,11 +179,8 @@ realpath(const char * __restrict path, c
 			}
 			slen = readlink(resolved, symlink, sizeof(symlink) - 1);
 			if (slen < 0) {
-				if (m) {
-					serrno = errno;
+				if (m)
 					free(resolved);
-					errno = serrno;
-				}
 				return (NULL);
 			}
 			symlink[slen] = '\0';


More information about the svn-src-all mailing list