diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2022-11-07 11:49:36 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2022-11-09 09:20:34 +0100 |
commit | 08221c5743490f4a14f05767aa45de25a1827817 (patch) | |
tree | b2f8c83be93dd90caf6376fcbfb19f80b183bda6 /src/shared/libmount-util.c | |
parent | shared/mount-util: fix comment (diff) | |
download | systemd-08221c5743490f4a14f05767aa45de25a1827817.tar.xz systemd-08221c5743490f4a14f05767aa45de25a1827817.zip |
shared: make libmount_parse() non-inline
Back in e2857b3d87306d93f0fba526f3e79f4f6806fb02 I added this function
as static inline in order to avoid linking libmount into libshared.
Nevertheless, a dependency on libmount was added to libbasic in
9e7f941acb0d8fe7a31eec7826ff2c9c6af7044f, and later moved to libshared
in 77c772f227d866331560a8d0487fba12dd128dd4. So the shenanigan with an
inline function is not useful, let's make it a normal function.
Diffstat (limited to 'src/shared/libmount-util.c')
-rw-r--r-- | src/shared/libmount-util.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/shared/libmount-util.c b/src/shared/libmount-util.c new file mode 100644 index 0000000000..bcb21b5aba --- /dev/null +++ b/src/shared/libmount-util.c @@ -0,0 +1,40 @@ +/* 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; +} |