From: Zbigniew Jędrzejewski-Szmek Date: Mon, 7 Nov 2022 10:49:36 +0000 (+0100) Subject: shared: make libmount_parse() non-inline X-Git-Tag: v253-rc1~563^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=08221c5743490f4a14f05767aa45de25a1827817;p=thirdparty%2Fsystemd.git 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. --- diff --git a/src/shared/libmount-util.c b/src/shared/libmount-util.c new file mode 100644 index 00000000000..bcb21b5abad --- /dev/null +++ b/src/shared/libmount-util.c @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include + +#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; +} diff --git a/src/shared/libmount-util.h b/src/shared/libmount-util.h index cf19c56ed12..6f6f36ad527 100644 --- a/src/shared/libmount-util.h +++ b/src/shared/libmount-util.h @@ -1,8 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include - /* This needs to be after sys/mount.h */ #include @@ -11,37 +9,8 @@ DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct libmnt_table*, mnt_free_table, NULL); DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct libmnt_iter*, mnt_free_iter, NULL); -static inline int libmount_parse( +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; -} + struct libmnt_iter **ret_iter); diff --git a/src/shared/meson.build b/src/shared/meson.build index bdf1701ba93..5f66b865de3 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -193,6 +193,7 @@ shared_sources = files( 'libcrypt-util.h', 'libfido2-util.c', 'libfido2-util.h', + 'libmount-util.c', 'libmount-util.h', 'linux/auto_dev-ioctl.h', 'linux/bpf.h',