dmesg: free memory even when exiting with an error.
Change-Id: Ib137d32539741bc2638f91427efea62f884b46c8
diff --git a/dmesg.c b/dmesg.c
index 4086ecb..788b058 100644
--- a/dmesg.c
+++ b/dmesg.c
@@ -21,17 +21,17 @@
char *buffer;
char *p;
ssize_t ret;
- int n, op, bufsize;
+ int n, op, bufsize, err = EXIT_FAILURE;
bufsize = klogctl(KLOG_SIZE_BUFFER, NULL, 0);
if (bufsize <= 0) {
perror("klogctl size_buffer");
- return EXIT_FAILURE;
+ goto done;
}
buffer = malloc(bufsize);
if (!buffer) {
perror("malloc");
- return EXIT_FAILURE;
+ goto done;
}
buffer[0] = 0;
@@ -44,7 +44,7 @@
n = klogctl(op, buffer, bufsize);
if (n < 0) {
perror("klogctl");
- return EXIT_FAILURE;
+ goto done_free;
}
buffer[n] = '\0';
@@ -54,11 +54,14 @@
if (errno == EINTR)
continue;
perror("write");
- return EXIT_FAILURE;
+ goto done_free;
}
p += ret;
n -= ret;
}
+ err = 0;
+done_free:
free(buffer);
- return 0;
+done:
+ return err;
}