summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2007-06-13 11:33:45 -0400
committerDan McGee <dan@archlinux.org>2007-06-17 13:20:17 -0400
commit2ab320a3885226ce28da0f2f2bc84b5f2d0f0539 (patch)
treedb6997d8dd14026554fbf981cabade0b2bcdd09c
parent520841ee8a82460e0abb2a9a44c857556604cf56 (diff)
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>
-rw-r--r--src/pacman/add.c37
-rw-r--r--src/pacman/remove.c41
2 files changed, 48 insertions, 30 deletions
diff --git a/src/pacman/add.c b/src/pacman/add.c
index 39da624b..71578f63 100644
--- a/src/pacman/add.c
+++ b/src/pacman/add.c
@@ -36,6 +36,19 @@
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.
*
@@ -108,8 +121,8 @@ int pacman_add(alpm_list_t *targets)
if(alpm_trans_addtarget(targ) == -1) {
fprintf(stderr, _("error: failed to add target '%s' (%s)"), targ,
alpm_strerror(pm_errno));
- retval = 1;
- goto cleanup;
+ add_cleanup();
+ return(1);
}
}
printf(_("done.\n"));
@@ -174,26 +187,20 @@ int pacman_add(alpm_list_t *targets)
default:
break;
}
- retval=1;
- goto cleanup;
+ add_cleanup();
+ alpm_list_free(data);
+ return(1);
}
+ alpm_list_free(data);
/* Step 3: perform the installation */
if(alpm_trans_commit(NULL) == -1) {
fprintf(stderr, _("error: failed to commit transaction (%s)\n"), alpm_strerror(pm_errno));
- retval=1;
- goto cleanup;
- }
-
-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;
+ add_cleanup();
+ return(1);
}
+ retval = add_cleanup();
return(retval);
}
diff --git a/src/pacman/remove.c b/src/pacman/remove.c
index aa9ae5da..0b6b4ce2 100644
--- a/src/pacman/remove.c
+++ b/src/pacman/remove.c
@@ -38,6 +38,19 @@ extern config_t *config;
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.
*
@@ -101,8 +114,9 @@ int pacman_remove(alpm_list_t *targets)
printf("failed.\n");
fprintf(stderr, _("error: failed to add target '%s' (%s)\n"), targ,
alpm_strerror(pm_errno));
- retval = 1;
- goto cleanup;
+ remove_cleanup();
+ FREELIST(finaltargs);
+ return(1);
}
}
@@ -122,8 +136,9 @@ int pacman_remove(alpm_list_t *targets)
default:
break;
}
- retval = 1;
- goto cleanup;
+ remove_cleanup();
+ FREELIST(finaltargs);
+ return(1);
}
/* Warn user in case of dangerous operation */
@@ -141,8 +156,9 @@ int pacman_remove(alpm_list_t *targets)
FREELIST(lst);
/* get confirmation */
if(yesno(_("\nDo you want to remove these packages? [Y/n] ")) == 0) {
- retval = 1;
- goto cleanup;
+ remove_cleanup();
+ FREELIST(finaltargs);
+ return(1);
}
printf("\n");
}
@@ -151,19 +167,14 @@ int pacman_remove(alpm_list_t *targets)
if(alpm_trans_commit(NULL) == -1) {
fprintf(stderr, _("error: failed to commit transaction (%s)\n"),
alpm_strerror(pm_errno));
- retval = 1;
- goto cleanup;
+ remove_cleanup();
+ FREELIST(finaltargs);
+ return(1);
}
/* Step 4: release transaction resources */
-cleanup:
+ retval = remove_cleanup();
FREELIST(finaltargs);
- if(alpm_trans_release() == -1) {
- fprintf(stderr, _("error: failed to release transaction (%s)\n"),
- alpm_strerror(pm_errno));
- retval = 1;
- }
-
return(retval);
}