diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2016-03-17 11:34:44 +1300 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2016-03-17 11:34:44 +1300 |
commit | d5d4368a4e6ee089fcb00618610b66c332304d40 (patch) | |
tree | 89dd51bcaf17ee6ae9cf43ab0bfdffedd59903c0 | |
parent | Correct license (diff) | |
download | tunics-d5d4368a4e6ee089fcb00618610b66c332304d40.tar.gz tunics-d5d4368a4e6ee089fcb00618610b66c332304d40.zip |
Got line vector working properly
-rw-r--r-- | sort.c | 25 |
1 files changed, 14 insertions, 11 deletions
@@ -2,32 +2,35 @@ #include <stdlib.h> #include <string.h> -#define MAX_LINE_LENGTH 32 +#define MAX_LINE_LENGTH (2 << 8) +#define LINES_VECTOR_SIZE_INITIAL (2 << 6) +#define LINES_VECTOR_SIZE_INCREMENT (2 << 4) static int qsort_strcmp(const void *p1, const void *p2); int main(void) { char **lv; - unsigned long lc; - unsigned int i; + unsigned long la, lc, li; + + la = LINES_VECTOR_SIZE_INITIAL; + lv = (char **) malloc(la * sizeof(char *)); - lv = malloc(sizeof(char *)); for (lc = 0 ; ; lc++) { - fprintf(stderr, "Current char pointers allocated to lv: %lu\n", sizeof(lv) / sizeof(char *)); - if (lc >= sizeof(lv) / sizeof(char *)) { - lv = realloc(lv, (sizeof(lv) + 32) * sizeof(char *)); + if (lc == la) { + la += LINES_VECTOR_SIZE_INCREMENT; + lv = (char **) realloc(lv, la * sizeof(char *)); } - lv[lc] = calloc(MAX_LINE_LENGTH, sizeof(char)); + lv[lc] = (char *) malloc(MAX_LINE_LENGTH * sizeof(char)); if ((fgets(lv[lc], MAX_LINE_LENGTH, stdin)) == NULL) { break; } } - qsort(&lv, lc, sizeof(char *), qsort_strcmp); + qsort(lv, lc, sizeof(char *), qsort_strcmp); - for (i = 0; i < lc; i++) { - fputs(lv[i], stdout); + for (li = 0; li < lc; li++) { + fputs(lv[li], stdout); } exit(EXIT_SUCCESS); |