From e30c1d01b64c9c313b333d0c1051cf39b3b30d91 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Mon, 6 Jun 2022 16:01:20 +0200 Subject: [PATCH 1/2] shared: Rename pcre2-dlopen.h/c to pcre2-util.h/c We already store the dlopen() stuff for other libraries in util headers as well so let's do the same for pcre2. We also move the definition of some trivial cleanup functions from journalctl.c to pcre2-util.h --- src/journal/journalctl.c | 5 +---- src/shared/meson.build | 4 ++-- src/shared/{pcre2-dlopen.c => pcre2-util.c} | 2 +- src/shared/{pcre2-dlopen.h => pcre2-util.h} | 5 +++++ src/test/test-dlopen-so.c | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) rename src/shared/{pcre2-dlopen.c => pcre2-util.c} (98%) rename src/shared/{pcre2-dlopen.h => pcre2-util.h} (81%) diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 046b48184a..904881adc2 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -58,7 +58,7 @@ #include "parse-argument.h" #include "parse-util.h" #include "path-util.h" -#include "pcre2-dlopen.h" +#include "pcre2-util.h" #include "pretty-print.h" #include "qrcode-util.h" #include "random-util.h" @@ -167,9 +167,6 @@ typedef struct BootId { } BootId; #if HAVE_PCRE2 -DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(pcre2_match_data*, sym_pcre2_match_data_free, NULL); -DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(pcre2_code*, sym_pcre2_code_free, NULL); - static int pattern_compile(const char *pattern, unsigned flags, pcre2_code **out) { int errorcode, r; PCRE2_SIZE erroroffset; diff --git a/src/shared/meson.build b/src/shared/meson.build index 1ddbfac677..0cd48df158 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -247,8 +247,8 @@ shared_sources = files( 'parse-argument.h', 'parse-helpers.c', 'parse-helpers.h', - 'pcre2-dlopen.c', - 'pcre2-dlopen.h', + 'pcre2-util.c', + 'pcre2-util.h', 'pe-header.h', 'pkcs11-util.c', 'pkcs11-util.h', diff --git a/src/shared/pcre2-dlopen.c b/src/shared/pcre2-util.c similarity index 98% rename from src/shared/pcre2-dlopen.c rename to src/shared/pcre2-util.c index 475d7eb26d..80f6cec342 100644 --- a/src/shared/pcre2-dlopen.c +++ b/src/shared/pcre2-util.c @@ -2,7 +2,7 @@ #include "dlfcn-util.h" #include "log.h" -#include "pcre2-dlopen.h" +#include "pcre2-util.h" #if HAVE_PCRE2 static void *pcre2_dl = NULL; diff --git a/src/shared/pcre2-dlopen.h b/src/shared/pcre2-util.h similarity index 81% rename from src/shared/pcre2-dlopen.h rename to src/shared/pcre2-util.h index 1306334144..f17dcd5573 100644 --- a/src/shared/pcre2-dlopen.h +++ b/src/shared/pcre2-util.h @@ -1,6 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include "macro.h" + #if HAVE_PCRE2 #define PCRE2_CODE_UNIT_WIDTH 8 @@ -13,6 +15,9 @@ extern pcre2_code* (*sym_pcre2_compile)(PCRE2_SPTR, PCRE2_SIZE, uint32_t, int *, extern int (*sym_pcre2_get_error_message)(int, PCRE2_UCHAR *, PCRE2_SIZE); extern int (*sym_pcre2_match)(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, uint32_t, pcre2_match_data *, pcre2_match_context *); extern PCRE2_SIZE* (*sym_pcre2_get_ovector_pointer)(pcre2_match_data *); + +DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(pcre2_match_data*, sym_pcre2_match_data_free, NULL); +DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(pcre2_code*, sym_pcre2_code_free, NULL); #endif int dlopen_pcre2(void); diff --git a/src/test/test-dlopen-so.c b/src/test/test-dlopen-so.c index 002f666ed8..85dbb81e43 100644 --- a/src/test/test-dlopen-so.c +++ b/src/test/test-dlopen-so.c @@ -10,7 +10,7 @@ #include "libfido2-util.h" #include "macro.h" #include "main-func.h" -#include "pcre2-dlopen.h" +#include "pcre2-util.h" #include "pwquality-util.h" #include "qrcode-util.h" #include "tests.h" From 2e64b27aeb5f91dac3c4b32ccdbfef587b260b83 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Mon, 6 Jun 2022 16:04:53 +0200 Subject: [PATCH 2/2] journalctl: Use STATIC_DESTRUCTOR_REGISTER() --- src/journal/journalctl.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 904881adc2..6ee49a6913 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -65,6 +65,7 @@ #include "rlimit-util.h" #include "set.h" #include "sigbus.h" +#include "static-destruct.h" #include "stdio-util.h" #include "string-table.h" #include "strv.h" @@ -138,6 +139,19 @@ static pcre2_code *arg_compiled_pattern = NULL; static int arg_case_sensitive = -1; /* -1 means be smart */ #endif +STATIC_DESTRUCTOR_REGISTER(arg_file, strv_freep); +STATIC_DESTRUCTOR_REGISTER(arg_facilities, set_freep); +STATIC_DESTRUCTOR_REGISTER(arg_verify_key, freep); +STATIC_DESTRUCTOR_REGISTER(arg_syslog_identifier, strv_freep); +STATIC_DESTRUCTOR_REGISTER(arg_system_units, strv_freep); +STATIC_DESTRUCTOR_REGISTER(arg_user_units, strv_freep); +STATIC_DESTRUCTOR_REGISTER(arg_root, freep); +STATIC_DESTRUCTOR_REGISTER(arg_image, freep); +STATIC_DESTRUCTOR_REGISTER(arg_output_fields, strv_freep); +#if HAVE_PCRE2 +STATIC_DESTRUCTOR_REGISTER(arg_compiled_pattern, sym_pcre2_code_freep); +#endif + static enum { ACTION_SHOW, ACTION_NEW_ID128, @@ -2814,28 +2828,13 @@ int main(int argc, char *argv[]) { finish: pager_close(); - strv_free(arg_file); - - set_free(arg_facilities); - strv_free(arg_syslog_identifier); - strv_free(arg_system_units); - strv_free(arg_user_units); - strv_free(arg_output_fields); - - free(arg_root); - free(arg_verify_key); - #if HAVE_PCRE2 - if (arg_compiled_pattern) { - sym_pcre2_code_free(arg_compiled_pattern); - + if (arg_compiled_pattern && r == 0 && n_shown == 0) /* --grep was used, no error was thrown, but the pattern didn't * match anything. Let's mimic grep's behavior here and return * a non-zero exit code, so journalctl --grep can be used * in scripts and such */ - if (r == 0 && n_shown == 0) - r = -ENOENT; - } + r = -ENOENT; #endif return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;