summaryrefslogtreecommitdiffstats
path: root/src/shared/libmount-util.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2022-11-07 11:49:36 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2022-11-09 09:20:34 +0100
commit08221c5743490f4a14f05767aa45de25a1827817 (patch)
treeb2f8c83be93dd90caf6376fcbfb19f80b183bda6 /src/shared/libmount-util.c
parentshared/mount-util: fix comment (diff)
downloadsystemd-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.c40
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;
+}