[arch-projects] [projects][pacman] [PATCH] libalpm: ignore .hook suffix when sorting hooks
Jelle van der Waa
jelle at vdwaa.nl
Sat Jun 9 13:49:39 UTC 2018
On 06/09/18 at 12:31pm, Jouke Witteveen via arch-projects wrote:
> It is desirable to have 'a-post.hook' ordered after 'a.hook'. For this,
> it is needed to ignore the suffix when sorting.
> ---
pacman patches should go to https://lists.archlinux.org/listinfo/pacman-dev
>
> Two years ago, I suggested this patch in https://bugs.archlinux.org/task/49653.
> Today, I do so again :-).
>
> Regards,
> - Jouke
>
> lib/libalpm/hook.c | 16 ++++++++++++----
> lib/libalpm/hook.h | 2 ++
> 2 files changed, 14 insertions(+), 4 deletions(-)
>
> 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 */
> --
> 2.17.1
--
Jelle van der Waa
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <https://lists.archlinux.org/pipermail/arch-projects/attachments/20180609/ca2beca1/attachment.asc>
More information about the arch-projects
mailing list