summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Zak2012-11-09 10:06:23 +0100
committerKarel Zak2012-11-09 10:06:23 +0100
commitcf987d0aa7f1f2efa3c80ab329f095cd315d0ee0 (patch)
tree061a19457b9083ee0969e58b2e56c47ef332114d
parentlib/consolas: remove global variable concount, fix linked list (diff)
downloadkernel-qcow2-util-linux-cf987d0aa7f1f2efa3c80ab329f095cd315d0ee0.tar.gz
kernel-qcow2-util-linux-cf987d0aa7f1f2efa3c80ab329f095cd315d0ee0.tar.xz
kernel-qcow2-util-linux-cf987d0aa7f1f2efa3c80ab329f095cd315d0ee0.zip
lib/consoles: remove global variable consoles
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r--include/consoles.h5
-rw-r--r--lib/consoles.c36
2 files changed, 20 insertions, 21 deletions
diff --git a/include/consoles.h b/include/consoles.h
index c669eb2a7..2283d024b 100644
--- a/include/consoles.h
+++ b/include/consoles.h
@@ -44,5 +44,6 @@ struct console {
struct termios tio;
struct console *next;
};
-extern struct console *consoles;
-extern int detect_consoles(const char *, int);
+
+extern int detect_consoles(const char *device, int fallback,
+ struct console **consoles);
diff --git a/lib/consoles.c b/lib/consoles.c
index b304e37a9..cd6a17ad8 100644
--- a/lib/consoles.c
+++ b/lib/consoles.c
@@ -57,8 +57,6 @@
#define alignof(type) ((sizeof(type)+(sizeof(void*)-1)) & ~(sizeof(void*)-1))
-struct console *consoles;
-
/*
* Read and allocate one line from file,
* the caller has to free the result
@@ -180,7 +178,7 @@ static
#ifdef __GNUC__
__attribute__((__nonnull__,__hot__))
#endif
-void consalloc(char * name)
+void append_console(struct console **list, char * name)
{
static const struct chardata initcp = {
.erase = CERASE,
@@ -194,7 +192,7 @@ void consalloc(char * name)
if (posix_memalign((void*)&tail, sizeof(void*), alignof(typeof(struct console))) != 0)
perror("memory allocation");
- for (last = consoles; last && last->next; last = last->next);
+ for (last = *list; last && last->next; last = last->next);
tail->next = NULL;
tail->tty = name;
@@ -208,7 +206,7 @@ void consalloc(char * name)
memcpy(&tail->cp, &initcp, sizeof(struct chardata));
if (!last)
- consoles = tail;
+ *list = tail;
else
last->next = tail;
}
@@ -222,7 +220,7 @@ void consalloc(char * name)
* Returns 1 if stdout and stderr should be reconnected and 0
* otherwise.
*/
-int detect_consoles(const char *device, int fallback)
+int detect_consoles(const char *device, int fallback, struct console **consoles)
{
int fd, ret = 0;
dev_t comparedev = 0;
@@ -293,9 +291,9 @@ int detect_consoles(const char *device, int fallback)
goto fallback;
name = scandev(dir, comparedev);
if (name)
- consalloc(name);
+ append_console(consoles, name);
closedir(dir);
- if (!consoles)
+ if (!*consoles)
goto fallback;
return ret;
}
@@ -324,7 +322,7 @@ console:
name = scandev(dir, comparedev);
if (!name)
continue;
- consalloc(name);
+ append_console(consoles, name);
}
closedir(dir);
fclose(fc);
@@ -360,11 +358,11 @@ console:
name = scandev(dir, comparedev);
if (!name)
continue;
- consalloc(name);
+ append_console(consoles, name);
}
closedir(dir);
free(attrib);
- if (!consoles)
+ if (!*consoles)
goto fallback;
return ret;
@@ -436,7 +434,7 @@ console:
name = scandev(dir, comparedev);
if (!name)
continue;
- consalloc(name);
+ append_console(consoles, name);
}
closedir(dir);
free(cmdline);
@@ -444,7 +442,7 @@ console:
* Detection of the device used for Linux system console using
* the ioctl TIOCGDEV if available (e.g. official 2.6.38).
*/
- if (!consoles) {
+ if (!*consoles) {
#ifdef TIOCGDEV
unsigned int devnum;
const char *name;
@@ -470,10 +468,10 @@ console:
if (!name)
name = "/dev/tty1";
- consalloc(strdup(name));
- if (consoles) {
+ append_console(consoles, strdup(name));
+ if (*consoles) {
if (!device || *device == '\0')
- consoles->fd = fallback;
+ (*consoles)->fd = fallback;
return ret;
}
#endif
@@ -493,9 +491,9 @@ fallback:
if (!name)
name = "/dev/tty";
- consalloc(strdup(name));
- if (consoles)
- consoles->fd = fallback;
+ append_console(consoles, strdup(name));
+ if (*consoles)
+ (*consoles)->fd = fallback;
}
return ret;
}