Back ine2857b3d87I added this function as static inline in order to avoid linking libmount into libshared. Nevertheless, a dependency on libmount was added to libbasic in9e7f941acb, and later moved to libshared in77c772f227. So the shenanigan with an inline function is not useful, let's make it a normal function.
41 lines
1.2 KiB
C
41 lines
1.2 KiB
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "libmount-util.h"
|
|
|
|
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;
|
|
}
|