From 2f38b5f7793a181000c2c41202b9c7fd9a1fedb8 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Fri, 11 Dec 2020 07:18:43 -0800 Subject: [PATCH] ETHER: Proper cleanup while getting Linux system id --- sim_ether.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sim_ether.c b/sim_ether.c index 78488767..8b4e34f8 100644 --- a/sim_ether.c +++ b/sim_ether.c @@ -1676,18 +1676,24 @@ static int _eth_get_system_id (char *buf, size_t buf_size) static int _eth_get_system_id (char *buf, size_t buf_size) { FILE *f; +t_bool popened = FALSE; memset (buf, 0, buf_size); if (buf_size < 37) return -1; -if ((f = fopen ("/etc/machine-id", "r")) == NULL) +if ((f = fopen ("/etc/machine-id", "r")) == NULL) { f = popen ("hostname", "r"); + popened = TRUE; + } if (f) { size_t read_size; read_size = fread (buf, 1, buf_size - 1, f); buf[read_size] = '\0'; - pclose (f); + if (popened) + pclose (f); + else + fclose (f); } while ((strlen (buf) > 0) && sim_isspace(buf[strlen (buf) - 1])) buf[strlen (buf) - 1] = '\0';