diff options
author | Karel Zak | 2012-11-09 10:18:49 +0100 |
---|---|---|
committer | Karel Zak | 2012-11-09 10:18:49 +0100 |
commit | f0d6004ce7d530ae55453418d32a99a3c4864a48 (patch) | |
tree | b6dd2129642c68bcb6d56e8b6e2dddbba62a7891 /lib/consoles.c | |
parent | lib/consoles: add test program (diff) | |
download | kernel-qcow2-util-linux-f0d6004ce7d530ae55453418d32a99a3c4864a48.tar.gz kernel-qcow2-util-linux-f0d6004ce7d530ae55453418d32a99a3c4864a48.tar.xz kernel-qcow2-util-linux-f0d6004ce7d530ae55453418d32a99a3c4864a48.zip |
lib/consoles: don't call perror()
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'lib/consoles.c')
-rw-r--r-- | lib/consoles.c | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/lib/consoles.c b/lib/consoles.c index c9a9f0ba5..9e3f1e033 100644 --- a/lib/consoles.c +++ b/lib/consoles.c @@ -178,7 +178,7 @@ static #ifdef __GNUC__ __attribute__((__nonnull__,__hot__)) #endif -void append_console(struct console **list, char * name) +int append_console(struct console **list, char * name) { static const struct chardata initcp = { .erase = CERASE, @@ -190,7 +190,7 @@ void append_console(struct console **list, char * name) struct console *last; if (posix_memalign((void*)&tail, sizeof(void*), alignof(typeof(struct console))) != 0) - perror("memory allocation"); + return -ENOMEM; for (last = *list; last && last->next; last = last->next); @@ -209,6 +209,8 @@ void append_console(struct console **list, char * name) *list = tail; else last->next = tail; + + return 0; } /* @@ -218,11 +220,11 @@ void append_console(struct console **list, char * name) * as a virtual console as well as a simple printer. * * Returns 1 if stdout and stderr should be reconnected and 0 - * otherwise. + * otherwise or less than zero on error. */ int detect_consoles(const char *device, int fallback, struct console **consoles) { - int fd, ret = 0; + int fd, ret = 0, rc; dev_t comparedev = 0; #ifdef __linux__ char *attrib, *cmdline; @@ -290,8 +292,11 @@ int detect_consoles(const char *device, int fallback, struct console **consoles) if (!dir) goto fallback; name = scandev(dir, comparedev); - if (name) - append_console(consoles, name); + if (name) { + rc = append_console(consoles, name); + if (rc < 0) + return rc; + } closedir(dir); if (!*consoles) goto fallback; @@ -322,7 +327,9 @@ console: name = scandev(dir, comparedev); if (!name) continue; - append_console(consoles, name); + rc = append_console(consoles, name); + if (rc < 0) + return rc; } closedir(dir); fclose(fc); @@ -358,7 +365,9 @@ console: name = scandev(dir, comparedev); if (!name) continue; - append_console(consoles, name); + rc = append_console(consoles, name); + if (rc < 0) + return rc; } closedir(dir); free(attrib); @@ -434,7 +443,9 @@ console: name = scandev(dir, comparedev); if (!name) continue; - append_console(consoles, name); + rc = append_console(consoles, name); + if (rc < 0) + return rc; } closedir(dir); free(cmdline); @@ -468,7 +479,9 @@ console: if (!name) name = "/dev/tty1"; - append_console(consoles, strdup(name)); + rc = append_console(consoles, strdup(name)); + if (rc < 0) + return rc; if (*consoles) { if (!device || *device == '\0') (*consoles)->fd = fallback; @@ -491,7 +504,9 @@ fallback: if (!name) name = "/dev/tty"; - append_console(consoles, strdup(name)); + rc = append_console(consoles, strdup(name)); + if (rc < 0) + return rc; if (*consoles) (*consoles)->fd = fallback; } |