utils: remove fgets() from is_shared_mountpoint()

parent f3d38164
...@@ -49,6 +49,7 @@ ...@@ -49,6 +49,7 @@
#include "config.h" #include "config.h"
#include "log.h" #include "log.h"
#include "lxclock.h" #include "lxclock.h"
#include "memory_utils.h"
#include "namespace.h" #include "namespace.h"
#include "parse.h" #include "parse.h"
#include "raw_syscalls.h" #include "raw_syscalls.h"
...@@ -641,37 +642,37 @@ uint64_t fnv_64a_buf(void *buf, size_t len, uint64_t hval) ...@@ -641,37 +642,37 @@ uint64_t fnv_64a_buf(void *buf, size_t len, uint64_t hval)
bool is_shared_mountpoint(const char *path) bool is_shared_mountpoint(const char *path)
{ {
char buf[LXC_LINELEN]; __do_fclose FILE *f = NULL;
FILE *f; __do_free char *line = NULL;
int i; int i;
char *p, *p2; size_t len = 0;
f = fopen("/proc/self/mountinfo", "r"); f = fopen("/proc/self/mountinfo", "r");
if (!f) if (!f)
return 0; return 0;
while (fgets(buf, LXC_LINELEN, f)) { while (getline(&line, &len, f) > 0) {
for (p = buf, i = 0; p && i < 4; i++) char *slider1, *slider2;
p = strchr(p + 1, ' ');
if (!p) for (slider1 = line, i = 0; slider1 && i < 4; i++)
slider1 = strchr(slider1 + 1, ' ');
if (!slider1)
continue; continue;
p2 = strchr(p + 1, ' '); slider2 = strchr(slider1 + 1, ' ');
if (!p2) if (!slider2)
continue; continue;
*p2 = '\0'; *slider2 = '\0';
if (strcmp(p + 1, path) == 0) { if (strcmp(slider1 + 1, path) == 0) {
/* This is the path. Is it shared? */ /* This is the path. Is it shared? */
p = strchr(p2 + 1, ' '); slider1 = strchr(slider2 + 1, ' ');
if (p && strstr(p, "shared:")) { if (slider1 && strstr(slider1, "shared:"))
fclose(f);
return true; return true;
} }
} }
}
fclose(f);
return false; return false;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment