From 182090801f06fca94643ff1009a665d09e44a549 Mon Sep 17 00:00:00 2001 From: Ruthenic Date: Wed, 26 Jan 2022 21:13:40 -0500 Subject: [PATCH] `ls`: unbreak things heavily. --- src/ls.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/ls.c b/src/ls.c index 4a0284d..93f31c6 100644 --- a/src/ls.c +++ b/src/ls.c @@ -55,7 +55,7 @@ Available arguments: }*/ static int cmp(const void *a, const void *b) { - return strcmp(*(char **)a, *(char **)b); + return strcmp(*(char * const *)a, *(char * const *)b); } static int listDirs(char *thatpath, bool specpath, bool colour, bool showdot, @@ -80,23 +80,29 @@ static int listDirs(char *thatpath, bool specpath, bool colour, bool showdot, printf("couldn't open '%s'. perhaps the path doesn't exist?\n", wd); return 1; } - int relen = sizeof(char); - char **words = malloc(relen); + int n=0; + while ((dp = readdir(dirp)) != NULL) { + if (!startsWithChar(dp->d_name, '.') || showdot == true) { + n++; + } + } + printf("%i\n",n); + rewinddir(dirp); + char *words[n]; int count = 0; + int length = 0; while ((dp = readdir(dirp)) != NULL) { char *dirname = dp->d_name; if (!startsWithChar(dirname, '.') || showdot == true) { - relen = relen + strlen(dirname) + - 3; // 3 is so fucking arbitrary, but it works - words = realloc(words, relen); - words[count] = malloc(strlen(dirname) + 3); - words[count] = dirname; - count++; + words[count] = (char*)malloc(strlen(dirname)+1); + strncpy(words[count],dirname,strlen(dirname)); + count++; + length+=strlen(dirname)+1; } } free(dirp); free(dp); - qsort(words, count - 1, sizeof(words), cmp); + qsort(words, n, sizeof(char*), cmp); char oldwd[PATH_MAX]; strcpy(oldwd, wd); int currLen = 0; @@ -132,7 +138,6 @@ static int listDirs(char *thatpath, bool specpath, bool colour, bool showdot, } } } - free(words); printf("\n"); return 0; }