LIST_FIELDS (struct MountPoint, mount_point);
} MountPoint;
+/* Takes over possession of path */
static MountPoint *mount_point_alloc(char *path) {
MountPoint *mp;
continue;
}
- if (mount_point_is_api(path)) {
- free(path);
- continue;
- }
+ p = cunescape(path);
+ free(path);
- if (!(p = cunescape(path))) {
+ if (!p) {
r = -ENOMEM;
goto finish;
}
+ if (mount_point_is_api(p)) {
+ free(p);
+ continue;
+ }
+
if (!(mp = mount_point_alloc(p))) {
+ free(p);
r = -ENOMEM;
goto finish;
}
- LIST_PREPEND(MountPoint, mount_point, *mount_point_list_head, mp);
- free(path);
+ LIST_PREPEND(MountPoint, mount_point, *mount_point_list_head, mp);
}
r = 0;
finish:
fclose(proc_self_mountinfo);
- free(path);
-
return r;
}
int failed = 0;
LIST_FOREACH_SAFE(mount_point, mp, mp_next, *mount_point_list_head) {
- if (mp->read_only)
- continue;
-
/* Trying to remount read-only */
if (mount(NULL, mp->path, NULL, MS_MGC_VAL|MS_REMOUNT|MS_RDONLY, NULL) == 0)
mount_point_remove_and_free(mp, mount_point_list_head);