X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/51631861ddb16afcfcf748cee26c14481549065e..311854206c50ea4207e7e1faa4efeb20f1bc8290:/gen/devname.c?ds=sidebyside diff --git a/gen/devname.c b/gen/devname.c index d7132ce..7774a82 100644 --- a/gen/devname.c +++ b/gen/devname.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. + * Copyright (c) 1999, 2004 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * @@ -68,37 +68,47 @@ #include char * -devname(dev, type) - dev_t dev; - mode_t type; +devname_r(dev_t dev, mode_t type, char *buf, int len) { register DIR *dp; register struct dirent *dirp; struct stat sb; - static char *buf = NULL; + char _buf[sizeof(_PATH_DEV) + MAXNAMLEN]; - if( buf == NULL ) { - buf = malloc(sizeof(_PATH_DEV) + MAXNAMLEN); - if( buf == NULL ) - return NULL; - strcpy(buf, _PATH_DEV); - } + strcpy(_buf, _PATH_DEV); if ((dp = opendir(_PATH_DEV)) == NULL) return (NULL); while ( (dirp = readdir(dp)) ) { - bcopy(dirp->d_name, buf + sizeof(_PATH_DEV) - 1, + bcopy(dirp->d_name, _buf + sizeof(_PATH_DEV) - 1, dirp->d_namlen + 1); - if (stat(buf, &sb)) + if (lstat(_buf, &sb)) continue; if (dev != sb.st_rdev) continue; if (type != (sb.st_mode & S_IFMT)) continue; + if (dirp->d_namlen + 1 > len) + break; + strcpy(buf, dirp->d_name); (void)closedir(dp); - return (buf + sizeof(_PATH_DEV) - 1); + return (buf); } (void)closedir(dp); return (NULL); } + +char * +devname(dev_t dev, mode_t type) +{ + static char *buf = NULL; + + if( buf == NULL ) { + buf = malloc(MAXNAMLEN); + if( buf == NULL ) + return NULL; + } + + return (devname_r(dev, type, buf, MAXNAMLEN)); +}