[pacman-dev] [PATCH 01/11] handle: factor out string list option handling
Consolidates repeated code and replaces dangerous strdup calls with STRDUP. Also fix a couple variables named "pkg" that refer to file paths. Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com> --- lib/libalpm/alpm.h | 8 ++--- lib/libalpm/handle.c | 89 +++++++++++++++++++++------------------------------- 2 files changed, 39 insertions(+), 58 deletions(-) diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h index db1e0cd..29a2dda 100644 --- a/lib/libalpm/alpm.h +++ b/lib/libalpm/alpm.h @@ -818,9 +818,9 @@ int alpm_option_set_usesyslog(alpm_handle_t *handle, int usesyslog); * @{ */ alpm_list_t *alpm_option_get_noupgrades(alpm_handle_t *handle); -int alpm_option_add_noupgrade(alpm_handle_t *handle, const char *pkg); +int alpm_option_add_noupgrade(alpm_handle_t *handle, const char *path); int alpm_option_set_noupgrades(alpm_handle_t *handle, alpm_list_t *noupgrade); -int alpm_option_remove_noupgrade(alpm_handle_t *handle, const char *pkg); +int alpm_option_remove_noupgrade(alpm_handle_t *handle, const char *path); /** @} */ /** @name Accessors to the list of no-extract files. @@ -830,9 +830,9 @@ int alpm_option_remove_noupgrade(alpm_handle_t *handle, const char *pkg); * @{ */ alpm_list_t *alpm_option_get_noextracts(alpm_handle_t *handle); -int alpm_option_add_noextract(alpm_handle_t *handle, const char *pkg); +int alpm_option_add_noextract(alpm_handle_t *handle, const char *path); int alpm_option_set_noextracts(alpm_handle_t *handle, alpm_list_t *noextract); -int alpm_option_remove_noextract(alpm_handle_t *handle, const char *pkg); +int alpm_option_remove_noextract(alpm_handle_t *handle, const char *path); /** @} */ /** @name Accessors to the list of ignored packages. diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c index 0842d51..b218a68 100644 --- a/lib/libalpm/handle.c +++ b/lib/libalpm/handle.c @@ -444,26 +444,28 @@ int SYMEXPORT alpm_option_set_usesyslog(alpm_handle_t *handle, int usesyslog) return 0; } -int SYMEXPORT alpm_option_add_noupgrade(alpm_handle_t *handle, const char *pkg) +static int _alpm_option_strlist_add(alpm_handle_t *handle, alpm_list_t **list, const char *str) { + char *dup; CHECK_HANDLE(handle, return -1); - handle->noupgrade = alpm_list_add(handle->noupgrade, strdup(pkg)); + STRDUP(dup, str, RET_ERR(handle, ALPM_ERR_MEMORY, -1)); + *list = alpm_list_add(*list, dup); return 0; } -int SYMEXPORT alpm_option_set_noupgrades(alpm_handle_t *handle, alpm_list_t *noupgrade) +static int _alpm_option_strlist_set(alpm_handle_t *handle, alpm_list_t **list, alpm_list_t *newlist) { CHECK_HANDLE(handle, return -1); - if(handle->noupgrade) FREELIST(handle->noupgrade); - handle->noupgrade = alpm_list_strdup(noupgrade); + FREELIST(*list); + *list = alpm_list_strdup(newlist); return 0; } -int SYMEXPORT alpm_option_remove_noupgrade(alpm_handle_t *handle, const char *pkg) +static int _alpm_option_strlist_rem(alpm_handle_t *handle, alpm_list_t **list, const char *str) { char *vdata = NULL; CHECK_HANDLE(handle, return -1); - handle->noupgrade = alpm_list_remove_str(handle->noupgrade, pkg, &vdata); + *list = alpm_list_remove_str(*list, str, &vdata); if(vdata != NULL) { FREE(vdata); return 1; @@ -471,85 +473,64 @@ int SYMEXPORT alpm_option_remove_noupgrade(alpm_handle_t *handle, const char *pk return 0; } -int SYMEXPORT alpm_option_add_noextract(alpm_handle_t *handle, const char *pkg) +int SYMEXPORT alpm_option_add_noupgrade(alpm_handle_t *handle, const char *pkg) { - CHECK_HANDLE(handle, return -1); - handle->noextract = alpm_list_add(handle->noextract, strdup(pkg)); - return 0; + return _alpm_option_strlist_add(handle, &(handle->noupgrade), pkg); +} + +int SYMEXPORT alpm_option_set_noupgrades(alpm_handle_t *handle, alpm_list_t *noupgrade) +{ + return _alpm_option_strlist_set(handle, &(handle->noupgrade), noupgrade); +} + +int SYMEXPORT alpm_option_remove_noupgrade(alpm_handle_t *handle, const char *pkg) +{ + return _alpm_option_strlist_rem(handle, &(handle->noupgrade), pkg); +} + +int SYMEXPORT alpm_option_add_noextract(alpm_handle_t *handle, const char *path) +{ + return _alpm_option_strlist_add(handle, &(handle->noextract), path); } int SYMEXPORT alpm_option_set_noextracts(alpm_handle_t *handle, alpm_list_t *noextract) { - CHECK_HANDLE(handle, return -1); - if(handle->noextract) FREELIST(handle->noextract); - handle->noextract = alpm_list_strdup(noextract); - return 0; + return _alpm_option_strlist_set(handle, &(handle->noextract), noextract); } -int SYMEXPORT alpm_option_remove_noextract(alpm_handle_t *handle, const char *pkg) +int SYMEXPORT alpm_option_remove_noextract(alpm_handle_t *handle, const char *path) { - char *vdata = NULL; - CHECK_HANDLE(handle, return -1); - handle->noextract = alpm_list_remove_str(handle->noextract, pkg, &vdata); - if(vdata != NULL) { - FREE(vdata); - return 1; - } - return 0; + return _alpm_option_strlist_rem(handle, &(handle->noextract), path); } int SYMEXPORT alpm_option_add_ignorepkg(alpm_handle_t *handle, const char *pkg) { - CHECK_HANDLE(handle, return -1); - handle->ignorepkg = alpm_list_add(handle->ignorepkg, strdup(pkg)); - return 0; + return _alpm_option_strlist_add(handle, &(handle->ignorepkg), pkg); } int SYMEXPORT alpm_option_set_ignorepkgs(alpm_handle_t *handle, alpm_list_t *ignorepkgs) { - CHECK_HANDLE(handle, return -1); - if(handle->ignorepkg) FREELIST(handle->ignorepkg); - handle->ignorepkg = alpm_list_strdup(ignorepkgs); - return 0; + return _alpm_option_strlist_set(handle, &(handle->ignorepkg), ignorepkgs); } int SYMEXPORT alpm_option_remove_ignorepkg(alpm_handle_t *handle, const char *pkg) { - char *vdata = NULL; - CHECK_HANDLE(handle, return -1); - handle->ignorepkg = alpm_list_remove_str(handle->ignorepkg, pkg, &vdata); - if(vdata != NULL) { - FREE(vdata); - return 1; - } - return 0; + return _alpm_option_strlist_rem(handle, &(handle->ignorepkg), pkg); } int SYMEXPORT alpm_option_add_ignoregroup(alpm_handle_t *handle, const char *grp) { - CHECK_HANDLE(handle, return -1); - handle->ignoregroup = alpm_list_add(handle->ignoregroup, strdup(grp)); - return 0; + return _alpm_option_strlist_add(handle, &(handle->ignoregroup), grp); } int SYMEXPORT alpm_option_set_ignoregroups(alpm_handle_t *handle, alpm_list_t *ignoregrps) { - CHECK_HANDLE(handle, return -1); - if(handle->ignoregroup) FREELIST(handle->ignoregroup); - handle->ignoregroup = alpm_list_strdup(ignoregrps); - return 0; + return _alpm_option_strlist_set(handle, &(handle->ignoregroup), ignoregrps); } int SYMEXPORT alpm_option_remove_ignoregroup(alpm_handle_t *handle, const char *grp) { - char *vdata = NULL; - CHECK_HANDLE(handle, return -1); - handle->ignoregroup = alpm_list_remove_str(handle->ignoregroup, grp, &vdata); - if(vdata != NULL) { - FREE(vdata); - return 1; - } - return 0; + return _alpm_option_strlist_rem(handle, &(handle->ignoregroup), grp); } int SYMEXPORT alpm_option_set_arch(alpm_handle_t *handle, const char *arch) -- 2.0.2
On 02/08/14 07:19, Andrew Gregory wrote:
Consolidates repeated code and replaces dangerous strdup calls with STRDUP.
Also fix a couple variables named "pkg" that refer to file paths.
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Ack.
participants (2)
-
Allan McRae
-
Andrew Gregory