[pacman-dev] [PATCH v3 2/4] pacman/upgrade: Refactor memory management
Andrew Gregory
andrew.gregory.8 at gmail.com
Mon Mar 24 10:10:29 EDT 2014
On 03/11/14 at 07:29pm, Sören Brinkmann wrote:
> Refactor the upgrade routine to use an array that can be allocated in
> one step instead of an alpm_list that is gradually extended in loops.
>
> Signed-off-by: Sören Brinkmann <soeren.brinkmann at gmail.com>
> ---
Looks good; I just have a few small style nitpicks.
> src/pacman/upgrade.c | 34 +++++++++++++++++-----------------
> 1 file changed, 17 insertions(+), 17 deletions(-)
>
> diff --git a/src/pacman/upgrade.c b/src/pacman/upgrade.c
> index 11da4dcb5e53..e0cdf564971e 100644
> --- a/src/pacman/upgrade.c
> +++ b/src/pacman/upgrade.c
> @@ -39,23 +39,25 @@
> */
> int pacman_upgrade(alpm_list_t *targets)
> {
> - int retval = 0;
> - alpm_list_t *i, *j, *remote = NULL;
> + int retval = 0, *file_is_remote;
> + alpm_list_t *i;
> + unsigned int n, num_targets;
>
> if(targets == NULL) {
> pm_printf(ALPM_LOG_ERROR, _("no targets specified (use -h for help)\n"));
> return 1;
> }
>
> - /* Check for URL targets and process them
> - */
> - for(i = targets; i; i = alpm_list_next(i)) {
> - int *r = malloc(sizeof(int));
> - if(r == NULL) {
> - pm_printf(ALPM_LOG_ERROR, _("memory exhausted\n"));
> - return 1;
> - }
> + num_targets = alpm_list_count(targets);
>
> + /* Check for URL targets and process them */
> + file_is_remote = malloc(num_targets * sizeof(*file_is_remote));
Our style guidelines require that sizeof() be used with types, not
values.
> + if(file_is_remote == NULL) {
> + pm_printf(ALPM_LOG_ERROR, _("memory exhausted\n"));
> + return 1;
> + }
> +
> + for(i = targets, n = 0; n < num_targets; i = alpm_list_next(i), n++) {
I would prefer to use i as the conditional check here instead of
n since it is such a common idiom throughout our codebase.
> if(strstr(i->data, "://")) {
> char *str = alpm_fetch_pkgurl(config->handle, i->data);
> if(str == NULL) {
> @@ -65,13 +67,11 @@ int pacman_upgrade(alpm_list_t *targets)
> } else {
> free(i->data);
> i->data = str;
> - *r = 1;
> + file_is_remote[n] = 1;
> }
> } else {
> - *r = 0;
> + file_is_remote[n] = 0;
> }
> -
> - remote = alpm_list_add(remote, r);
> }
>
> if(retval) {
> @@ -85,12 +85,12 @@ int pacman_upgrade(alpm_list_t *targets)
>
> printf(_("loading packages...\n"));
> /* add targets to the created transaction */
> - for(i = targets, j = remote; i; i = alpm_list_next(i), j = alpm_list_next(j)) {
> + for(i = targets, n = 0; n < num_targets; i = alpm_list_next(i), n++) {
Same as above.
> const char *targ = i->data;
> alpm_pkg_t *pkg;
> alpm_siglevel_t level;
>
> - if(*(int *)j->data) {
> + if(file_is_remote[n]) {
> level = alpm_option_get_remote_file_siglevel(config->handle);
> } else {
> level = alpm_option_get_local_file_siglevel(config->handle);
> @@ -112,7 +112,7 @@ int pacman_upgrade(alpm_list_t *targets)
> config->explicit_adds = alpm_list_add(config->explicit_adds, pkg);
> }
>
> - FREELIST(remote);
> + free(file_is_remote);
>
> if(retval) {
> trans_release();
> --
> 1.9.0
More information about the pacman-dev
mailing list