Support Celsius (nn.nC), Fahrenheit (nn.nF) and Kelvin (nnnn) to
specify temperature. Reviewed by: njl MFC after: 3 days
This commit is contained in:
parent
c5e1a3ed4e
commit
d5da60dc31
@ -70,6 +70,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 void
|
||||
usage(void)
|
||||
@ -232,10 +233,17 @@ parse(char *string)
|
||||
|
||||
switch (kind & CTLTYPE) {
|
||||
case CTLTYPE_INT:
|
||||
intval = (int)strtol(newval, &endptr, 0);
|
||||
if (strcmp(fmt, "IK") == 0) {
|
||||
if (!set_IK((char*)newval, &intval))
|
||||
errx(1, "invalid value '%s'",
|
||||
newval);
|
||||
} else {
|
||||
intval = (int)strtol(newval, &endptr,
|
||||
0);
|
||||
if (endptr == newval || *endptr != '\0')
|
||||
errx(1, "invalid integer '%s'",
|
||||
newval);
|
||||
}
|
||||
newval = &intval;
|
||||
newsize = sizeof(intval);
|
||||
break;
|
||||
@ -443,6 +451,33 @@ set_T_dev_t (char *path, void **val, size_t *size)
|
||||
*size = sizeof statb.st_rdev;
|
||||
}
|
||||
|
||||
static int
|
||||
set_IK(char *str, int *val)
|
||||
{
|
||||
float temp;
|
||||
int len, kelv;
|
||||
char *p, *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')
|
||||
return (0);
|
||||
if (*p == 'F')
|
||||
temp = (temp - 32) * 5 / 9;
|
||||
kelv = temp * 10 + 2732;
|
||||
} else {
|
||||
kelv = (int)strtol(str, &endptr, 10);
|
||||
if (endptr == str || *endptr != '\0')
|
||||
return (0);
|
||||
}
|
||||
*val = kelv;
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* These functions uses a presently undocumented interface to the kernel
|
||||
* to walk the tree and get the type so it can print the value.
|
||||
|
@ -733,7 +733,6 @@ acpi_tz_temp_sysctl(SYSCTL_HANDLER_ARGS)
|
||||
return (EPERM);
|
||||
|
||||
/* Check user-supplied value for sanity. */
|
||||
temp = (temp * 10) + TZ_ZEROC;
|
||||
acpi_tz_sanity(sc, &temp, "user-supplied temp");
|
||||
if (temp == -1)
|
||||
return (EINVAL);
|
||||
|
Loading…
Reference in New Issue
Block a user