* 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) {
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);