/* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once #include /* This needs to be after sys/mount.h */ #include #include "macro.h" DEFINE_TRIVIAL_CLEANUP_FUNC(struct libmnt_table*, mnt_free_table); DEFINE_TRIVIAL_CLEANUP_FUNC(struct libmnt_iter*, mnt_free_iter); static inline int libmount_parse( const char *path, FILE *source, struct libmnt_table **ret_table, struct libmnt_iter **ret_iter) { _cleanup_(mnt_free_tablep) struct libmnt_table *table = NULL; _cleanup_(mnt_free_iterp) struct libmnt_iter *iter = NULL; int r; /* Older libmount seems to require this. */ assert(!source || path); table = mnt_new_table(); iter = mnt_new_iter(MNT_ITER_FORWARD); if (!table || !iter) return -ENOMEM; /* If source or path are specified, we use on the functions which ignore utab. * Only if both are empty, we use mnt_table_parse_mtab(). */ if (source) r = mnt_table_parse_stream(table, source, path); else if (path) r = mnt_table_parse_file(table, path); else r = mnt_table_parse_mtab(table, NULL); if (r < 0) return r; *ret_table = TAKE_PTR(table); *ret_iter = TAKE_PTR(iter); return 0; }