From 243dd6ae1dad5165de95e960ef7c52ea5acef5e1 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 30 Nov 2018 16:55:33 +0100 Subject: [PATCH 1/3] =?UTF-8?q?conf-files:=20improve=20algorithm=20O(n?= =?UTF-8?q?=C2=B2)=20=E2=86=92=20O(n)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/basic/conf-files.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/basic/conf-files.c b/src/basic/conf-files.c index 7b44ae277d..6320674fb5 100644 --- a/src/basic/conf-files.c +++ b/src/basic/conf-files.c @@ -189,11 +189,12 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p * - do nothing if our new entry matches the existing entry, * - replace the existing entry if our new entry has higher priority. */ - size_t i; + size_t i, n; char *t; int r; - for (i = 0; i < strv_length(*strv); i++) { + n = strv_length(*strv); + for (i = 0; i < n; i++) { int c; c = base_cmp((char* const*) *strv + i, (char* const*) &path); From a7181c671a7ae2ca7c4cb6edbd5a3dac4e02426a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 30 Nov 2018 16:55:57 +0100 Subject: [PATCH 2/3] conf-files: remove misplaced log_oom() The caller should log in this case (and all callers in fact already do), hence let's remove the duplicate logging here. --- src/basic/conf-files.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/basic/conf-files.c b/src/basic/conf-files.c index 6320674fb5..3ba9f6b45d 100644 --- a/src/basic/conf-files.c +++ b/src/basic/conf-files.c @@ -235,7 +235,7 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p t = path_join(root, path, NULL); if (!t) - return log_oom(); + return -ENOMEM; r = strv_insert(strv, i, t); if (r < 0) From 380b82d6782b1d243bed5b78ce1df832ef6c683a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 30 Nov 2018 16:56:35 +0100 Subject: [PATCH 3/3] conf-files: remove unused function --- src/basic/conf-files.c | 13 +------------ src/basic/conf-files.h | 1 - 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/basic/conf-files.c b/src/basic/conf-files.c index 3ba9f6b45d..2d0073279f 100644 --- a/src/basic/conf-files.c +++ b/src/basic/conf-files.c @@ -240,21 +240,10 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p r = strv_insert(strv, i, t); if (r < 0) free(t); + return r; } -int conf_files_insert_nulstr(char ***strv, const char *root, const char *dirs, const char *path) { - _cleanup_strv_free_ char **d = NULL; - - assert(strv); - - d = strv_split_nulstr(dirs); - if (!d) - return -ENOMEM; - - return conf_files_insert(strv, root, d, path); -} - int conf_files_list_strv(char ***strv, const char *suffix, const char *root, unsigned flags, const char* const* dirs) { _cleanup_strv_free_ char **copy = NULL; diff --git a/src/basic/conf-files.h b/src/basic/conf-files.h index f31f17de9d..55ab326402 100644 --- a/src/basic/conf-files.h +++ b/src/basic/conf-files.h @@ -15,7 +15,6 @@ int conf_files_list(char ***ret, const char *suffix, const char *root, unsigned int conf_files_list_strv(char ***ret, const char *suffix, const char *root, unsigned flags, const char* const* dirs); 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,