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:
parent
520841ee8a
commit
2ab320a388
2 changed files with 48 additions and 30 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue