#include #include #include #include "blkdev.h" #include "pathnames.h" #include "common.h" #include "c.h" /* * return partition name - uses static storage unless buf is supplied */ char * partname(char *dev, int pno, int lth) { static char bufp[PATH_MAX]; char *p; int w, wp; w = strlen(dev); p = ""; if (isdigit(dev[w-1])) p = "p"; /* devfs kludge - note: fdisk partition names are not supposed to equal kernel names, so there is no reason to do this */ if (strcmp (dev + w - 4, "disc") == 0) { w -= 4; p = "part"; } /* udev names partitions by appending -partN e.g. ata-SAMSUNG_SV8004H_0357J1FT712448-part1 */ if ((strncmp(dev, _PATH_DEV_BYID, strlen(_PATH_DEV_BYID)) == 0) || strncmp(dev, _PATH_DEV_BYPATH, strlen(_PATH_DEV_BYPATH)) == 0) { p = "-part"; } wp = strlen(p); if (lth) { snprintf(bufp, sizeof(bufp), "%*.*s%s%-2u", lth-wp-2, w, dev, p, pno); } else { snprintf(bufp, sizeof(bufp), "%.*s%s%-2u", w, dev, p, pno); } return bufp; }