From 7f1f1355bbb3941a30798a295721e7f35077e116 Mon Sep 17 00:00:00 2001 From: Jouke Witteveen Date: Sat, 9 Jun 2018 19:45:59 +0200 Subject: libalpm: ignore .hook suffix when sorting hooks It is desirable to have 'a-post.hook' ordered after 'a.hook'. For this, it is needed to ignore the suffix when sorting. Signed-off-by: Allan McRae --- lib/libalpm/hook.c | 16 ++++++++++++---- lib/libalpm/hook.h | 2 ++ 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'lib/libalpm') diff --git a/lib/libalpm/hook.c b/lib/libalpm/hook.c index 0805e661..d90ed2da 100644 --- a/lib/libalpm/hook.c +++ b/lib/libalpm/hook.c @@ -551,7 +551,16 @@ static int _alpm_hook_triggered(alpm_handle_t *handle, struct _alpm_hook_t *hook static int _alpm_hook_cmp(struct _alpm_hook_t *h1, struct _alpm_hook_t *h2) { - return strcmp(h1->name, h2->name); + size_t suflen = strlen(ALPM_HOOK_SUFFIX), l1, l2; + int ret; + l1 = strlen(h1->name) - suflen; + l2 = strlen(h2->name) - suflen; + /* exclude the suffixes from comparison */ + ret = strncmp(h1->name, h2->name, l1 <= l2 ? l1 : l2); + if(ret == 0 && l1 != l2) { + return l1 < l2 ? -1 : 1; + } + return ret; } static alpm_list_t *find_hook(alpm_list_t *haystack, const void *needle) @@ -634,8 +643,7 @@ int _alpm_hook_run(alpm_handle_t *handle, alpm_hook_when_t when) alpm_event_hook_t event = { .when = when }; alpm_event_hook_run_t hook_event; alpm_list_t *i, *hooks = NULL, *hooks_triggered = NULL; - const char *suffix = ".hook"; - size_t suflen = strlen(suffix), triggered = 0; + size_t suflen = strlen(ALPM_HOOK_SUFFIX), triggered = 0; int ret = 0; for(i = alpm_list_last(handle->hookdirs); i; i = alpm_list_previous(i)) { @@ -681,7 +689,7 @@ int _alpm_hook_run(alpm_handle_t *handle, alpm_hook_when_t when) memcpy(path + dirlen, entry->d_name, name_len + 1); if(name_len < suflen - || strcmp(entry->d_name + name_len - suflen, suffix) != 0) { + || strcmp(entry->d_name + name_len - suflen, ALPM_HOOK_SUFFIX) != 0) { _alpm_log(handle, ALPM_LOG_DEBUG, "skipping non-hook file %s\n", path); continue; } diff --git a/lib/libalpm/hook.h b/lib/libalpm/hook.h index 364d22d7..30d565df 100644 --- a/lib/libalpm/hook.h +++ b/lib/libalpm/hook.h @@ -22,6 +22,8 @@ #include "alpm.h" +#define ALPM_HOOK_SUFFIX ".hook" + int _alpm_hook_run(alpm_handle_t *handle, alpm_hook_when_t when); #endif /* ALPM_HOOK_H */ -- cgit v1.2.3-54-g00ecf