Remove some use of goto in the pacman frontend

Refactor the goto cleanup; statements out of add.c and remove.c, and move
what the cleanup: label did into a function.

Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Dan McGee 2007-06-13 11:33:45 -04:00
parent 520841ee8a
commit 2ab320a388
2 changed files with 48 additions and 30 deletions

View file

@ -36,6 +36,19 @@
extern config_t *config; extern config_t *config;
/* Free the current transaction and print an error if unsuccessful */
static int add_cleanup(void)
{
int ret = alpm_trans_release();
if(ret != 0) {
pm_printf(PM_LOG_ERROR, _("failed to release transaction (%s)\n"),
alpm_strerror(pm_errno));
ret = 1;
}
return(ret);
}
/** /**
* @brief Upgrade a specified list of packages. * @brief Upgrade a specified list of packages.
* *
@ -108,8 +121,8 @@ int pacman_add(alpm_list_t *targets)
if(alpm_trans_addtarget(targ) == -1) { if(alpm_trans_addtarget(targ) == -1) {
fprintf(stderr, _("error: failed to add target '%s' (%s)"), targ, fprintf(stderr, _("error: failed to add target '%s' (%s)"), targ,
alpm_strerror(pm_errno)); alpm_strerror(pm_errno));
retval = 1; add_cleanup();
goto cleanup; return(1);
} }
} }
printf(_("done.\n")); printf(_("done.\n"));
@ -174,26 +187,20 @@ int pacman_add(alpm_list_t *targets)
default: default:
break; break;
} }
retval=1; add_cleanup();
goto cleanup; alpm_list_free(data);
return(1);
} }
alpm_list_free(data);
/* Step 3: perform the installation */ /* Step 3: perform the installation */
if(alpm_trans_commit(NULL) == -1) { if(alpm_trans_commit(NULL) == -1) {
fprintf(stderr, _("error: failed to commit transaction (%s)\n"), alpm_strerror(pm_errno)); fprintf(stderr, _("error: failed to commit transaction (%s)\n"), alpm_strerror(pm_errno));
retval=1; add_cleanup();
goto cleanup; return(1);
}
cleanup:
if(data) {
alpm_list_free(data);
}
if(alpm_trans_release() == -1) {
fprintf(stderr, _("error: failed to release transaction (%s)\n"), alpm_strerror(pm_errno));
retval=1;
} }
retval = add_cleanup();
return(retval); return(retval);
} }

View file

@ -38,6 +38,19 @@ extern config_t *config;
extern pmdb_t *db_local; extern pmdb_t *db_local;
/* Free the current transaction and print an error if unsuccessful */
static int remove_cleanup(void)
{
int ret = alpm_trans_release();
if(ret != 0) {
pm_printf(PM_LOG_ERROR, _("failed to release transaction (%s)\n"),
alpm_strerror(pm_errno));
ret = 1;
}
return(ret);
}
/** /**
* @brief Remove a specified list of packages. * @brief Remove a specified list of packages.
* *
@ -101,8 +114,9 @@ int pacman_remove(alpm_list_t *targets)
printf("failed.\n"); printf("failed.\n");
fprintf(stderr, _("error: failed to add target '%s' (%s)\n"), targ, fprintf(stderr, _("error: failed to add target '%s' (%s)\n"), targ,
alpm_strerror(pm_errno)); alpm_strerror(pm_errno));
retval = 1; remove_cleanup();
goto cleanup; FREELIST(finaltargs);
return(1);
} }
} }
@ -122,8 +136,9 @@ int pacman_remove(alpm_list_t *targets)
default: default:
break; break;
} }
retval = 1; remove_cleanup();
goto cleanup; FREELIST(finaltargs);
return(1);
} }
/* Warn user in case of dangerous operation */ /* Warn user in case of dangerous operation */
@ -141,8 +156,9 @@ int pacman_remove(alpm_list_t *targets)
FREELIST(lst); FREELIST(lst);
/* get confirmation */ /* get confirmation */
if(yesno(_("\nDo you want to remove these packages? [Y/n] ")) == 0) { if(yesno(_("\nDo you want to remove these packages? [Y/n] ")) == 0) {
retval = 1; remove_cleanup();
goto cleanup; FREELIST(finaltargs);
return(1);
} }
printf("\n"); printf("\n");
} }
@ -151,19 +167,14 @@ int pacman_remove(alpm_list_t *targets)
if(alpm_trans_commit(NULL) == -1) { if(alpm_trans_commit(NULL) == -1) {
fprintf(stderr, _("error: failed to commit transaction (%s)\n"), fprintf(stderr, _("error: failed to commit transaction (%s)\n"),
alpm_strerror(pm_errno)); alpm_strerror(pm_errno));
retval = 1; remove_cleanup();
goto cleanup; FREELIST(finaltargs);
return(1);
} }
/* Step 4: release transaction resources */ /* Step 4: release transaction resources */
cleanup: retval = remove_cleanup();
FREELIST(finaltargs); FREELIST(finaltargs);
if(alpm_trans_release() == -1) {
fprintf(stderr, _("error: failed to release transaction (%s)\n"),
alpm_strerror(pm_errno));
retval = 1;
}
return(retval); return(retval);
} }