From owner-svn-src-all@FreeBSD.ORG Sat Jul 5 06:12:50 2014 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 35063946; Sat, 5 Jul 2014 06:12:50 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 087372A7E; Sat, 5 Jul 2014 06:12:50 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.8/8.14.8) with ESMTP id s656Cnfw045497; Sat, 5 Jul 2014 06:12:49 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.8/8.14.8/Submit) id s656CnwY045496; Sat, 5 Jul 2014 06:12:49 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201407050612.s656CnwY045496@svn.freebsd.org> From: Hans Petter Selasky Date: Sat, 5 Jul 2014 06:12:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r268285 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Jul 2014 06:12:50 -0000 Author: hselasky Date: Sat Jul 5 06:12:48 2014 New Revision: 268285 URL: http://svnweb.freebsd.org/changeset/base/268285 Log: When getting the initial value of numeric tunables use the getenv_xxx() functions instead of strtoq(), because the getenv_xxx() functions include wrappers for various postfixes like G/M/K, which strtoq() doesn't do. Modified: head/sys/kern/kern_sysctl.c Modified: head/sys/kern/kern_sysctl.c ============================================================================== --- head/sys/kern/kern_sysctl.c Sat Jul 5 05:44:26 2014 (r268284) +++ head/sys/kern/kern_sysctl.c Sat Jul 5 06:12:48 2014 (r268285) @@ -167,13 +167,14 @@ sysctl_load_tunable_by_oid_locked(struct { struct sysctl_req req; struct sysctl_oid *curr; - char *penv; + char *penv = NULL; char path[64]; ssize_t rem = sizeof(path); ssize_t len; int val_int; long val_long; int64_t val_64; + quad_t val_quad; int error; path[--rem] = 0; @@ -192,10 +193,6 @@ sysctl_load_tunable_by_oid_locked(struct path[rem + len] = '.'; } - penv = getenv(path + rem); - if (penv == NULL) - return; - memset(&req, 0, sizeof(req)); req.td = curthread; @@ -205,41 +202,52 @@ sysctl_load_tunable_by_oid_locked(struct switch (oidp->oid_kind & CTLTYPE) { case CTLTYPE_INT: - val_int = strtoq(penv, NULL, 0); + if (getenv_int(path + rem, &val_int) == 0) + return; req.newlen = sizeof(val_int); req.newptr = &val_int; break; case CTLTYPE_UINT: - val_int = strtouq(penv, NULL, 0); + if (getenv_uint(path + rem, (unsigned int *)&val_int) == 0) + return; req.newlen = sizeof(val_int); req.newptr = &val_int; break; case CTLTYPE_LONG: - val_long = strtoq(penv, NULL, 0); + if (getenv_long(path + rem, &val_long) == 0) + return; req.newlen = sizeof(val_long); req.newptr = &val_long; break; case CTLTYPE_ULONG: - val_long = strtouq(penv, NULL, 0); + if (getenv_ulong(path + rem, (unsigned long *)&val_long) == 0) + return; req.newlen = sizeof(val_long); req.newptr = &val_long; break; case CTLTYPE_S64: - val_64 = strtoq(penv, NULL, 0); + if (getenv_quad(path + rem, &val_quad) == 0) + return; + val_64 = val_quad; req.newlen = sizeof(val_64); req.newptr = &val_64; break; case CTLTYPE_U64: - val_64 = strtouq(penv, NULL, 0); + /* XXX there is no getenv_uquad() */ + if (getenv_quad(path + rem, &val_quad) == 0) + return; + val_64 = val_quad; req.newlen = sizeof(val_64); req.newptr = &val_64; break; case CTLTYPE_STRING: + penv = getenv(path + rem); + if (penv == NULL) + return; req.newlen = strlen(penv); req.newptr = penv; break; default: - freeenv(penv); return; } error = sysctl_root_handler_locked(oidp, oidp->oid_arg1,