From 332baaba1c9dd7eb611b596e021b6dd67aafd85e Mon Sep 17 00:00:00 2001 From: njl Date: Tue, 9 Dec 2003 06:29:57 +0000 Subject: Use sbufs instead of snprintf for parsing debug strings. --- sys/dev/acpica/acpi.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'sys/dev') diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c index a6ea163..1799f7b 100644 --- a/sys/dev/acpica/acpi.c +++ b/sys/dev/acpica/acpi.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -2263,14 +2264,12 @@ SYSINIT(acpi_debugging, SI_SUB_TUNABLES, SI_ORDER_ANY, acpi_set_debugging, static int acpi_debug_sysctl(SYSCTL_HANDLER_ARGS) { - char *options; - int error, len, *dbg; + int error, *dbg; struct debugtag *tag; + struct sbuf sb; - len = 512; - MALLOC(options, char *, len, M_TEMP, M_WAITOK); - options[0] = '\0'; - + if (sbuf_new(&sb, NULL, 128, SBUF_AUTOEXTEND) == NULL) + return (ENOMEM); if (strcmp(oidp->oid_arg1, "debug.acpi.layer") == 0) { tag = &dbg_layer[0]; dbg = &AcpiDbgLayer; @@ -2281,17 +2280,18 @@ acpi_debug_sysctl(SYSCTL_HANDLER_ARGS) /* Get old values if this is a get request. */ if (*dbg == 0) { - strlcpy(options, "NONE", sizeof(options)); + sbuf_cpy(&sb, "NONE"); } else if (req->newptr == NULL) { for (; tag->name != NULL; tag++) { - if ((*dbg & tag->value) == tag->value) { - strlcat(options, tag->name, len); - strlcat(options, " ", len); /* XXX */ - } + if ((*dbg & tag->value) == tag->value) + sbuf_printf(&sb, "%s ", tag->name); } } + sbuf_trim(&sb); + sbuf_finish(&sb); - error = sysctl_handle_string(oidp, options, len, req); + error = sysctl_handle_string(oidp, sbuf_data(&sb), sbuf_len(&sb), req); + sbuf_delete(&sb); /* If the user is setting a string, parse it. */ if (error == 0 && req->newptr != NULL) { @@ -2299,7 +2299,6 @@ acpi_debug_sysctl(SYSCTL_HANDLER_ARGS) setenv((char *)oidp->oid_arg1, (char *)req->newptr); acpi_set_debugging(NULL); } - FREE(options, M_TEMP); return (error); } -- cgit v1.1