tty.c: Free memory for external getty on tty_unregister()

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
Joachim Nilsson
2017-08-27 16:57:26 +02:00
parent 74affb32d3
commit f7b9b7be96
2 changed files with 15 additions and 3 deletions
+13 -2
View File
@@ -108,7 +108,7 @@ int tty_register(char *line, struct timeval *mtime)
{
tty_node_t *entry;
int i, num = 1, insert = 0, noclear = 0;
char *tok, *cmd = NULL, *args[10];
char *tok, *cmd = NULL, *args[TTY_MAX_ARGS];
char *dev = NULL, *baud = NULL;
char *runlevels = NULL, *term = NULL;
@@ -137,6 +137,8 @@ int tty_register(char *line, struct timeval *mtime)
dev = strdup(tok);
args[num++] = strdup(tok);
if (num >= TTY_MAX_ARGS)
break;
}
cmd = strdup(cmd);
@@ -188,7 +190,7 @@ int tty_register(char *line, struct timeval *mtime)
/* External getty */
entry->data.cmd = cmd;
for (i = 0; i < num; i++)
for (i = 0; i < num && i < TTY_MAX_ARGS; i++)
entry->data.args[i] = args[i];
entry->data.args[++i] = NULL;
@@ -217,6 +219,15 @@ int tty_unregister(tty_node_t *tty)
free(tty->data.baud);
if (tty->data.term)
free(tty->data.term);
if (tty->data.cmd) {
int i;
free(tty->data.cmd);
for (i = 0; tty->data.args[i] && i < TTY_MAX_ARGS; i++) {
free(tty->data.args[i]);
tty->data.args[i] = NULL;
}
}
free(tty);
return 0;
+2 -1
View File
@@ -28,6 +28,7 @@
#include <limits.h>
#include <lite/queue.h> /* BSD sys/queue.h API */
#define TTY_MAX_ARGS 16
#define EVENT_SIZE ((sizeof(struct inotify_event) + NAME_MAX + 1))
typedef struct {
@@ -38,7 +39,7 @@ typedef struct {
int runlevels;
char *cmd; /* NULL when running built-in getty */
char *args[10];
char *args[TTY_MAX_ARGS];
int pid;
} finit_tty_t;