Module Name: src Committed By: dyoung Date: Fri Aug 21 22:51:00 UTC 2009
Modified Files: src/sys/kern: kern_sysctl.c src/sys/sys: sysctl.h Log Message: In sysctl_realloc(), don't make 'i' act as both an child-array iterator and the length of the old child array, but introduce a new variable, 'olen', for the latter purpose. In sysctl_alloc(), name a constant. Introduce sysctl_log_print(), a handy debug routine. No functional changes intended. To generate a diff of this commit: cvs rdiff -u -r1.223 -r1.224 src/sys/kern/kern_sysctl.c cvs rdiff -u -r1.185 -r1.186 src/sys/sys/sysctl.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/kern_sysctl.c diff -u src/sys/kern/kern_sysctl.c:1.223 src/sys/kern/kern_sysctl.c:1.224 --- src/sys/kern/kern_sysctl.c:1.223 Fri Aug 21 22:43:32 2009 +++ src/sys/kern/kern_sysctl.c Fri Aug 21 22:51:00 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_sysctl.c,v 1.223 2009/08/21 22:43:32 dyoung Exp $ */ +/* $NetBSD: kern_sysctl.c,v 1.224 2009/08/21 22:51:00 dyoung Exp $ */ /*- * Copyright (c) 2003, 2007, 2008 The NetBSD Foundation, Inc. @@ -68,7 +68,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_sysctl.c,v 1.223 2009/08/21 22:43:32 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_sysctl.c,v 1.224 2009/08/21 22:51:00 dyoung Exp $"); #include "opt_defcorename.h" #include "ksyms.h" @@ -2313,9 +2313,43 @@ rw_exit(&sysctl_treelock); } +void +sysctl_log_print(const struct sysctllog *slog) +{ + int i, len; + + printf("root %p left %d size %d content", (const void *)slog->log_root, + slog->log_left, slog->log_size); + + for (len = 0, i = slog->log_left; i < slog->log_size; i++) { + switch (len) { + case 0: + len = -1; + printf(" version %d", slog->log_num[i]); + break; + case -1: + len = -2; + printf(" type %d", slog->log_num[i]); + break; + case -2: + len = slog->log_num[i]; + printf(" len %d:", slog->log_num[i]); + if (len <= 0) + len = -1; + break; + default: + len--; + printf(" %d", slog->log_num[i]); + break; + } + } + printf(" end\n"); +} + int sysctl_log_add(struct sysctllog **logp, const struct sysctlnode *node) { + const int size0 = 16; int name[CTL_MAXNAME], namelen, i; const struct sysctlnode *pnode; struct sysctllog *log; @@ -2333,17 +2367,17 @@ /* XXX print error message? */ return (-1); } - log->log_num = malloc(16 * sizeof(int), + log->log_num = malloc(size0 * sizeof(int), M_SYSCTLDATA, M_WAITOK|M_CANFAIL); if (log->log_num == NULL) { /* XXX print error message? */ free(log, M_SYSCTLDATA); return (-1); } - memset(log->log_num, 0, 16 * sizeof(int)); + memset(log->log_num, 0, size0 * sizeof(int)); log->log_root = NULL; - log->log_size = 16; - log->log_left = 16; + log->log_size = size0; + log->log_left = size0; *logp = log; } else log = *logp; @@ -2578,7 +2612,7 @@ static int sysctl_realloc(struct sysctlnode *p) { - int i, j; + int i, j, olen; struct sysctlnode *n; assert(p->sysctl_csize == p->sysctl_clen); @@ -2586,8 +2620,8 @@ /* * how many do we have...how many should we make? */ - i = p->sysctl_clen; - n = malloc(2 * i * sizeof(struct sysctlnode), M_SYSCTLNODE, + olen = p->sysctl_clen; + n = malloc(2 * olen * sizeof(struct sysctlnode), M_SYSCTLNODE, M_WAITOK|M_CANFAIL); if (n == NULL) return (ENOMEM); @@ -2595,9 +2629,9 @@ /* * move old children over...initialize new children */ - memcpy(n, p->sysctl_child, i * sizeof(struct sysctlnode)); - memset(&n[i], 0, i * sizeof(struct sysctlnode)); - p->sysctl_csize = 2 * i; + memcpy(n, p->sysctl_child, olen * sizeof(struct sysctlnode)); + memset(&n[olen], 0, olen * sizeof(struct sysctlnode)); + p->sysctl_csize = 2 * olen; /* * reattach moved (and new) children to parent; if a moved Index: src/sys/sys/sysctl.h diff -u src/sys/sys/sysctl.h:1.185 src/sys/sys/sysctl.h:1.186 --- src/sys/sys/sysctl.h:1.185 Wed Jul 22 22:53:41 2009 +++ src/sys/sys/sysctl.h Fri Aug 21 22:51:00 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sysctl.h,v 1.185 2009/07/22 22:53:41 alc Exp $ */ +/* $NetBSD: sysctl.h,v 1.186 2009/08/21 22:51:00 dyoung Exp $ */ /* * Copyright (c) 1989, 1993 @@ -1164,6 +1164,7 @@ void sysctl_dump(const struct sysctlnode *); void sysctl_free(struct sysctlnode *); void sysctl_teardown(struct sysctllog **); +void sysctl_log_print(const struct sysctllog *); #ifdef SYSCTL_INCLUDE_DESCR #define SYSCTL_DESCR(s) s