aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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