Use memchr(3) instead of a hand-rolled loop.
authorChris Pressey <cpressey@dragonflybsd.org>
Sun, 23 Jan 2005 19:41:23 +0000 (19:41 +0000)
committerChris Pressey <cpressey@dragonflybsd.org>
Sun, 23 Jan 2005 19:41:23 +0000 (19:41 +0000)
Requested-by: joerg
sbin/sysctl/sysctl.c

index 8bffb6f..623160e 100644 (file)
@@ -33,7 +33,7 @@
  * @(#) Copyright (c) 1993 The Regents of the University of California.  All rights reserved.
  * @(#)from: sysctl.c  8.1 (Berkeley) 6/6/93
  * $FreeBSD: src/sbin/sysctl/sysctl.c,v 1.25.2.11 2003/05/01 22:48:08 trhodes Exp $
- * $DragonFly: src/sbin/sysctl/sysctl.c,v 1.10 2005/01/18 03:13:52 cpressey Exp $
+ * $DragonFly: src/sbin/sysctl/sysctl.c,v 1.11 2005/01/23 19:41:23 cpressey Exp $
  */
 
 #ifdef __i386__
@@ -455,7 +455,7 @@ machdep_bootdev(u_long value)
 static int
 show_var(int *oid, size_t nlen)
 {
-       u_char buf[BUFSIZ], *val, *p;
+       u_char buf[BUFSIZ], *val, *p, *nul;
        char name[BUFSIZ], *fmt;
        const char *sep, *spacer;
        int qoid[CTL_MAXNAME+2];
@@ -516,11 +516,8 @@ show_var(int *oid, size_t nlen)
        case 'A':
                if (!nflag)
                        printf("%s%s", name, sep);
-               for (j = 0; j < len; j++) {
-                       if (p[j] == '\0')
-                               break;
-               }
-               fwrite(p, j, 1, stdout);
+               nul = memchr(p, '\0', len);
+               fwrite(p, nul == NULL ? len : nul - p, 1, stdout);
                return (0);
                
        case 'I':