[PATCH 07/16] modinfo: use logging facility for oom-checks and error messages

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

 



Also fix slightly broken nofail_asprintf()

Side effects:
Errors are printed with the "ERROR:" prefix.
Testing for oom, quiets asprintf return-value warning.

Signed-off-by: Andreas Robinson <andr345@xxxxxxxxx>
---
 logging.h |    6 ++++--
 modinfo.c |   24 +++++++++++++-----------
 2 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/logging.h b/logging.h
index 4c25f5c..b7227bc 100644
--- a/logging.h
+++ b/logging.h
@@ -27,8 +27,10 @@ static inline void grammar(const char *cmd,
 
 #define NOFAIL(ptr)  do_nofail((ptr), __FILE__, __LINE__, #ptr)
 
-#define nofail_asprintf(ptr, ...) \
-	{ if (asprintf((ptr), __VA_ARGS__) < 0) do_nofail(NULL, __FILE__, __LINE__, #ptr); }
+#define nofail_asprintf(ptr, ...)				\
+	do { if (asprintf((ptr), __VA_ARGS__) < 0) 		\
+		do_nofail(NULL, __FILE__, __LINE__, #ptr);	\
+	} while(0)
 
 static inline void *do_nofail(void *ptr, const char *file, int line, const char *expr)
 {
diff --git a/modinfo.c b/modinfo.c
index 8e3b701..8a1dff3 100644
--- a/modinfo.c
+++ b/modinfo.c
@@ -14,6 +14,7 @@
 #include <sys/mman.h>
 
 #include "util.h"
+#include "logging.h"
 #include "elfops.h"
 #include "zlibsupport.h"
 #include "testing.h"
@@ -38,7 +39,7 @@ static struct param *add_param(const char *name, struct param **list)
 	for (i = *list; i; i = i->next)
 		if (strncmp(i->name, name, namelen) == 0)
 			return i;
-	i = malloc(sizeof(*i) + namelen+1);
+	i = NOFAIL(malloc(sizeof(*i) + namelen+1));
 	strncpy((char *)(i + 1), name, namelen);
 	((char *)(i + 1))[namelen] = '\0';
 	i->name = (char *)(i + 1);
@@ -188,10 +189,10 @@ static void *grab_module(const char *name, unsigned long *size, char**filename,
 	if (strchr(name, '.') || strchr(name, '/')) {
 		data = grab_file(name, size);
 		if (data) {
-			*filename = strdup(name);
+			*filename = NOFAIL(strdup(name));
 			return data;
 		} else {
-			fprintf(stderr, "modinfo: could not open %s: %s\n",
+			error("modinfo: could not open %s: %s\n",
 				name, strerror(errno));
 			return NULL;
 		}
@@ -202,16 +203,16 @@ static void *grab_module(const char *name, unsigned long *size, char**filename,
 		kernel = buf.release;
 	}
 	if (strlen(basedir))
-		asprintf(&moddir, "%s/%s/%s", basedir, MODULE_DIR, kernel);
+		nofail_asprintf(&moddir, "%s/%s/%s", basedir, MODULE_DIR, kernel);
 	else
-		asprintf(&moddir, "%s/%s", MODULE_DIR, kernel);
+		nofail_asprintf(&moddir, "%s/%s", MODULE_DIR, kernel);
 
-	asprintf(&depname, "%s/%s", moddir, "modules.dep");
+	nofail_asprintf(&depname, "%s/%s", moddir, "modules.dep");
 
 	/* Search for it in modules.dep. */
 	data = grab_file(depname, size);
 	if (!data) {
-		fprintf(stderr, "modinfo: could not open %s\n", depname);
+		error("modinfo: could not open %s\n", depname);
 		free(depname);
 		return NULL;
 	}
@@ -228,7 +229,7 @@ static void *grab_module(const char *name, unsigned long *size, char**filename,
 				dir = moddir; /* new style - relative path */
 
 			if (strlen(dir)) {
-				asprintf(filename, "%s/%s", dir, p);
+				nofail_asprintf(filename, "%s/%s", dir, p);
 				(*filename)[namelen + strlen(dir) + 1] = '\0';
 			} else {
 				*filename = strndup(p, namelen);
@@ -236,14 +237,13 @@ static void *grab_module(const char *name, unsigned long *size, char**filename,
 			release_file(data, *size);
 			data = grab_file(*filename, size);
 			if (!data)
-				fprintf(stderr,
-					"modinfo: could not open %s: %s\n",
+				error("modinfo: could not open %s: %s\n",
 					*filename, strerror(errno));
 			return data;
 		}
 	}
 	release_file(data, *size);
-	fprintf(stderr, "modinfo: could not find module %s\n", name);
+	error("modinfo: could not find module %s\n", name);
 	return NULL;
 }
 
@@ -267,6 +267,8 @@ int main(int argc, char *argv[])
 	int opt, ret = 0;
 	char *basedir = "";
 
+	logging = 0; /* send messages to stderr */
+
 	if (native_endianness() == 0)
 		abort();
 
-- 
1.6.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-modules" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux