[pacman-dev] [PATCH 3/3] pacsort: clean up if error

Rikard Falkeborn rikard.falkeborn at gmail.com
Mon Aug 10 19:42:39 UTC 2015


* free memory
* close open file

Signed-off-by: Rikard Falkeborn <rikard.falkeborn at gmail.com>
---
 src/util/pacsort.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/util/pacsort.c b/src/util/pacsort.c
index 3337d97..e7dc63e 100644
--- a/src/util/pacsort.c
+++ b/src/util/pacsort.c
@@ -484,6 +484,7 @@ int main(int argc, char *argv[])
 	struct list_t *list;
 	struct buffer_t *buffer;
 	size_t i;
+	int ret = 0;
 
 	/* option defaults */
 	opts.order = 1;
@@ -507,7 +508,8 @@ int main(int argc, char *argv[])
 	if(optind == argc) {
 		if(splitfile(stdin, buffer, list) != 0) {
 			fprintf(stderr, "%s: memory exhausted\n", argv[0]);
-			return ENOMEM;
+			ret = ENOMEM;
+			goto cleanup;
 		}
 	} else {
 		while(optind < argc) {
@@ -515,7 +517,9 @@ int main(int argc, char *argv[])
 			if(input) {
 				if(splitfile(input, buffer, list) != 0) {
 					fprintf(stderr, "%s: memory exhausted\n", argv[0]);
-					return ENOMEM;
+					fclose(input);
+					ret = ENOMEM;
+					goto cleanup;
 				}
 				fclose(input);
 			} else {
@@ -534,10 +538,11 @@ int main(int argc, char *argv[])
 		}
 	}
 
+cleanup:
 	list_free(list, input_free);
 	buffer_free(buffer);
 
-	return 0;
+	return ret;
 }
 
 /* vim: set noet: */
-- 
2.5.0


More information about the pacman-dev mailing list