From 81fa2b5990af23bda5603755d73807786cf45806 Mon Sep 17 00:00:00 2001 From: Patrick Northon Date: Thu, 30 May 2024 14:24:50 -0400 Subject: [PATCH] * Solve `calloc-transposed-args` warning. * Make `_pu_subst_server_vars` publicly visible and rename to `pu_config_subst_server_vars`. * `pu_config_resolve` no longer call `_pu_subst_server_vars`. * Add --arch flag to pacsync and pactrans. * Use `pu_config_subst_server_vars` where needed. --- doc/pacsync.pod | 4 ++++ doc/pactrans.pod | 4 ++++ ext/globdir.c/globdir.c | 4 ++-- ext/mini.c/mini.c | 2 +- lib/pacutils/config.c | 17 ++++++++++------- lib/pacutils/config.h | 4 ++++ lib/pacutils/log.c | 8 ++++---- lib/pacutils/mtree.c | 6 +++--- lib/pacutils/ui.c | 3 ++- src/pacconf.c | 18 +++++++++++++++--- src/paclog.c | 2 +- src/pacreport.c | 2 +- src/pacsync.c | 11 +++++++++++ src/pactrans.c | 11 +++++++++++ 14 files changed, 73 insertions(+), 23 deletions(-) diff --git a/doc/pacsync.pod b/doc/pacsync.pod index 7ef905e..86a18ba 100644 --- a/doc/pacsync.pod +++ b/doc/pacsync.pod @@ -44,6 +44,10 @@ Set an alternate installation root. Set an alternate system root. See L. +=item B<--arch>=F + +set an alternate architecture. + =item B<--debug> Display additional debugging information. diff --git a/doc/pactrans.pod b/doc/pactrans.pod index 0b55ecb..29d720c 100644 --- a/doc/pactrans.pod +++ b/doc/pactrans.pod @@ -74,6 +74,10 @@ Set an alternate sync database extension. Set an alternate database path. +=item B<--arch>=F + +set an alternate architecture. + =item B<--logfile>=F Set an alternate log file path. diff --git a/ext/globdir.c/globdir.c b/ext/globdir.c/globdir.c index 9b1c373..392c5c1 100644 --- a/ext/globdir.c/globdir.c +++ b/ext/globdir.c/globdir.c @@ -54,7 +54,7 @@ static char **_globdir_split_pattern(const char *pattern) { const char *c; if(pattern == NULL || pattern[0] == '\0') { - return calloc(sizeof(char*), 1); + return calloc(1, sizeof(char*)); } for(c = pattern; *c != '\0'; c++) { @@ -64,7 +64,7 @@ static char **_globdir_split_pattern(const char *pattern) { } } - if((parts = calloc(sizeof(char*), count + 1)) == NULL) { + if((parts = calloc(count + 1, sizeof(char*))) == NULL) { return NULL; } diff --git a/ext/mini.c/mini.c b/ext/mini.c/mini.c index 30c67bd..40b983d 100644 --- a/ext/mini.c/mini.c +++ b/ext/mini.c/mini.c @@ -35,7 +35,7 @@ mini_t *mini_finit(FILE *stream) { mini_t *mini; - if((mini = calloc(sizeof(mini_t), 1)) == NULL) { return NULL; } + if((mini = calloc(1, sizeof(mini_t))) == NULL) { return NULL; } mini->_buf_size = MINI_BUFFER_SIZE; mini->_buf = malloc(mini->_buf_size); diff --git a/lib/pacutils/config.c b/lib/pacutils/config.c index 9b9397a..9ef0c04 100644 --- a/lib/pacutils/config.c +++ b/lib/pacutils/config.c @@ -256,7 +256,7 @@ static struct _pu_config_setting *_pu_config_lookup_setting( } pu_config_t *pu_config_new(void) { - pu_config_t *config = calloc(sizeof(pu_config_t), 1); + pu_config_t *config = calloc(1, sizeof(pu_config_t)); if (config == NULL) { return NULL; } config->checkspace = PU_CONFIG_BOOL_UNSET; @@ -287,7 +287,7 @@ void pu_repo_free(pu_repo_t *repo) { } pu_repo_t *pu_repo_new(void) { - return calloc(sizeof(pu_repo_t), 1); + return calloc(1, sizeof(pu_repo_t)); } void pu_config_free(pu_config_t *config) { @@ -316,7 +316,7 @@ void pu_config_free(pu_config_t *config) { free(config); } -static int _pu_subst_server_vars(pu_config_t *config) { +int pu_config_subst_server_vars(pu_config_t *config) { alpm_list_t *r; for (r = config->repos; r; r = r->next) { pu_repo_t *repo = r->data; @@ -541,8 +541,6 @@ int pu_config_resolve(pu_config_t *config) { #undef SETBOOL #undef SETDEFAULT - if (_pu_subst_server_vars(config) != 0) { return -1; } - return 0; } @@ -900,7 +898,7 @@ int pu_config_reader_next(pu_config_reader_t *reader) { pu_config_reader_t *pu_config_reader_new_sysroot(pu_config_t *config, const char *file, const char *sysroot) { - pu_config_reader_t *reader = calloc(sizeof(pu_config_reader_t), 1); + pu_config_reader_t *reader = calloc(1, sizeof(pu_config_reader_t)); if (reader == NULL) { return NULL; } if ((reader->file = strdup(file)) == NULL) { @@ -935,7 +933,7 @@ pu_config_reader_t *pu_config_reader_new(pu_config_t *config, } pu_config_reader_t *pu_config_reader_finit(pu_config_t *config, FILE *stream) { - pu_config_reader_t *reader = calloc(sizeof(pu_config_reader_t), 1); + pu_config_reader_t *reader = calloc(1, sizeof(pu_config_reader_t)); if (reader == NULL) { return NULL; } if ((reader->_mini = mini_finit(stream)) == NULL) { pu_config_reader_free(reader); @@ -957,3 +955,8 @@ void pu_config_reader_free(pu_config_reader_t *reader) { pu_config_reader_free(reader->_parent); free(reader); } + +pu_config_t *pu_config_add_architecture(pu_config_t *dest, char *arch) { + dest->architectures = alpm_list_add(dest->architectures, strdup(arch)); + return dest; +} diff --git a/lib/pacutils/config.h b/lib/pacutils/config.h index f842f9d..f55f4c1 100644 --- a/lib/pacutils/config.h +++ b/lib/pacutils/config.h @@ -156,6 +156,8 @@ int pu_config_resolve(pu_config_t *config); int pu_config_resolve_sysroot(pu_config_t *config, const char *sysroot); void pu_config_free(pu_config_t *config); +int pu_config_subst_server_vars(pu_config_t *config); + alpm_handle_t *pu_initialize_handle_from_config(pu_config_t *config); pu_config_reader_t *pu_config_reader_new_sysroot(pu_config_t *config, @@ -165,4 +167,6 @@ pu_config_reader_t *pu_config_reader_finit(pu_config_t *config, FILE *stream); int pu_config_reader_next(pu_config_reader_t *reader); void pu_config_reader_free(pu_config_reader_t *reader); +int pu_config_add_architecture(pu_config_t *dest, char *arch); + #endif /* PACUTILS_CONFIG_H */ diff --git a/lib/pacutils/log.c b/lib/pacutils/log.c index eafbcd1..752b6b0 100644 --- a/lib/pacutils/log.c +++ b/lib/pacutils/log.c @@ -59,7 +59,7 @@ pu_log_action_t *pu_log_action_parse(const char *message) { if (message[mlen - 1] != ')') { errno = EINVAL; return NULL; } mlen--; /* ignore trailing ')' */ - if ((a = calloc(sizeof(pu_log_action_t), 1)) == NULL) { return NULL; } + if ((a = calloc(1, sizeof(pu_log_action_t))) == NULL) { return NULL; } #define PU_STARTSWITH(n) (mlen >= sizeof(n) && memcmp(message, n, sizeof(n) - 1) == 0) if (PU_STARTSWITH("upgraded ")) { @@ -135,7 +135,7 @@ int pu_log_fprint_entry(FILE *stream, pu_log_entry_t *entry) { pu_log_reader_t *pu_log_reader_open_file(const char *path) { pu_log_reader_t *r; - if ((r = calloc(sizeof(pu_log_reader_t), 1)) == NULL) { return NULL; } + if ((r = calloc(1, sizeof(pu_log_reader_t))) == NULL) { return NULL; } if ((r->stream = fopen(path, "r")) == NULL) { free(r); return NULL; } r->_close_stream = 1; return r; @@ -143,7 +143,7 @@ pu_log_reader_t *pu_log_reader_open_file(const char *path) { pu_log_reader_t *pu_log_reader_open_stream(FILE *stream) { pu_log_reader_t *reader; - if ((reader = calloc(sizeof(pu_log_reader_t), 1)) == NULL) { return NULL; } + if ((reader = calloc(1, sizeof(pu_log_reader_t))) == NULL) { return NULL; } reader->stream = stream; return reader; } @@ -195,7 +195,7 @@ char *_pu_log_parse_timestamp(const char *buf, pu_log_timestamp_t *ts) { pu_log_entry_t *pu_log_reader_next(pu_log_reader_t *reader) { char *p, *c; - pu_log_entry_t *entry = calloc(sizeof(pu_log_entry_t), 1); + pu_log_entry_t *entry = calloc(1, sizeof(pu_log_entry_t)); if (entry == NULL) { errno = ENOMEM; return NULL; } diff --git a/lib/pacutils/mtree.c b/lib/pacutils/mtree.c index e9df610..9befb24 100644 --- a/lib/pacutils/mtree.c +++ b/lib/pacutils/mtree.c @@ -53,7 +53,7 @@ alpm_list_t *pu_mtree_load_pkg_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg) { } pu_mtree_t *pu_mtree_new(void) { - return calloc(sizeof(pu_mtree_t), 1); + return calloc(1, sizeof(pu_mtree_t)); } void pu_mtree_free(pu_mtree_t *mtree) { @@ -72,13 +72,13 @@ void pu_mtree_reader_free(pu_mtree_reader_t *reader) { } pu_mtree_reader_t *pu_mtree_reader_open_stream(FILE *stream) { - pu_mtree_reader_t *r = calloc(sizeof(pu_mtree_reader_t), 1); + pu_mtree_reader_t *r = calloc(1, sizeof(pu_mtree_reader_t)); if (r) { r->stream = stream; } return r; } pu_mtree_reader_t *pu_mtree_reader_open_file(const char *path) { - pu_mtree_reader_t *r = calloc(sizeof(pu_mtree_reader_t), 1); + pu_mtree_reader_t *r = calloc(1, sizeof(pu_mtree_reader_t)); if (r == NULL) { return NULL; } if ((r->stream = fopen(path, "r")) == NULL) { free(r); return NULL; } r->_close_stream = 1; diff --git a/lib/pacutils/ui.c b/lib/pacutils/ui.c index a745ba7..a07998e 100644 --- a/lib/pacutils/ui.c +++ b/lib/pacutils/ui.c @@ -410,7 +410,7 @@ void pu_ui_cb_download(void *ctx, const char *filename, switch (event) { case ALPM_DOWNLOAD_INIT: { - _pu_ui_download_status_t *s = calloc(sizeof(_pu_ui_download_status_t), 1); + _pu_ui_download_status_t *s = calloc(1, sizeof(_pu_ui_download_status_t)); alpm_list_append(&c->active_downloads, s); s->filename = strdup(filename); s->optional = ((alpm_download_event_init_t *)data)->optional; @@ -643,3 +643,4 @@ pu_config_t *pu_ui_config_load_sysroot(pu_config_t *dest, pu_config_t *pu_ui_config_load(pu_config_t *dest, const char *file) { return pu_ui_config_load_sysroot(dest, file, "/"); } + diff --git a/src/pacconf.c b/src/pacconf.c index 7d1e8a7..a83d6da 100644 --- a/src/pacconf.c +++ b/src/pacconf.c @@ -109,7 +109,7 @@ pu_config_t *parse_opts(int argc, char **argv) { while ((c = getopt_long(argc, argv, short_opts, long_opts, NULL)) != -1) { switch (c) { case FLAG_ARCH: - alpm_list_append_strdup(&config->architectures, optarg); + pu_config_add_architecture(config, optarg); break; case FLAG_CONFIG: config_file = optarg; @@ -156,11 +156,23 @@ pu_config_t *parse_opts(int argc, char **argv) { } } + pu_config_t *res; if (raw) { - return pu_ui_config_parse_sysroot(config, config_file, sysroot); + res = pu_ui_config_parse_sysroot(config, config_file, sysroot); } else { - return pu_ui_config_load_sysroot(config, config_file, sysroot); + res = pu_ui_config_load_sysroot(config, config_file, sysroot); } + + if (!res) { + return NULL; + } + + if (pu_config_subst_server_vars(config) != 0) { + fputs("error: substituting repo server values failed", stderr); + return NULL; + } + + return config; } void list_repos(void) { diff --git a/src/paclog.c b/src/paclog.c index 4ae748f..b2edae7 100644 --- a/src/paclog.c +++ b/src/paclog.c @@ -211,7 +211,7 @@ void parse_opts(int argc, char **argv) { commandline = 1; break; case FLAG_GREP: { - regex_t *preg = calloc(sizeof(regex_t), 1); + regex_t *preg = calloc(1, sizeof(regex_t)); if (regcomp(preg, optarg, REG_EXTENDED | REG_NOSUB | REG_ICASE) != 0) { fprintf(stderr, "Unable to compile regex '%s'\n", optarg); exit(1); diff --git a/src/pacreport.c b/src/pacreport.c index 47345a4..1826c93 100644 --- a/src/pacreport.c +++ b/src/pacreport.c @@ -91,7 +91,7 @@ void pkg_ignore_free(struct pkg_ignore_t *pi) { } struct pkg_file_t *pkg_file_new(alpm_pkg_t *pkg, alpm_file_t *file) { - struct pkg_file_t *mf = calloc(sizeof(struct pkg_file_t), 1); + struct pkg_file_t *mf = calloc(1, sizeof(struct pkg_file_t)); if (!mf) { return NULL; } diff --git a/src/pacsync.c b/src/pacsync.c index dd26883..5bae570 100644 --- a/src/pacsync.c +++ b/src/pacsync.c @@ -46,6 +46,7 @@ enum longopt_flags { FLAG_LOGFILE, FLAG_SYSROOT, FLAG_VERSION, + FLAG_ARCH, }; #define hputs(msg) fputs(msg"\n", stream); @@ -59,6 +60,7 @@ void usage(int ret) { hputs(" --dbext= set an alternate sync database extension"); hputs(" --dbpath= set an alternate database location"); hputs(" --sysroot= set an alternate system root"); + hputs(" --arch= set an alternate architecture"); hputs(" --force sync repos even if already up-to-date"); hputs(" --debug enable extra debugging messages"); hputs(" --logfile= set an alternate log file"); @@ -82,6 +84,7 @@ pu_config_t *parse_opts(int argc, char **argv) { { "debug", no_argument, NULL, FLAG_DEBUG }, { "no-timeout", no_argument, NULL, FLAG_NOTIMEOUT }, { "sysroot", required_argument, NULL, FLAG_SYSROOT }, + { "arch", required_argument, NULL, FLAG_ARCH }, { "force", no_argument, &force, 1 }, { "updated", no_argument, &ret_updated, 1 }, { "help", no_argument, NULL, FLAG_HELP }, @@ -110,6 +113,9 @@ pu_config_t *parse_opts(int argc, char **argv) { free(config->dbpath); config->dbpath = strdup(optarg); break; + case FLAG_ARCH: + pu_config_add_architecture(config, optarg); + break; case FLAG_DEBUG: log_level |= ALPM_LOG_DEBUG; log_level |= ALPM_LOG_FUNCTION; @@ -141,6 +147,11 @@ pu_config_t *parse_opts(int argc, char **argv) { return NULL; } + if (pu_config_subst_server_vars(config) != 0) { + fputs("error: substituting repo server values failed", stderr); + return NULL; + } + return config; } diff --git a/src/pactrans.c b/src/pactrans.c index 491e99d..3f4c1cf 100644 --- a/src/pactrans.c +++ b/src/pactrans.c @@ -93,6 +93,7 @@ enum longopt_flags { FLAG_USE_DEFAULT_PROVIDER, FLAG_VERSION, FLAG_YOLO, + FLAG_ARCH, }; enum replacement_disposition { @@ -149,6 +150,7 @@ void usage(int ret) { hputs(" --dbsync update sync databases prior to the transaction"); hputs(" --dbext= set an alternate sync database extension"); hputs(" --dbpath= set an alternate database location"); + hputs(" --arch= set an alternate architecture"); hputs(" --debug enable extra debugging messages"); hputs(" --no-timeout disable low speed timeouts for downloads"); hputs(" --hookdir= add additional user hook directory"); @@ -270,6 +272,7 @@ pu_config_t *parse_opts(int argc, char **argv) { { "dbext", required_argument, NULL, FLAG_DBEXT }, { "dbpath", required_argument, NULL, FLAG_DBPATH }, { "dbsync", no_argument, NULL, FLAG_DBSYNC }, + { "arch", required_argument, NULL, FLAG_ARCH }, { "debug", optional_argument, NULL, FLAG_DEBUG }, { "hookdir", required_argument, NULL, FLAG_HOOKDIR }, { "logfile", required_argument, NULL, FLAG_LOGFILE }, @@ -382,6 +385,9 @@ pu_config_t *parse_opts(int argc, char **argv) { case FLAG_DBSYNC: dbsync = 1; break; + case FLAG_ARCH: + pu_config_add_architecture(config, optarg); + break; case FLAG_DEBUG: log_level |= ALPM_LOG_DEBUG; log_level |= ALPM_LOG_FUNCTION; @@ -521,6 +527,11 @@ pu_config_t *parse_opts(int argc, char **argv) { return NULL; } + if (pu_config_subst_server_vars(config) != 0) { + fputs("error: substituting repo server values failed", stderr); + return NULL; + } + return config; }