NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: lib/39215: getdevmajor()/major() types don't match



The following reply was made to PR lib/39215; it has been noted by GNATS.

From: Matthias Drochner <M.Drochner%fz-juelich.de@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: lib-bug-people%NetBSD.org@localhost, gnats-admin%NetBSD.org@localhost,
        netbsd-bugs%NetBSD.org@localhost
Subject: Re: lib/39215: getdevmajor()/major() types don't match 
Date: Thu, 31 Jul 2008 20:46:04 +0200

 This is a multipart MIME message.
 
 --==_Exmh_66842860993650
 Content-Type: text/plain; charset=us-ascii
 
 
 dholland%eecs.harvard.edu@localhost said:
 > Probably changing major() (and minor(), for symmetry) to produce an
 > unsigned value
 
 The kernel is using int for majors and minors, and is using -1
 as special value. I'd say we should adjust getdevmajor() - it
 is NetBSD specific and used at only one place in the tree.
 (and the error check against ~0 is ugly)
 I've just done a full build with the appended patch - would that
 work for you?
 
 best regards
 Matthias
 
 
 
 
 
 -------------------------------------------------------------------
 -------------------------------------------------------------------
 Forschungszentrum Juelich GmbH
 52425 Juelich
 
 Sitz der Gesellschaft: Juelich
 Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B 3498
 Vorsitzende des Aufsichtsrats: MinDir'in Baerbel Brumme-Bothe
 Geschaeftsfuehrung: Prof. Dr. Achim Bachem (Vorsitzender),
 Dr. Ulrich Krafft (stellv. Vorsitzender), Prof. Dr. Harald Bolt,
 Dr. Sebastian M. Schmidt
 -------------------------------------------------------------------
 -------------------------------------------------------------------
 
 --==_Exmh_66842860993650
 Content-Type: text/plain ; name="devm.txt"; charset=us-ascii
 Content-Description: devm.txt
 Content-Disposition: attachment; filename="devm.txt"
 
 #
 # old_revision [bc9b40deb2273f24a32fed91af7d896bc85babaf]
 #
 # patch "include/stdlib.h"
 #  from [88c992035e9fc9a987d6bbd51ed517126c84252c]
 #    to [59cc802a461f4ad8962ff41d4c6490ca1d2d577a]
 # 
 # patch "lib/libc/gen/devname.c"
 #  from [fc188811536b897bb2cfaeefea452b85edef7fd4]
 #    to [a5c8cbb829ced66efa70d7881296e90962a03ba5]
 # 
 # patch "lib/libc/gen/getdevmajor.c"
 #  from [8d741a93bb4ddb0f918f7da5ef4c54b8c9d10141]
 #    to [d8e74dcdc59b115a68d3d7368c9131a3e388c422]
 #
 ============================================================
 --- include/stdlib.h   88c992035e9fc9a987d6bbd51ed517126c84252c
 +++ include/stdlib.h   59cc802a461f4ad8962ff41d4c6490ca1d2d577a
 @@ -278,7 +278,7 @@ int         dehumanize_number(const char *, int
  int    humanize_number(char *, size_t, int64_t, const char *, int, int);
  int    dehumanize_number(const char *, int64_t *);
  
 -dev_t  getdevmajor(const char *, mode_t);
 +int    getdevmajor(const char *, mode_t);
  int    getloadavg(double [], int);
  
  int    getenv_r(const char *, char *, size_t);
 ============================================================
 --- lib/libc/gen/devname.c     fc188811536b897bb2cfaeefea452b85edef7fd4
 +++ lib/libc/gen/devname.c     a5c8cbb829ced66efa70d7881296e90962a03ba5
 @@ -113,7 +113,7 @@ devname(dev, type)
        DBT data, key;
        DEVC *ptr, **pptr;
        static DEVC **devtb = NULL;
 -      static dev_t pts = (dev_t)~1;
 +      static int pts = -2;
  
        if (!db && !failure &&
            !(db = dbopen(_PATH_DEVDB, O_RDONLY, 0, DB_HASH, NULL))) {
 @@ -165,9 +165,9 @@ devname(dev, type)
                        return (NULL);
                ptr->valid = INVALID;
                if (type == S_IFCHR) {
 -                      if (pts == (dev_t)~1)
 +                      if (pts == -2)
                                pts = getdevmajor("pts", S_IFCHR);
 -                      if (pts != (dev_t)~0 && major(dev) == pts) {
 +                      if (pts != -1 && major(dev) == pts) {
                                (void)snprintf(ptr->name, sizeof(ptr->name),
                                    "%s%d", _PATH_DEV_PTS +
                                    sizeof(_PATH_DEV) - 1, minor(dev));
 ============================================================
 --- lib/libc/gen/getdevmajor.c 8d741a93bb4ddb0f918f7da5ef4c54b8c9d10141
 +++ lib/libc/gen/getdevmajor.c d8e74dcdc59b115a68d3d7368c9131a3e388c422
 @@ -51,13 +51,13 @@ __weak_alias(getdevmajor,_getdevmajor)
  __weak_alias(getdevmajor,_getdevmajor)
  #endif
  
 -dev_t
 +int
  getdevmajor(const char *name, mode_t type)
  {
        struct kinfo_drivers kd[200], *kdp = &kd[0];
        int rc, i;
        size_t sz = sizeof(kd);
 -      dev_t n = (dev_t)~0;
 +      int n = -1;
  
        if (type != S_IFCHR && type != S_IFBLK) {
                errno = EINVAL;
 
 --==_Exmh_66842860993650--
 


Home | Main Index | Thread Index | Old Index