From 1faeccb6de013ee881028a9d5f610e9545ce9aa9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 26 Apr 2018 19:07:54 +0200 Subject: [PATCH] tmpfiles: add --cat-config This implements similar logic as conf_files_cat(), but with slightly different file gathering logic. I also want to add support for replacement files later on, so it seems better to keep those two file-gathering functions separate. --- man/standard-options.xml | 9 +++++++++ src/basic/conf-files.c | 35 +++++++++++++++++++++++++++++++++++ src/basic/conf-files.h | 6 ++++++ 3 files changed, 50 insertions(+) diff --git a/man/standard-options.xml b/man/standard-options.xml index ca6b2759c..df537a9c4 100644 --- a/man/standard-options.xml +++ b/man/standard-options.xml @@ -50,4 +50,13 @@ footer with hints. + + + + + + Copy the contents of config files to standard output. + Before each file, the filename is printed as a comment. + + diff --git a/src/basic/conf-files.c b/src/basic/conf-files.c index 29c415aa7..aec4d9ddb 100644 --- a/src/basic/conf-files.c +++ b/src/basic/conf-files.c @@ -259,6 +259,41 @@ int conf_files_list_nulstr(char ***strv, const char *suffix, const char *root, u return conf_files_list_strv_internal(strv, suffix, root, flags, d); } +int conf_files_list_with_replacement( + const char *root, + char **config_dirs, + const char *replacement, + char ***files, + char **replace_file) { + + _cleanup_strv_free_ char **f = NULL; + _cleanup_free_ char *p = NULL; + int r; + + assert(config_dirs); + assert(files); + assert(replace_file || !replacement); + + r = conf_files_list_strv(&f, ".conf", root, 0, (const char* const*) config_dirs); + if (r < 0) + return log_error_errno(r, "Failed to enumerate config files: %m"); + + if (replacement) { + r = conf_files_insert(&f, root, config_dirs, replacement); + if (r < 0) + return log_error_errno(r, "Failed to extend config file list: %m"); + + p = path_join(root, replacement, NULL); + if (!p) + return log_oom(); + } + + *files = TAKE_PTR(f); + if (replace_file) + *replace_file = TAKE_PTR(p); + return 0; +} + int conf_files_cat(const char *name) { _cleanup_strv_free_ char **dirs = NULL, **files = NULL; const char *dir; diff --git a/src/basic/conf-files.h b/src/basic/conf-files.h index 3d1feadf0..7eb8739ee 100644 --- a/src/basic/conf-files.h +++ b/src/basic/conf-files.h @@ -17,4 +17,10 @@ int conf_files_list_strv(char ***ret, const char *suffix, const char *root, unsi int conf_files_list_nulstr(char ***ret, const char *suffix, const char *root, unsigned flags, const char *dirs); int conf_files_insert(char ***strv, const char *root, char **dirs, const char *path); int conf_files_insert_nulstr(char ***strv, const char *root, const char *dirs, const char *path); +int conf_files_list_with_replacement( + const char *root, + char **config_dirs, + const char *replacement, + char ***files, + char **replace_file); int conf_files_cat(const char *name); -- 2.30.2