mirror of
https://github.com/troglobit/finit.git
synced 2026-10-08 16:34:45 +07:00
tty.c: Free memory for external getty on tty_unregister()
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user