From a7b5ad271ca6f0dca42accb1e6b16a630f74451d Mon Sep 17 00:00:00 2001 From: Ed Schouten Date: Wed, 21 Oct 2009 18:31:54 +0000 Subject: [PATCH] Make input parsing in Farhenheit actually work. Don't clobber *p with '\0' when testing whether it has the value of 'F'. Just use the semantics of strtof() properly. If it returns p, we know that it parsed the string until it reached 'C' or 'F'. The code has not changed since it has been imported (r161951, Sep 3, 2006). Submitted by: Alexandre Perrin MFC after: 1 week --- sbin/sysctl/sysctl.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sbin/sysctl/sysctl.c b/sbin/sysctl/sysctl.c index 4140fb3a586..4810c6165b8 100644 --- a/sbin/sysctl/sysctl.c +++ b/sbin/sysctl/sysctl.c @@ -68,7 +68,7 @@ static int sysctl_all(int *oid, int len); static int name2oid(char *, int *); static void set_T_dev_t(char *, void **, size_t *); -static int set_IK(char *, int *); +static int set_IK(const char *, int *); static void usage(void) @@ -452,19 +452,19 @@ set_T_dev_t(char *path, void **val, size_t *size) } static int -set_IK(char *str, int *val) +set_IK(const char *str, int *val) { float temp; int len, kelv; - char *p, *endptr; + const char *p; + char *endptr; if ((len = strlen(str)) == 0) return (0); p = &str[len - 1]; if (*p == 'C' || *p == 'F') { - *p = '\0'; temp = strtof(str, &endptr); - if (endptr == str || *endptr != '\0') + if (endptr == str || endptr != p) return (0); if (*p == 'F') temp = (temp - 32) * 5 / 9;