Hi tech@ I was currently trying to get the fuse sysctls working when I found a bug in sbin/sysctl.c
If you look at sys/kern/vfs_init.c MOUNT_FUSEFS use the biggest typenum : 18. So when the function vfsinit in sbin/sysctl.c gets VFS_MAXTYPENUM it gets 18, but this value will never be reached in the for statement... I jump on the occasion to remove all compilation warnings for sysctl. Cheers, Index: sysctl.c =================================================================== RCS file: /cvs/src/sbin/sysctl/sysctl.c,v retrieving revision 1.189 diff -u -p -u -p -r1.189 sysctl.c --- sysctl.c 16 Apr 2013 22:06:48 -0000 1.189 +++ sysctl.c 6 Jun 2013 12:07:38 -0000 @@ -268,7 +268,8 @@ void listall(char *prefix, struct list *lp) { char *cp, name[BUFSIZ]; - int lvl2, len; + size_t len; + int lvl2; if (lp->list == NULL) return; @@ -861,7 +862,7 @@ parse(char *string, int flags) } if (special & RNDSTATS) { struct rndstats *rndstats = (struct rndstats *)buf; - int i; + size_t i; if (!nflag) (void)printf("%s%s", string, equ); @@ -1025,7 +1026,7 @@ parse_ports(char *portspec, int *port, i void parse_baddynamic(int mib[], size_t len, char *string, void **newvalp, - size_t *newsizep, int flags, int nflag) + size_t *newsizep, int flags, int nf) { static u_int32_t newbaddynamic[DP_MAPSIZE]; int port, high_port, baddynamic_loaded = 0, full_list_set = 0; @@ -1043,7 +1044,7 @@ parse_baddynamic(int mib[], size_t len, &size, 0, 0) == -1) { if (flags == 0) return; - if (!nflag) + if (!nf) printf("%s: ", string); puts("kernel does contain bad dynamic " "port tables"); @@ -1138,8 +1139,8 @@ vfsinit(void) } mib[2] = VFS_CONF; buflen = sizeof vfc; - for (loc = lastused, cnt = 1; cnt < maxtypenum; cnt++) { - mib[3] = cnt - 1; + for (loc = lastused, cnt = 0; cnt < maxtypenum; cnt++) { + mib[3] = cnt; if (sysctl(mib, 4, &vfc, &buflen, (void *)0, (size_t)0) < 0) { if (errno == EOPNOTSUPP) continue; @@ -1280,13 +1281,13 @@ sysctl_bios(char *string, char **bufpp, mib[2] = indx; if (indx == BIOS_DISKINFO) { if (*bufpp == NULL) { - char name[BUFSIZ]; + char str[BUFSIZ]; /* scan all the bios devices */ for (indx = 0; indx < 256; indx++) { - snprintf(name, sizeof(name), "%s.%u", + snprintf(str, sizeof(str), "%s.%u", string, indx); - parse(name, 1); + parse(str, 1); } return (-1); } @@ -1782,10 +1783,10 @@ sysctl_forkstat(char *string, char **buf int sysctl_malloc(char *string, char **bufpp, int mib[], int flags, int *typep) { - int indx, stor, i; + int indx, stor; char *name, bufp[SYSCTL_BUFSIZ], *buf, *ptr; struct list lp; - size_t size; + size_t size, i; if (*bufpp == NULL) { listall(string, &kernmalloclist); @@ -2282,7 +2283,7 @@ sysctl_tc(char *string, char **bufpp, in int sysctl_sensors(char *string, char **bufpp, int mib[], int flags, int *typep) { - char *devname, *typename; + char *name, *typename; int dev, numt, i; enum sensor_type type; struct sensordev snsrdev; @@ -2312,7 +2313,7 @@ sysctl_sensors(char *string, char **bufp * provided below hw.sensors tree. * The first branch of hw.sensors tree is the device name. */ - if ((devname = strsep(bufpp, ".")) == NULL) { + if ((name = strsep(bufpp, ".")) == NULL) { warnx("%s: incomplete specification", string); return (-1); } @@ -2325,11 +2326,11 @@ sysctl_sensors(char *string, char **bufp if (errno == ENOENT) break; } - if (strcmp(devname, snsrdev.xname) == 0) + if (strcmp(name, snsrdev.xname) == 0) break; } - if (strcmp(devname, snsrdev.xname) != 0) { - warnx("%s: sensor device not found: %s", string, devname); + if (strcmp(name, snsrdev.xname) != 0) { + warnx("%s: sensor device not found: %s", string, name); return (-1); } if (*bufpp == NULL) { @@ -2586,6 +2587,7 @@ struct emulname { } *emul_names; int emul_num, nemuls; int emul_init(void); +int emulcmp(const void *, const void *); int sysctl_emul(char *string, char *newval, int flags)