diff --git a/src/lxc/utils.c b/src/lxc/utils.c index 2029e3328..c912fe8f0 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -1158,36 +1158,40 @@ bool switch_to_ns(pid_t pid, const char *ns) { * IIUC, so long as we've chrooted so that rootfs is not our root, * the rootfs entry should always be skipped in mountinfo contents. */ -int detect_ramfs_rootfs(void) +bool detect_ramfs_rootfs(void) { - char buf[LINELEN], *p; FILE *f; + char *p, *p2; + char *line = NULL; + size_t len = 0; int i; - char *p2; f = fopen("/proc/self/mountinfo", "r"); if (!f) - return 0; - while (fgets(buf, LINELEN, f)) { - for (p = buf, i=0; p && i < 4; i++) - p = strchr(p+1, ' '); + return false; + + while (getline(&line, &len, f) != -1) { + for (p = line, i = 0; p && i < 4; i++) + p = strchr(p + 1, ' '); if (!p) continue; - p2 = strchr(p+1, ' '); + p2 = strchr(p + 1, ' '); if (!p2) continue; *p2 = '\0'; - if (strcmp(p+1, "/") == 0) { + if (strcmp(p + 1, "/") == 0) { // this is '/'. is it the ramfs? - p = strchr(p2+1, '-'); + p = strchr(p2 + 1, '-'); if (p && strncmp(p, "- rootfs rootfs ", 16) == 0) { + free(line); fclose(f); - return 1; + return true; } } } + free(line); fclose(f); - return 0; + return false; } char *on_path(char *cmd, const char *rootfs) { diff --git a/src/lxc/utils.h b/src/lxc/utils.h index 88719a0f3..a0fa0e2a5 100644 --- a/src/lxc/utils.h +++ b/src/lxc/utils.h @@ -293,7 +293,7 @@ extern bool dir_exists(const char *path); uint64_t fnv_64a_buf(void *buf, size_t len, uint64_t hval); int detect_shared_rootfs(void); -int detect_ramfs_rootfs(void); +bool detect_ramfs_rootfs(void); char *on_path(char *cmd, const char *rootfs); bool file_exists(const char *f); bool cgns_supported(void);