From 8247344f0dec8588be3eb2cbc764544ddb8fde4f Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Fri, 31 Oct 2014 15:18:19 +0100 Subject: [PATCH] helpers.c:set_hostname() - Fix resource and memory leaks. Signed-off-by: Joachim Nilsson --- finit.c | 2 +- helpers.c | 23 +++++++++++++---------- helpers.h | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/finit.c b/finit.c index b4621810..c02f2c94 100644 --- a/finit.c +++ b/finit.c @@ -250,7 +250,7 @@ int main(int argc, char* argv[]) run("/sbin/sysctl -e -p /etc/sysctl.conf >/dev/null"); /* Set initial hostname. */ - set_hostname(hostname); + set_hostname(&hostname); ifconfig("lo", "127.0.0.1", "255.0.0.0", 1); if (network) diff --git a/helpers.c b/helpers.c index 11419dac..a2b17dc6 100644 --- a/helpers.c +++ b/helpers.c @@ -580,7 +580,7 @@ pid_t run_getty(char *cmd, char *args[], int console) } if (console) { - i = write(STDERR_FILENO, msg, sizeof(msg)); + (void)write(STDERR_FILENO, msg, sizeof(msg)); while (read(STDIN_FILENO, &c, 1) == 1 && c != '\n') continue; } @@ -697,26 +697,29 @@ void do_sleep(unsigned int sec) ; } -void set_hostname(char *hostname) +void set_hostname(char **hostname) { FILE *fp; - _d("Set hostname: %s", hostname); - if ((fp = fopen("/etc/hostname", "r")) != NULL) { + _d("Set hostname: %s", *hostname); + fp = fopen("/etc/hostname", "r"); + if (fp) { struct stat st; fstat(fileno(fp), &st); - hostname = realloc(hostname, st.st_size); - if (!hostname) + *hostname = realloc(*hostname, st.st_size); + if (!*hostname) { + fclose(fp); return; + } - fgets(hostname, st.st_size, fp); - chomp(hostname); + fgets(*hostname, st.st_size, fp); + chomp(*hostname); fclose(fp); } - if (hostname) - sethostname(hostname, strlen(hostname)); + if (*hostname) + sethostname(*hostname, strlen(*hostname)); } /** diff --git a/helpers.h b/helpers.h index 5f83623e..6dafaf7d 100644 --- a/helpers.h +++ b/helpers.h @@ -101,7 +101,7 @@ void chomp (char *str); void do_sleep (unsigned int sec); int getuser (char *username); int getgroup (char *group); -void set_hostname (char *hostname); +void set_hostname (char **hostname); int complete (char *cmd, int pid); int run (char *cmd);