]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Fail overtly when asprintf fails to allocate memory
authorDustin Kirkland <kirkland@canonical.com>
Wed, 7 Jan 2009 22:25:33 +0000 (09:25 +1100)
committerNeilBrown <neilb@suse.de>
Wed, 7 Jan 2009 22:25:33 +0000 (09:25 +1100)
.. rather that causing a less-obvious violation of segments.

Signed-off-by: NeilBrown <neilb@suse.de>
Assemble.c
config.c
mdadm.h

index 0cdeeda36e6306d4bda49dfb0c828bdcb31f9793..ab8faeddf1d142cfa448d76859c51619f27cecfa 100644 (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);
index 121b3373554076212b844823847bce18e7d96eff..78bbb9d2d7cf8128eb4b669dee568bf6fd401ccc 100644 (file)
--- a/config.c
+++ b/config.c
@@ -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;
                }
diff --git a/mdadm.h b/mdadm.h
index bc4b38e7a5150305a1fc75086a4178f83cb60554..b0a8c5e776b5c4a920461b38195c3b474f24008d 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -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)