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';
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to