Stop map_dev from returning [0:0]

We sometimes need the NULL when major==minor==0.
So make sure all callers of map_dev can cope with NULL.
This commit is contained in:
Neil Brown 2006-06-20 10:01:43 +10:00
parent 722966c66d
commit e81cdd9f37
3 changed files with 11 additions and 9 deletions

4
Grow.c
View File

@ -657,7 +657,7 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
offsets[sd->role] = sd->offset; offsets[sd->role] = sd->offset;
if (fdlist[sd->role] < 0) { if (fdlist[sd->role] < 0) {
fprintf(stderr, Name ": %s: cannot open component %s\n", fprintf(stderr, Name ": %s: cannot open component %s\n",
devname, dn); devname, dn?dn:"-unknown-");
goto abort; goto abort;
} }
} else { } else {
@ -667,7 +667,7 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
offsets[d] = sd->offset; offsets[d] = sd->offset;
if (fdlist[d]<0) { if (fdlist[d]<0) {
fprintf(stderr, Name ": %s: cannot open component %s\n", fprintf(stderr, Name ": %s: cannot open component %s\n",
devname, dn); devname, dn?dn:"-unknown");
goto abort; goto abort;
} }
d++; d++;

View File

@ -242,7 +242,8 @@ mddev_dev_t load_partitions(void)
minor = strtoul(mp, NULL, 10); minor = strtoul(mp, NULL, 10);
name = map_dev(major, minor, 1); name = map_dev(major, minor, 1);
if (!name)
continue;
d = malloc(sizeof(*d)); d = malloc(sizeof(*d));
d->devname = strdup(name); d->devname = strdup(name);
d->next = rv; d->next = rv;

13
util.c
View File

@ -417,12 +417,9 @@ char *map_dev(int major, int minor, int create)
char *std = NULL, *nonstd=NULL; char *std = NULL, *nonstd=NULL;
int did_check = 0; int did_check = 0;
if (major == 0 && minor == 0) { if (major == 0 && minor == 0)
if (!create)
return NULL; return NULL;
else
return "0:0";
}
retry: retry:
if (!devlist_ready) { if (!devlist_ready) {
char *dev = "/dev"; char *dev = "/dev";
@ -636,8 +633,12 @@ int dev_open(char *dev, int flags)
char *e; char *e;
int fd = -1; int fd = -1;
char devname[32]; char devname[32];
int major = strtoul(dev, &e, 0); int major;
int minor; int minor;
if (!dev) return -1;
major = strtoul(dev, &e, 0);
if (e > dev && *e == ':' && e[1] && if (e > dev && *e == ':' && e[1] &&
(minor = strtoul(e+1, &e, 0)) >= 0 && (minor = strtoul(e+1, &e, 0)) >= 0 &&
*e == 0) { *e == 0) {