Fail overtly when asprintf fails to allocate memory

.. rather that causing a less-obvious violation of segments.

Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Dustin Kirkland 2009-01-08 09:25:33 +11:00 committed by NeilBrown
parent 89a10d84cb
commit 1a0ee0baf0
3 changed files with 14 additions and 3 deletions

View File

@ -386,9 +386,9 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
if (c) c++; else c= info.name;
if (isdigit(*c) && ((ident->autof & 7)==4 || (ident->autof&7)==6))
/* /dev/md/d0 style for partitionable */
asprintf(&mddev, "/dev/md/d%s", c);
xasprintf(&mddev, "/dev/md/d%s", c);
else
asprintf(&mddev, "/dev/md/%s", c);
xasprintf(&mddev, "/dev/md/%s", c);
mdfd = open_mddev(mddev, ident->autof);
if (mdfd < 0) {
st->ss->free_super(st);

View File

@ -559,7 +559,7 @@ void mailfromline(char *line)
alert_mail_from = strdup(w);
else {
char *t= NULL;
asprintf(&t, "%s %s", alert_mail_from, w);
xasprintf(&t, "%s %s", alert_mail_from, w);
free(alert_mail_from);
alert_mail_from = t;
}

11
mdadm.h
View File

@ -528,6 +528,17 @@ extern int open_mddev(char *dev, int autof);
extern int open_mddev_devnum(char *devname, int devnum, char *name,
char *chosen_name, int parts);
#include <assert.h>
#include <stdarg.h>
static inline int xasprintf(char **strp, const char *fmt, ...) {
va_list ap;
int ret;
va_start(ap, fmt);
ret = asprintf(strp, fmt, ap);
va_end(ap);
assert(ret >= 0);
return ret;
}
#define LEVEL_MULTIPATH (-4)
#define LEVEL_LINEAR (-1)