[master] Introduces CHECK_ASPRINTF macro that checks asprintfs return value and terminates program in OOM scenarios.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is to avoid having to copy-paste the asprintf-log-abort if branch
all the time. This commit also modifies existing asprintf() calls to
use the new macro in places where the change wouldn't modify program's
semantics.
---
 loader/cdinstall.c    |   45 +++++-------------
 loader/copy.c         |   32 +++---------
 loader/driverdisk.c   |   20 ++------
 loader/driverselect.c |   22 +++------
 loader/hardware.c     |    5 +--
 loader/hdinstall.c    |   49 +++++--------------
 loader/lang.c         |    5 +--
 loader/loader.c       |   89 +++++++++--------------------------
 loader/loader.h       |    6 ++
 loader/method.c       |    5 +--
 loader/net.c          |   52 ++++++++-------------
 loader/nfsinstall.c   |  125 +++++++++++++------------------------------------
 loader/urlinstall.c   |   47 ++++--------------
 loader/urls.c         |   14 ++----
 14 files changed, 145 insertions(+), 371 deletions(-)

diff --git a/loader/cdinstall.c b/loader/cdinstall.c
index d74396e..217528c 100644
--- a/loader/cdinstall.c
+++ b/loader/cdinstall.c
@@ -265,11 +265,8 @@ static void queryCDMediaCheck(char *dev, char *location) {
                     continue;
                 }
 
-                if (asprintf(&stage2loc, "%s/images/install.img",
-                             location) == -1) {
-                    logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                    abort();
-                }
+                CHECKED_ASPRINTF(&stage2loc, "%s/images/install.img",
+                                 location);
 
                 if (access(stage2loc, R_OK)) {
                     free(stage2loc);
@@ -308,10 +305,7 @@ static char *setupCdrom(char *location, struct loaderData_s *loaderData,
         return NULL;
     }
 
-    if (asprintf(&stage2loc, "%s/images/install.img", location) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&stage2loc, "%s/images/install.img", location);
 
     /* JKFIXME: ASSERT -- we have a cdrom device when we get here */
     do {
@@ -323,10 +317,7 @@ static char *setupCdrom(char *location, struct loaderData_s *loaderData,
                 continue;
 
             if (strncmp("/dev/", devices[i]->device, 5)) {
-                if (asprintf(&tmp, "/dev/%s", devices[i]->device) == -1) {
-                    logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                    abort();
-                }
+                CHECKED_ASPRINTF(&tmp, "/dev/%s", devices[i]->device);
 
                 free(devices[i]->device);
                 devices[i]->device = tmp;
@@ -398,19 +389,13 @@ static char *setupCdrom(char *location, struct loaderData_s *loaderData,
                         continue;
                     }
 
-                    if (asprintf(&updpath, "%s/images/updates.img", location) == -1) {
-                        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                        abort();
-                    }
+                    CHECKED_ASPRINTF(&updpath, "%s/images/updates.img", location);
 
                     logMessage(INFO, "Looking for updates in %s", updpath);
                     copyUpdatesImg(updpath);
                     free(updpath);
 
-                    if (asprintf(&updpath, "%s/images/product.img", location) == -1) {
-                        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                        abort();
-                    }
+                    CHECKED_ASPRINTF(&updpath, "%s/images/product.img", location);
 
                     logMessage(INFO, "Looking for product in %s", updpath);
                     copyProductImg(updpath);
@@ -422,11 +407,8 @@ static char *setupCdrom(char *location, struct loaderData_s *loaderData,
                         umount(location);
                     }
 
-                    if (asprintf(&retbuf, "cdrom://%s:%s",
-                                 devices[i]->device, location) == -1) {
-                        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                        abort();
-                    }
+                    CHECKED_ASPRINTF(&retbuf, "cdrom://%s:%s",
+                                     devices[i]->device, location);
                 } else {
                     /* this wasnt the CD we were looking for, clean up and */
                     /* try the next CD drive                               */
@@ -439,13 +421,10 @@ static char *setupCdrom(char *location, struct loaderData_s *loaderData,
             if (interactive) {
                 char * buf;
 
-                if (asprintf(&buf, _("The %s disc was not found in any of your "
-                                     "CDROM drives. Please insert the %s disc "
-                                     "and press %s to retry."),
-                    getProductName(), getProductName(), _("OK")) == -1) {
-                        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                        abort();
-                }
+                CHECKED_ASPRINTF(&buf, _("The %s disc was not found in any of your "
+                                         "CDROM drives. Please insert the %s disc "
+                                         "and press %s to retry."),
+                                 getProductName(), getProductName(), _("OK"));
 
                 ejectCdrom(cddev);
                 rc = newtWinChoice(_("Disc Not Found"),
diff --git a/loader/copy.c b/loader/copy.c
index 1c61233..35f2acf 100644
--- a/loader/copy.c
+++ b/loader/copy.c
@@ -48,14 +48,10 @@ int copyDirectory(char * from, char * to, void (*warnFn)(char *),
 
     if (!(dir = opendir(from))) {
         if (errorFn) {
-           if (asprintf(&msg, N_("Failed to read directory %s: %m"), from) == -1) {
-               fprintf(stderr, "%s: %d: %m\n", __func__, __LINE__);
-               fflush(stderr);
-               abort();
-           }
-
-           errorFn(msg);
-           free(msg);
+            CHECKED_ASPRINTF(&msg, N_("Failed to read directory %s: %m"), from);
+
+            errorFn(msg);
+            free(msg);
         }
 
         return 1;
@@ -81,12 +77,8 @@ int copyDirectory(char * from, char * to, void (*warnFn)(char *),
             link[i] = '\0';
             if (symlink(link, filespec2)) {
                 if (warnFn) {
-                    if (asprintf(&msg, "Failed to symlink %s to %s: %m",
-                                 filespec2, link) == -1) {
-                        fprintf(stderr, "%s: %d: %m\n", __func__, __LINE__);
-                        fflush(stderr);
-                        abort();
-                    }
+                    CHECKED_ASPRINTF(&msg, "Failed to symlink %s to %s: %m",
+                                     filespec2, link);
 
                     warnFn(msg);
                     free(msg);
@@ -96,11 +88,7 @@ int copyDirectory(char * from, char * to, void (*warnFn)(char *),
             fd = open(filespec, O_RDONLY);
             if (fd == -1) {
                 if (errorFn) {
-                    if (asprintf(&msg, "Failed to open %s: %m", filespec) == -1) {
-                        fprintf(stderr, "%s: %d: %m\n", __func__, __LINE__);
-                        fflush(stderr);
-                        abort();
-                    }
+                    CHECKED_ASPRINTF(&msg, "Failed to open %s: %m", filespec);
 
                     errorFn(msg);
                     free(msg);
@@ -112,11 +100,7 @@ int copyDirectory(char * from, char * to, void (*warnFn)(char *),
             outfd = open(filespec2, O_RDWR | O_TRUNC | O_CREAT, 0644);
             if (outfd == -1) {
                 if (warnFn) {
-                    if (asprintf(&msg, "Failed to create %s: %m", filespec2) == -1) {
-                        fprintf(stderr, "%s: %d: %m\n", __func__, __LINE__);
-                        fflush(stderr);
-                        abort();
-                    }
+                    CHECKED_ASPRINTF(&msg, "Failed to create %s: %m", filespec2);
 
                     warnFn(msg);
                     free(msg);
diff --git a/loader/driverdisk.c b/loader/driverdisk.c
index e5d8f90..3a6f497 100644
--- a/loader/driverdisk.c
+++ b/loader/driverdisk.c
@@ -146,15 +146,8 @@ static int loadDriverDisk(struct loaderData_s *loaderData, char *mntpt) {
     location->title = strdup(title);
     location->version = version;
 
-    if (asprintf(&location->path, "/tmp/DD-%d/modules.cgz", disknum) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
-
-    if (asprintf(&fwdir, "/tmp/DD-%d/firmware", disknum) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&location->path, "/tmp/DD-%d/modules.cgz", disknum);
+    CHECKED_ASPRINTF(&fwdir, "/tmp/DD-%d/firmware", disknum);
 
     if (!access(fwdir, R_OK|X_OK)) {
         add_fw_search_dir(loaderData, fwdir);
@@ -349,12 +342,9 @@ int loadDriverFromMedia(int class, struct loaderData_s *loaderData,
         case DEV_INSERT: {
             char * buf;
 
-            if (asprintf(&buf,
-                         _("Insert your driver disk into /dev/%s "
-                           "and press \"OK\" to continue."), device) == -1) {
-                logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                abort();
-            }
+            CHECKED_ASPRINTF(&buf,
+                             _("Insert your driver disk into /dev/%s "
+                               "and press \"OK\" to continue."), device);
 
             rc = newtWinChoice(_("Insert Driver Disk"), _("OK"), _("Back"),
                                buf);
diff --git a/loader/driverselect.c b/loader/driverselect.c
index 28f5ffd..82e9fd4 100644
--- a/loader/driverselect.c
+++ b/loader/driverselect.c
@@ -63,14 +63,11 @@ static int getManualModuleArgs(struct moduleInfo * mod, char *** moduleArgs) {
     }
 
     f = newtForm(NULL, NULL, 0);
-    if (asprintf(&buf,
-                 _("Please enter any parameters which you wish to pass "
-                   "to the %s module separated by spaces.  If you don't "
-                   "know what parameters to supply, skip this screen "
-                   "by pressing the \"OK\" button."), mod->moduleName) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&buf,
+                     _("Please enter any parameters which you wish to pass "
+                       "to the %s module separated by spaces.  If you don't "
+                       "know what parameters to supply, skip this screen "
+                       "by pressing the \"OK\" button."), mod->moduleName);
 
     text = newtTextboxReflowed(-1, -1, buf, 60, 0, 10, 0);
     entry = newtEntry(-1, -1, argsEntry, 50, (const char **) &argsEntry, 
@@ -212,12 +209,9 @@ int chooseManualDriver(int class, struct loaderData_s *loaderData) {
     for (i = 0; i < numSorted; i++) {
         char *buf = NULL;
 
-        if (asprintf(&buf, "%s (%s)", 
-                 modInfo->moduleList[sortedOrder[i].index].description,
-                 modInfo->moduleList[sortedOrder[i].index].moduleName) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&buf, "%s (%s)", 
+                         modInfo->moduleList[sortedOrder[i].index].description,
+                         modInfo->moduleList[sortedOrder[i].index].moduleName);
 
         newtListboxAppendEntry(listbox, buf, 
                 INT_TO_POINTER(sortedOrder[i].index));
diff --git a/loader/hardware.c b/loader/hardware.c
index e9be279..3ffcde0 100644
--- a/loader/hardware.c
+++ b/loader/hardware.c
@@ -84,10 +84,7 @@ static int detectHardware() {
         close(fd);
 
         if (timeout) {
-            if (asprintf(&args[2], "--timeout=%d", timeout) == -1) {
-                logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                abort();
-            }
+            CHECKED_ASPRINTF(&args[2], "--timeout=%d", timeout);
         }
 
         rc = execv("/sbin/udevadm", args);
diff --git a/loader/hdinstall.c b/loader/hdinstall.c
index a4396df..5b17c13 100644
--- a/loader/hdinstall.c
+++ b/loader/hdinstall.c
@@ -67,16 +67,9 @@ static char * setupIsoImages(char * device, char * dirName, char * location) {
     if (doPwMount(device, "/mnt/isodir", "auto", "ro", NULL))
         return NULL;
 
-    if (asprintf(&dirspec, "/mnt/isodir%.*s",
-                 (int) (strrchr(dirName, '/') - dirName), dirName) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
-
-    if (asprintf(&path, "/mnt/isodir%s", dirName) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&dirspec, "/mnt/isodir%.*s",
+                     (int) (strrchr(dirName, '/') - dirName), dirName);
+    CHECKED_ASPRINTF(&path, "/mnt/isodir%s", dirName);
 
     if (path) {
         logMessage(INFO, "Path to stage2 image is %s", path);
@@ -92,19 +85,13 @@ static char * setupIsoImages(char * device, char * dirName, char * location) {
             goto err;
         }
 
-        if (asprintf(&updpath, "%s/updates.img", dirspec) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&updpath, "%s/updates.img", dirspec);
 
         logMessage(INFO, "Looking for updates for HD in %s", updpath);
         copyUpdatesImg(updpath);
         free(updpath);
 
-        if (asprintf(&updpath, "%s/product.img", dirspec) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&updpath, "%s/product.img", dirspec);
 
         logMessage(INFO, "Looking for product for HD in %s", updpath);
         copyProductImg(updpath);
@@ -113,11 +100,8 @@ static char * setupIsoImages(char * device, char * dirName, char * location) {
         free(dirspec);
         umount("/mnt/isodir");
 
-        if (asprintf(&url, "hd:%s:/%s", device,
-                     dirName ? dirName : ".") == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&url, "hd:%s:/%s", device,
+                         dirName ? dirName : ".");
 
         return url;
     } else {
@@ -233,15 +217,11 @@ char * mountHardDrive(struct installMethod * method,
         }
 
         /* now find out which partition has the stage2 image */
-        if (asprintf(&buf, _("What partition and directory on that "
-                             "partition holds the installation image "
-                             "for %s?  If you don't see the disk drive "
-                             "you're using listed here, press F2 to "
-                             "configure additional devices."),
-                     getProductName()) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&buf, _("What partition and directory on that "
+                                 "partition holds the installation image "
+                                 "for %s?  If you don't see the disk drive "
+                                 "you're using listed here, press F2 to "
+                                 "configure additional devices."));
 
         text = newtTextboxReflowed(-1, -1, buf, 62, 5, 5, 0);
         free(buf);
@@ -327,10 +307,7 @@ char * mountHardDrive(struct installMethod * method,
          */
         substr = strstr(dir, ".img");
         if (!substr || (substr && *(substr+4) != '\0')) {
-            if (asprintf(&dir, "%s/images/install.img", dir) == -1) {
-                logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                abort();
-            }
+            CHECKED_ASPRINTF(&dir, "%s/images/install.img", dir);
         }
 
         loaderData->invalidRepoParam = 1;
diff --git a/loader/lang.c b/loader/lang.c
index 4b1103d..e72cadb 100644
--- a/loader/lang.c
+++ b/loader/lang.c
@@ -262,10 +262,7 @@ static int setupLanguage(int choice, int forced) {
     newtDrawRootText(0, 0, buf);
 
     char *fmt = FL_RESCUE(flags) ? _(topLineWelcomeRescue) : _(topLineWelcome);
-    if (asprintf(&buf, fmt, getProductName(), getProductArch()) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&buf, fmt, getProductName(), getProductArch());
 
     newtDrawRootText(0, 0, buf);
     free(buf);
diff --git a/loader/loader.c b/loader/loader.c
index dea600f..26d8d2c 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -190,10 +190,7 @@ void doGdbserver(struct loaderData_s *loaderData) {
             return;
         }
 
-        if (asprintf(&pid, "%d", loaderPid) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&pid, "%d", loaderPid);
 
         if (!(child = fork())) {
             logMessage(INFO, "starting gdbserver: %s %s %s %s",
@@ -225,11 +222,7 @@ void startNewt(void) {
         char *buf;
         char *arch = getProductArch();
 
-        if (asprintf(&buf, _("Welcome to %s for %s"), getProductName(),
-                     arch) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&buf, _("Welcome to %s for %s"), getProductName(), arch);
 
         newtInit();
         newtCls();
@@ -476,10 +469,7 @@ void loadUpdates(struct loaderData_s *loaderData) {
                 if (dir == -1) {
                     stage = UPD_DEVICE;
                 } else {
-                    if (asprintf(&part, "/dev/%s", device) == -1) {
-                        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                        abort();
-                    }
+                    CHECKED_ASPRINTF(&part, "/dev/%s", device);
                     stage = UPD_PROMPT;
                 }
 
@@ -507,11 +497,8 @@ void loadUpdates(struct loaderData_s *loaderData) {
         }
 
         case UPD_PROMPT:
-            if (asprintf(&buf, _("Insert your updates disk into %s and "
-                                 "press \"OK\" to continue."), part) == -1) {
-                logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                abort();
-            }
+            CHECKED_ASPRINTF(&buf, _("Insert your updates disk into %s and "
+                                     "press \"OK\" to continue."), part);
 
             rc = newtWinChoice(_("Updates Disk"), _("OK"), _("Back"), buf);
             free(buf);
@@ -647,11 +634,8 @@ static void readNetInfo(struct loaderData_s ** ld) {
 
     while ((ent = readdir(dp)) != NULL) {
         if (!strncmp(ent->d_name, "ifcfg-", 6)) {
-            if (asprintf(&cfgfile, "/etc/sysconfig/network-scripts/%s",
-                         ent->d_name) == -1) {
-                logMessage(DEBUGLVL, "%s (%d): %m", __func__, __LINE__);
-                abort();
-            }
+            CHECKED_ASPRINTF(&cfgfile, "/etc/sysconfig/network-scripts/%s",
+                             ent->d_name);
 
             break;
         }
@@ -1140,19 +1124,13 @@ static void parseCmdLineFlags(struct loaderData_s * loaderData,
                 }
 
                 if (!strncasecmp(argv[i], "vesa", 4)) {
-                    if (asprintf(&extraArgs[numExtraArgs],
-                                 "--xdriver=vesa") == -1) {
-                        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                        abort();
-                    }
+                    CHECKED_ASPRINTF(&extraArgs[numExtraArgs],
+                                     "--xdriver=vesa");
 
                     logMessage(WARNING, "\"vesa\" command line argument is deprecated.  use \"xdriver=vesa\".");
                 } else {
-                    if (asprintf(&extraArgs[numExtraArgs],"--%s",
-                                 argv[i]) == -1) {
-                        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                        abort();
-                    }
+                    CHECKED_ASPRINTF(&extraArgs[numExtraArgs],"--%s",
+                                     argv[i]);
                 }
 
                 numExtraArgs += 1;
@@ -1179,11 +1157,8 @@ static void checkForRam(void) {
     if (totalMemory() < MIN_RAM) {
         char *buf;
 
-        if (asprintf(&buf, _("You do not have enough RAM to install %s "
-                             "on this machine."), getProductName()) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&buf, _("You do not have enough RAM to install %s "
+                                 "on this machine."), getProductName());
 
         startNewt();
         newtWinMessage(_("Error"), _("OK"), buf);
@@ -1250,11 +1225,8 @@ static char *doLoaderMain(struct loaderData_s *loaderData,
              */
             char *tmp;
 
-            if (asprintf(&tmp, "%s/images/install.img",
-                         loaderData->instRepo) == -1) {
-                logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                abort();
-            }
+            CHECKED_ASPRINTF(&tmp, "%s/images/install.img",
+                             loaderData->instRepo);
 
             logMessage(INFO, "no stage2= given, assuming %s", tmp);
             setStage2LocFromCmdline(tmp, loaderData);
@@ -1594,12 +1566,9 @@ static char *doLoaderMain(struct loaderData_s *loaderData,
                         /* Doesn't contain /images?  Let's not even try. */
                         if (strstr(url, "/images") == NULL)
                             break;
-
-                        if (asprintf(&newInstRepo, "%.*s",
-                                     (int) (strstr(url, "/images")-url), url) == -1) {
-                            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                            abort();
-                        }
+                        
+                        CHECKED_ASPRINTF(&newInstRepo, "%.*s",
+                                         (int) (strstr(url, "/images")-url), url);
 
                         free(loaderData->instRepo);
                         loaderData->instRepo = newInstRepo;
@@ -1665,19 +1634,13 @@ static void migrate_runtime_directory(char * dirname) {
     char * runtimedir;
     int ret;
 
-    if (asprintf(&runtimedir, "/mnt/runtime%s", dirname) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&runtimedir, "/mnt/runtime%s", dirname);
 
     if (!access(runtimedir, X_OK)) {
         if (unlink(dirname) == -1) {
             char * olddir;
-
-            if (asprintf(&olddir, "%s_old", dirname) == -1) {
-                logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                abort();
-            }
+            
+            CHECKED_ASPRINTF(&olddir, "%s_old", dirname);
 
             ret = rename(dirname, olddir);
             free(olddir);
@@ -1780,10 +1743,7 @@ static void add_to_path_env(const char *env, const char *val)
 
     oldenv = getenv(env);
     if (oldenv) {
-        if (asprintf(&newenv, "%s:%s", val, oldenv) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&newenv, "%s:%s", val, oldenv);
 
         oldenv = strdupa(newenv);
         free(newenv);
@@ -2115,10 +2075,7 @@ int main(int argc, char ** argv) {
 
         c = path[n];
         path[n] = '\0';
-        if (asprintf(&binpath, "%s/anaconda", path) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&binpath, "%s/anaconda", path);
         path[n] = c;
 
         if (!access(binpath, X_OK)) {
diff --git a/loader/loader.h b/loader/loader.h
index f942b7e..8345708 100644
--- a/loader/loader.h
+++ b/loader/loader.h
@@ -185,4 +185,10 @@ struct loaderData_s {
 #define LIBPATH "/lib:/usr/lib:/usr/X11R6/lib:/usr/kerberos/lib:/mnt/usr/lib:/mnt/sysimage/lib:/mnt/sysimage/usr/lib"
 #endif
 
+#define CHECKED_ASPRINTF(...)                                       \
+    if (asprintf( __VA_ARGS__ ) == -1) {                            \
+        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);     \
+        abort();                                                    \
+    }
+
 #endif
diff --git a/loader/method.c b/loader/method.c
index ebfe557..029b7a0 100644
--- a/loader/method.c
+++ b/loader/method.c
@@ -88,10 +88,7 @@ int mountLoopback(char *fsystem, char *mntpoint, char *device) {
        return LOADER_ERROR;
     }
 
-    if (asprintf(&opts, "ro,loop=%s", device) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&opts, "ro,loop=%s", device);
 
     if (doPwMount(fsystem, mntpoint, "auto", opts, &err)) {
         logMessage(ERROR, "failed to mount loopback device %s on %s as %s: %s",
diff --git a/loader/net.c b/loader/net.c
index 9280dc7..ff00843 100644
--- a/loader/net.c
+++ b/loader/net.c
@@ -955,15 +955,12 @@ int manualNetConfig(char * device, iface_t * iface,
     /* main window layout */
     grid = newtCreateGrid(1, 3);
 
-    if (asprintf(&buf,
-                 _("Enter the IPv4 and/or the IPv6 address and prefix "
-                   "(address / prefix).  For IPv4, the dotted-quad "
-                   "netmask or the CIDR-style prefix are acceptable. "
-                   "The gateway and name server fields must be valid IPv4 "
-                   "or IPv6 addresses.")) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&buf,
+                     _("Enter the IPv4 and/or the IPv6 address and prefix "
+                       "(address / prefix).  For IPv4, the dotted-quad "
+                       "netmask or the CIDR-style prefix are acceptable. "
+                       "The gateway and name server fields must be valid IPv4 "
+                       "or IPv6 addresses."));
 
     text = newtTextboxReflowed(-1, -1, buf, 52, 0, 10, 0);
 
@@ -1157,19 +1154,13 @@ int writeDisabledNetInfo(void) {
         }
 
         /* write disabled ifcfg-DEVICE file */
-        if (asprintf(&ofile, "%s/.ifcfg-%s",
-                     NETWORK_SCRIPTS_PATH,
-                     devs[i]->device) == -1) {
-            logMessage(ERROR, "%s (%d): %m", __func__, __LINE__);
-            abort();
-        }
-
-        if (asprintf(&nfile, "%s/ifcfg-%s",
-                     NETWORK_SCRIPTS_PATH,
-                     devs[i]->device) == -1) {
-            logMessage(ERROR, "%s (%d): %m", __func__, __LINE__);
-            abort();
-        }
+        
+        CHECKED_ASPRINTF(&ofile, "%s/.ifcfg-%s",
+                         NETWORK_SCRIPTS_PATH,
+                         devs[i]->device);
+        CHECKED_ASPRINTF(&nfile, "%s/ifcfg-%s",
+                         NETWORK_SCRIPTS_PATH,
+                         devs[i]->device);
 
         if ((fp = fopen(ofile, "w")) == NULL) {
             free(ofile);
@@ -1885,16 +1876,13 @@ int chooseNetworkInterface(struct loaderData_s * loaderData) {
                 continue;
             }
 
-            if (asprintf(&idstr, "%s %s %s",
-                         _("You can identify the physical port for"),
-                         devices[deviceNum],
-                         _("by flashing the LED lights for a number of "
-                           "seconds.  Enter a number between 1 and 30 to "
-                           "set the duration to flash the LED port "
-                           "lights.")) == -1) {
-                logMessage(ERROR, "asprintf() failure in %s: %m", __func__);
-                abort();
-            }
+            CHECKED_ASPRINTF(&idstr, "%s %s %s",
+                             _("You can identify the physical port for"),
+                             devices[deviceNum],
+                             _("by flashing the LED lights for a number of "
+                               "seconds.  Enter a number between 1 and 30 to "
+                               "set the duration to flash the LED port "
+                               "lights."));
 
             i = 1;
             while (i) {
diff --git a/loader/nfsinstall.c b/loader/nfsinstall.c
index e405df9..0eb3cbe 100644
--- a/loader/nfsinstall.c
+++ b/loader/nfsinstall.c
@@ -68,24 +68,16 @@ static int nfsGetSetup(char ** hostptr, char ** dirptr) {
     entries[0].text = _("NFS server name:");
     entries[0].value = &newServer;
     entries[0].flags = NEWT_FLAG_SCROLL;
-
-    if (asprintf(&entries[1].text, _("%s directory:"),
-                 getProductName()) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    
+    CHECKED_ASPRINTF(&entries[1].text, _("%s directory:"), getProductName());
 
     entries[1].value = &newDir;
     entries[1].flags = NEWT_FLAG_SCROLL;
     entries[2].text = NULL;
     entries[2].value = NULL;
 
-    if (asprintf(&buf, _("Please enter the server name and path to your %s "
-                         "installation image."), getProductName()) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
-
+    CHECKED_ASPRINTF(&buf, _("Please enter the server name and path to your %s "
+                             "installation image."), getProductName());
     do {
         rc = newtWinEntries(_("NFS Setup"), buf, 60, 5, 15,
                             24, entries, _("OK"), _("Back"), NULL);
@@ -149,11 +141,7 @@ static void addDefaultKickstartFile(char **file, char *ip) {
      */
     if ((*file) && (((*file)[strlen(*file) - 1] == '/') ||
                     ((*file)[strlen(*file) - 1] == '\0'))) {
-        if (asprintf(file, "%s%s-kickstart", *file, ip) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
-
+        CHECKED_ASPRINTF(file, "%s%s-kickstart", *file, ip);
         logMessage(DEBUGLVL, "addDefaultKickstartFile file: |%s|", *file);
     }
 }
@@ -184,12 +172,9 @@ char * mountNfsImage(struct installMethod * method,
                     loaderData->stage2Data)->mountOpts == NULL) {
                     mountOpts = strdup("ro");
                 } else {
-                    if (asprintf(&mountOpts, "ro,%s",
-                                 ((struct nfsInstallData *)
-                                 loaderData->stage2Data)->mountOpts) == -1) {
-                        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                        abort();
-                    }
+                    CHECKED_ASPRINTF(&mountOpts, "ro,%s",
+                                     ((struct nfsInstallData *)
+                                      loaderData->stage2Data)->mountOpts);
                 }
 
                 logMessage(INFO, "host is %s, dir is %s, opts are '%s'", host, directory, mountOpts);
@@ -219,18 +204,10 @@ char * mountNfsImage(struct installMethod * method,
                  */
                 substr = strstr(directory, ".img");
                 if (!substr || (substr && *(substr+4) != '\0')) {
-                    if (asprintf(&(loaderData->instRepo), "nfs:%s:%s",
-                                 host, directory) == -1) {
-                        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                        abort();
-                    }
-
-                    if (asprintf(&tmp, "nfs:%s:%s/images/install.img",
-                                 host, directory) == -1) {
-                        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                        abort();
-                    }
-
+                    CHECKED_ASPRINTF(&(loaderData->instRepo), "nfs:%s:%s",
+                                     host, directory);
+                    CHECKED_ASPRINTF(&tmp, "nfs:%s:%s/images/install.img",
+                                     host, directory);
                     setStage2LocFromCmdline(tmp, loaderData);
                     free(host);
                     free(directory);
@@ -247,13 +224,9 @@ char * mountNfsImage(struct installMethod * method,
         case NFS_STAGE_MOUNT: {
             char *buf;
 
-            if (asprintf(&fullPath, "%s:%.*s", host,
-                         (int) (strrchr(directory, '/')-directory),
-                         directory) == -1) {
-                logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                abort();
-            }
-
+            CHECKED_ASPRINTF(&fullPath, "%s:%.*s", host,
+                             (int) (strrchr(directory, '/')-directory),
+                             directory);
             logMessage(INFO, "mounting nfs path %s", fullPath);
 
             if (FL_TESTING(flags)) {
@@ -264,11 +237,8 @@ char * mountNfsImage(struct installMethod * method,
             stage = NFS_STAGE_NFS;
 
             if (!doPwMount(fullPath, "/mnt/stage2", "nfs", mountOpts, NULL)) {
-                if (asprintf(&buf, "/mnt/stage2/%s",
-                             strrchr(directory, '/')) == -1) {
-                    logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                    abort();
-                }
+                CHECKED_ASPRINTF(&buf, "/mnt/stage2/%s",
+                                 strrchr(directory, '/'));
 
                 if (!access(buf, R_OK)) {
                     logMessage(INFO, "can access %s", buf);
@@ -276,14 +246,8 @@ char * mountNfsImage(struct installMethod * method,
 
                     if (rc == 0) {
                         stage = NFS_STAGE_UPDATES;
-
-                        if (asprintf(&url, "nfs:%s:%s", host,
-                                     directory) == -1) {
-                            logMessage(CRITICAL, "%s: %d: %m", __func__,
-                                       __LINE__);
-                            abort();
-                        }
-
+                        CHECKED_ASPRINTF(&url, "nfs:%s:%s", host,
+                                         directory);
                         free(buf);
                         break;
                     } else {
@@ -309,12 +273,10 @@ char * mountNfsImage(struct installMethod * method,
                 break;
             }
 
-            if (asprintf(&buf, _("That directory does not seem to "
-                                 "contain a %s installation image."),
-                         getProductName()) == -1) {
-                logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                abort();
-            }
+            CHECKED_ASPRINTF(&buf,
+                             _("That directory does not seem to "
+                               "contain a %s installation image."),
+                             getProductName());
 
             newtWinMessage(_("Error"), _("OK"), buf);
             free(buf);
@@ -331,12 +293,9 @@ char * mountNfsImage(struct installMethod * method,
         case NFS_STAGE_UPDATES: {
             char *buf;
 
-            if (asprintf(&buf, "%.*s/RHupdates",
-                         (int) (strrchr(fullPath, '/')-fullPath),
-                         fullPath) == -1) {
-                logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                abort();
-            }
+            CHECKED_ASPRINTF(&buf, "%.*s/RHupdates",
+                             (int) (strrchr(fullPath, '/')-fullPath),
+                             fullPath);
 
             logMessage(INFO, "mounting nfs path %s for updates", buf);
 
@@ -402,10 +361,7 @@ void setKickstartNfs(struct loaderData_s * loaderData, int argc,
 
     substr = strstr(dir, ".img");
     if (!substr || (substr && *(substr+4) != '\0')) {
-        if (asprintf(&(loaderData->instRepo), "nfs:%s:%s", host, dir) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&(loaderData->instRepo), "nfs:%s:%s", host, dir);
 
         logMessage(INFO, "results of nfs, host is %s, dir is %s, opts are '%s'",
                    host, dir, mountOpts);
@@ -503,18 +459,10 @@ int getFileFromNfs(char * url, char * dest, struct loaderData_s * loaderData) {
 
             filename = nm_dhcp4_config_get_one_option(dhcp, "filename");
             if (filename == NULL) {
-                 if (asprintf(&url, "%s:/kickstart/", nextserver) == -1) {
-                     logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                     abort();
-                 }
-
+                CHECKED_ASPRINTF(&url, "%s:/kickstart/", nextserver);
                 logMessage(ERROR, "bootp: no bootfile received");
             } else {
-                 if (asprintf(&url, "%s:%s", nextserver, filename) == -1) {
-                     logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                     abort();
-                 }
-
+                CHECKED_ASPRINTF(&url, "%s:%s", nextserver, filename);
                 logMessage(INFO, "bootp: bootfile is %s", filename);
             }
 
@@ -545,15 +493,9 @@ int getFileFromNfs(char * url, char * dest, struct loaderData_s * loaderData) {
         chk = host + strlen(host)-1;
 
         if (*chk == '/' || *path == '/') {
-            if (asprintf(&host, "%s:%s", host, path) == -1) {
-                logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                abort();
-            }
+            CHECKED_ASPRINTF(&host, "%s:%s", host, path);
         } else {
-            if (asprintf(&host, "%s:/%s", host, path) == -1) {
-                logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                abort();
-            }
+            CHECKED_ASPRINTF(&host, "%s:/%s", host, path);
         }
     }
 
@@ -562,10 +504,7 @@ int getFileFromNfs(char * url, char * dest, struct loaderData_s * loaderData) {
     if (!doPwMount(host, "/tmp/mnt", "nfs", opts, NULL)) {
         char * buf;
 
-        if (asprintf(&buf, "/tmp/mnt/%s", file) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&buf, "/tmp/mnt/%s", file);
 
         if (copyFile(buf, dest)) {
             logMessage(ERROR, "failed to copy file to %s", dest);
diff --git a/loader/urlinstall.c b/loader/urlinstall.c
index b03efce..67108b5 100644
--- a/loader/urlinstall.c
+++ b/loader/urlinstall.c
@@ -66,15 +66,9 @@ static char **headers() {
         logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
         abort();
     }
-
-    if (asprintf(&extraHeaders[0], "X-Anaconda-Architecture: %s", getProductArch()) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
-    if (asprintf(&extraHeaders[1], "X-Anaconda-System-Release: %s", getProductName()) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    
+    CHECKED_ASPRINTF(&extraHeaders[0], "X-Anaconda-Architecture: %s", getProductArch());
+    CHECKED_ASPRINTF(&extraHeaders[1], "X-Anaconda-System-Release: %s", getProductName());
 
     if (FL_KICKSTART_SEND_MAC(flags)) {
         /* find all ethernet devices and make a header entry for each one */
@@ -89,11 +83,8 @@ static char **headers() {
 
             if (mac) {
                 extraHeaders = realloc(extraHeaders, (len+1)*sizeof(char *));
-                if (asprintf(&extraHeaders[len], "X-RHN-Provisioning-MAC-%d: %s %s",
-                             i, dev, mac) == -1) {
-                    logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-                    abort();
-                }
+                CHECKED_ASPRINTF(&extraHeaders[len], "X-RHN-Provisioning-MAC-%d: %s %s",
+                                 i, dev, mac);
 
                 len++;
                 free(mac);
@@ -122,10 +113,7 @@ static char **headers() {
 
         extraHeaders = realloc(extraHeaders, (len+1)*sizeof(char *));
 
-        if (asprintf(&extraHeaders[len], "X-System-Serial-Number: %s", sn) == -1) {
-            logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-            abort();
-        }
+        CHECKED_ASPRINTF(&extraHeaders[len], "X-System-Serial-Number: %s", sn);
 
         len++;
     }
@@ -190,10 +178,7 @@ static int loadUrlImages(struct loaderData_s *loaderData, struct iurlinfo *ui) {
 
     /* grab the updates.img before install.img so that we minimize our
      * ramdisk usage */
-    if (asprintf(&ui->url, "%s/%s", path, "updates.img") == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&ui->url, "%s/%s", path, "updates.img");
 
     if (!loadSingleUrlImage(loaderData, ui, "/tmp/updates-disk.img", "/tmp/update-disk",
                             "/dev/loop7", 1)) {
@@ -211,10 +196,7 @@ static int loadUrlImages(struct loaderData_s *loaderData, struct iurlinfo *ui) {
 
     /* grab the product.img before install.img so that we minimize our
      * ramdisk usage */
-    if (asprintf(&ui->url, "%s/%s", path, "product.img") == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&ui->url, "%s/%s", path, "product.img");
 
     if (!loadSingleUrlImage(loaderData, ui, "/tmp/product-disk.img", "/tmp/product-disk",
                             "/dev/loop7", 1)) {
@@ -228,10 +210,7 @@ static int loadUrlImages(struct loaderData_s *loaderData, struct iurlinfo *ui) {
     free(ui->url);
     ui->url = strdup(oldUrl);
 
-    if (asprintf(&dest, "/tmp/install.img") == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&dest, "/tmp/install.img");
 
     rc = loadSingleUrlImage(loaderData, ui, dest, "/mnt/runtime", "/dev/loop0", 0);
     free(dest);
@@ -299,12 +278,8 @@ char *mountUrlImage(struct installMethod *method, char *location,
                     if (!substr || (substr && *(substr+4) != '\0')) {
                         loaderData->instRepo = strdup(ui.url);
 
-                        if (asprintf(&ui.url, "%s/images/install.img",
-                                     ui.url) == -1) {
-                            logMessage(CRITICAL, "%s: %d: %m", __func__,
-                                       __LINE__);
-                            abort();
-                        }
+                        CHECKED_ASPRINTF(&ui.url, "%s/images/install.img",
+                                         ui.url);
                     }
 
                     loaderData->invalidRepoParam = 1;
diff --git a/loader/urls.c b/loader/urls.c
index efdbd82..8a05040 100644
--- a/loader/urls.c
+++ b/loader/urls.c
@@ -117,10 +117,7 @@ int urlinstTransfer(struct loaderData_s *loaderData, struct iurlinfo *ui,
      */
     curl_easy_reset(loaderData->curl);
 
-    if (asprintf(&version, "anaconda/%s", VERSION) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&version, "anaconda/%s", VERSION);
 
     curl_easy_setopt(loaderData->curl, CURLOPT_USERAGENT, version);
     curl_easy_setopt(loaderData->curl, CURLOPT_URL, ui->url);
@@ -247,12 +244,9 @@ int urlMainSetupPanel(struct loaderData_s *loaderData, struct iurlinfo * ui) {
 
     buttons = newtButtonBar(_("OK"), &okay, _("Back"), &cancel, NULL);
 
-    if (asprintf(&buf,
-            _("Please enter the URL containing the %s installation image on your server."),
-                 getProductName()) == -1) {
-        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);
-        abort();
-    }
+    CHECKED_ASPRINTF(&buf,
+                     _("Please enter the URL containing the %s installation image on your server."),
+                     getProductName());
 
     reflowedText = newtReflowText(buf, 47, 5, 5, &width, &height);
     free(buf);
-- 
1.6.2.5

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux