From: Christian Brauner Date: Fri, 1 Mar 2019 11:15:28 +0000 (+0100) Subject: utils: remove fgets() from is_shared_mountpoint() X-Git-Tag: lxc-3.2.0~124^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c4382ee26600d3234fcf87fee80523980b94e31e;p=thirdparty%2Flxc.git utils: remove fgets() from is_shared_mountpoint() Signed-off-by: Christian Brauner --- diff --git a/src/lxc/utils.c b/src/lxc/utils.c index be81727c3..e2b2bb11e 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -49,6 +49,7 @@ #include "config.h" #include "log.h" #include "lxclock.h" +#include "memory_utils.h" #include "namespace.h" #include "parse.h" #include "raw_syscalls.h" @@ -641,37 +642,37 @@ uint64_t fnv_64a_buf(void *buf, size_t len, uint64_t hval) bool is_shared_mountpoint(const char *path) { - char buf[LXC_LINELEN]; - FILE *f; + __do_fclose FILE *f = NULL; + __do_free char *line = NULL; int i; - char *p, *p2; + size_t len = 0; f = fopen("/proc/self/mountinfo", "r"); if (!f) return 0; - while (fgets(buf, LXC_LINELEN, f)) { - for (p = buf, i = 0; p && i < 4; i++) - p = strchr(p + 1, ' '); - if (!p) + while (getline(&line, &len, f) > 0) { + char *slider1, *slider2; + + for (slider1 = line, i = 0; slider1 && i < 4; i++) + slider1 = strchr(slider1 + 1, ' '); + + if (!slider1) continue; - p2 = strchr(p + 1, ' '); - if (!p2) + slider2 = strchr(slider1 + 1, ' '); + if (!slider2) continue; - *p2 = '\0'; - if (strcmp(p + 1, path) == 0) { + *slider2 = '\0'; + if (strcmp(slider1 + 1, path) == 0) { /* This is the path. Is it shared? */ - p = strchr(p2 + 1, ' '); - if (p && strstr(p, "shared:")) { - fclose(f); + slider1 = strchr(slider2 + 1, ' '); + if (slider1 && strstr(slider1, "shared:")) return true; - } } } - fclose(f); return false; }