Re: HEADS UP: Merge the gehenna-devsw branch.
MAEKAWA Masahide <[email protected]> Sun, 15 Sep 2002 22:13:46 +0900 (JST)
| Newsgroups | gmane.os.netbsd.ports.cats,gmane.os.netbsd.current |
|---|---|
| Message-ID | <[email protected]> |
Izumi Tsutsui <[email protected]> wrote: >> I have merged the gehenna-devsw branch into the trunk. > >I've updated my CATS' kernel to 1.6H, and it no longer >recognizes boot device. > >It seems that devsw_name2blk() (which is called from >cats/autoconf.c:get_device()) copies wrong strings into >devname arg for the device name. Is the attached patch correct? it seems to be still wrong. how about this? --- MAEKAWA Masahide --- Key fingerprint = BC5E D8CB 816C 2CB5 8560 FDE3 6CB8 BF5D 8D50 F2EE --- subr_devsw.c.orig Sun Sep 15 22:09:24 2002 +++ subr_devsw.c Sun Sep 15 22:09:27 2002 @@ -373,7 +373,7 @@ devsw_name2blk(const char *name, char *devname, size_t devnamelen) { struct devsw_conv *conv; - int bmajor, i; + int bmajor, len, i; if (name == NULL) return (-1); @@ -382,7 +382,8 @@ conv = &devsw_conv[i]; if (conv->d_name == NULL) continue; - if (strncmp(conv->d_name, name, strlen(conv->d_name)) != 0) + len = strlen(conv->d_name); + if (strncmp(conv->d_name, name, len) != 0) continue; bmajor = conv->d_bmajor; if (bmajor < 0 || bmajor >= max_bdevsws || @@ -390,11 +391,11 @@ return (-1); if (devname != NULL) { #ifdef DEVSW_DEBUG - if (strlen(conv->d_name) >= devnamelen) + if (len >= devnamelen) printf("devsw_name2blk: too short buffer"); #endif /* DEVSW_DEBUG */ - strncpy(devname, name, devnamelen); - devname[devnamelen - 1] = '\0'; + strncpy(devname, conv->d_name, len); + devname[len] = '\0'; } return (bmajor); }