Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libc/stdlib don't let readlink trash errno.;



details:   https://anonhg.NetBSD.org/src/rev/0baef06c43f1
branches:  trunk
changeset: 764950:0baef06c43f1
user:      christos <christos%NetBSD.org@localhost>
date:      Fri May 13 23:11:00 2011 +0000

description:
don't let readlink trash errno.;

diffstat:

 lib/libc/stdlib/jemalloc.c |  7 +++++--
 lib/libc/stdlib/malloc.c   |  9 ++++++---
 2 files changed, 11 insertions(+), 5 deletions(-)

diffs (74 lines):

diff -r 1ee094f13735 -r 0baef06c43f1 lib/libc/stdlib/jemalloc.c
--- a/lib/libc/stdlib/jemalloc.c        Fri May 13 22:35:50 2011 +0000
+++ b/lib/libc/stdlib/jemalloc.c        Fri May 13 23:11:00 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: jemalloc.c,v 1.22 2011/02/26 23:27:49 njoly Exp $      */
+/*     $NetBSD: jemalloc.c,v 1.23 2011/05/13 23:11:00 christos Exp $   */
 
 /*-
  * Copyright (C) 2006,2007 Jason Evans <jasone%FreeBSD.org@localhost>.
@@ -118,7 +118,7 @@
 
 #include <sys/cdefs.h>
 /* __FBSDID("$FreeBSD: src/lib/libc/stdlib/malloc.c,v 1.147 2007/06/15 22:00:16 jasone Exp $"); */ 
-__RCSID("$NetBSD: jemalloc.c,v 1.22 2011/02/26 23:27:49 njoly Exp $");
+__RCSID("$NetBSD: jemalloc.c,v 1.23 2011/05/13 23:11:00 christos Exp $");
 
 #ifdef __FreeBSD__
 #include "libc_private.h"
@@ -3325,6 +3325,7 @@
        ssize_t linklen;
        char buf[PATH_MAX + 1];
        const char *opts = "";
+       int serrno;
 
        malloc_mutex_lock(&init_lock);
        if (malloc_initialized) {
@@ -3371,6 +3372,7 @@
                /* Get runtime configuration. */
                switch (i) {
                case 0:
+                       serrno = errno;
                        if ((linklen = readlink("/etc/malloc.conf", buf,
                                                sizeof(buf) - 1)) != -1) {
                                /*
@@ -3380,6 +3382,7 @@
                                buf[linklen] = '\0';
                                opts = buf;
                        } else {
+                               errno = serrno;
                                /* No configuration specified. */
                                buf[0] = '\0';
                                opts = buf;
diff -r 1ee094f13735 -r 0baef06c43f1 lib/libc/stdlib/malloc.c
--- a/lib/libc/stdlib/malloc.c  Fri May 13 22:35:50 2011 +0000
+++ b/lib/libc/stdlib/malloc.c  Fri May 13 23:11:00 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: malloc.c,v 1.52 2008/02/03 22:56:53 christos Exp $     */
+/*     $NetBSD: malloc.c,v 1.53 2011/05/13 23:11:00 christos Exp $     */
 
 /*
  * ----------------------------------------------------------------------------
@@ -90,7 +90,7 @@
 #include <sys/cdefs.h>
 #include "extern.h"
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: malloc.c,v 1.52 2008/02/03 22:56:53 christos Exp $");
+__RCSID("$NetBSD: malloc.c,v 1.53 2011/05/13 23:11:00 christos Exp $");
 #endif /* LIBC_SCCS and not lint */
 int utrace(const char *, void *, size_t);
 
@@ -467,9 +467,12 @@
 
     for (i = 0; i < 3; i++) {
        if (i == 0) {
+           int serrno = errno;
            j = readlink("/etc/malloc.conf", b, sizeof b - 1);
-           if (j <= 0)
+           if (j == -1) {
+               errno = serrno; 
                continue;
+           }
            b[j] = '\0';
            p = b;
        } else if (i == 1 && issetugid() == 0) {



Home | Main Index | Thread Index | Old Index