aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2016-03-17 23:02:59 +1300
committerTom Ryder <tom@sanctum.geek.nz>2016-03-17 23:33:23 +1300
commit316b49df8c4226134496249675b9fe505cf3b31c (patch)
tree108d41c3d23f591a2fc1c2aafe3172b108f143b0
parentBoth tools working now (diff)
downloadtunics-316b49df8c4226134496249675b9fe505cf3b31c.tar.gz
tunics-316b49df8c4226134496249675b9fe505cf3b31c.zip
Free some memory; appease valgrind(1)
-rw-r--r--sort.c13
-rw-r--r--sort.h1
2 files changed, 14 insertions, 0 deletions
diff --git a/sort.c b/sort.c
index f8a3dcc..a389f47 100644
--- a/sort.c
+++ b/sort.c
@@ -10,12 +10,14 @@ int main(void) {
while ((line = read_line(stdin)) != NULL) {
vec_add(lines, line);
}
+ free(line);
qsort(lines->data, lines->count, sizeof(char *), qsort_strcmp);
for (i = 0; i < lines->count; i++) {
fputs(lines->data[i], stdout);
}
+ vec_free(lines);
exit(EXIT_SUCCESS);
}
@@ -34,6 +36,7 @@ char *read_line(FILE* stream) {
for (;;) {
if (fgets(buf, BUF_SIZE, stream) == NULL) {
free(buf);
+ free(line);
return NULL;
}
line = strncat(line, buf, BUF_SIZE);
@@ -66,6 +69,16 @@ void vec_add(vec *v, char *s) {
return;
}
+void vec_free(vec *v) {
+ unsigned long i;
+ for (i = 0; i < v->count; i++) {
+ free(v->data[i]);
+ }
+ free(v->data);
+ free(v);
+ return;
+}
+
static int qsort_strcmp(const void *p1, const void *p2) {
return strcmp(* (char * const *) p1, * (char * const *) p2);
}
diff --git a/sort.h b/sort.h
index 9b499c8..3e56b46 100644
--- a/sort.h
+++ b/sort.h
@@ -16,6 +16,7 @@ typedef struct {
char *read_line(FILE* stream);
vec *vec_init(void);
void vec_add(vec *v, char *s);
+void vec_free(vec *v);
static int qsort_strcmp(const void *p1, const void *p2);
#endif