log_debug("Parsing %s...", fstab);
- r = libmount_parse_full(fstab, /* source = */ NULL, &table, &iter);
+ r = libmount_parse_full(fstab, /* source = */ NULL, MNT_ITER_FORWARD, &table, &iter);
if (r == -ENOENT)
return 0;
if (r < 0)
_cleanup_(mnt_free_tablep) struct libmnt_table *table = NULL;
_cleanup_(mnt_free_iterp) struct libmnt_iter *iter = NULL;
- r = libmount_parse_full(cred, f, &table, &iter);
+ r = libmount_parse_full(cred, f, MNT_ITER_FORWARD, &table, &iter);
if (r < 0)
return log_error_errno(r, "Failed to parse credential '%s' (as fstab): %m", cred);
int libmount_parse_full(
const char *path,
FILE *source,
+ int direction,
struct libmnt_table **ret_table,
struct libmnt_iter **ret_iter) {
/* Older libmount seems to require this. */
assert(!source || path);
+ assert(IN_SET(direction, MNT_ITER_FORWARD, MNT_ITER_BACKWARD));
r = dlopen_libmount();
if (r < 0)
return r;
table = sym_mnt_new_table();
- iter = sym_mnt_new_iter(MNT_ITER_FORWARD);
+ iter = sym_mnt_new_iter(direction);
if (!table || !iter)
return -ENOMEM;
struct libmnt_table **ret_table,
struct libmnt_iter **ret_iter) {
- return libmount_parse_full(fstab_path(), NULL, ret_table, ret_iter);
+ return libmount_parse_full(fstab_path(), NULL, MNT_ITER_FORWARD, ret_table, ret_iter);
}
int libmount_is_leaf(
int libmount_parse_full(
const char *path,
FILE *source,
+ int direction,
struct libmnt_table **ret_table,
struct libmnt_iter **ret_iter);
struct libmnt_table **ret_table,
struct libmnt_iter **ret_iter) {
- return libmount_parse_full("/proc/self/mountinfo", source, ret_table, ret_iter);
+ return libmount_parse_full("/proc/self/mountinfo", source, MNT_ITER_FORWARD, ret_table, ret_iter);
}
static inline int libmount_parse_with_utab(
struct libmnt_table **ret_table,
struct libmnt_iter **ret_iter) {
- return libmount_parse_full(NULL, NULL, ret_table, ret_iter);
+ return libmount_parse_full(NULL, NULL, MNT_ITER_FORWARD, ret_table, ret_iter);
}
int libmount_parse_fstab(struct libmnt_table **ret_table, struct libmnt_iter **ret_iter);
_cleanup_(mnt_free_iterp) struct libmnt_iter *iter = NULL;
bool again = false;
- r = libmount_parse_mountinfo(f, &table, &iter);
+ r = libmount_parse_full("/proc/self/mountinfo", f, MNT_ITER_BACKWARD, &table, &iter);
if (r < 0)
return log_debug_errno(r, "Failed to parse /proc/self/mountinfo: %m");