From: Christian Franke Date: Tue, 9 Feb 2010 17:45:02 +0100 Subject: [PATCH] Sort Dir Listing --- httpd.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff --git a/httpd.c b/httpd.c index c4e6fde..cfbe672 100644 --- a/httpd.c +++ b/httpd.c @@ -962,8 +962,8 @@ static void hdl_encode_uri(const char*s,unsigned int sl) { } } static void handledirlist(const char*origurl) { - DIR*dir; - unsigned int nl=str_len(origurl); + struct dirent **entry_list; + unsigned int nl=str_len(origurl), j; const char*nurl=origurl; url=(char*)origurl; while (nurl[0]=='/') ++nurl; @@ -972,9 +972,9 @@ static void handledirlist(const char*origurl) { if (nurl[nl-1]!='/') return; if (!stat(nl?nurl:".",&st) && (S_ISDIR(st.st_mode)) && ((st.st_mode&S_IRWXO)==5)) { if (nl) chdir(nurl); - if (dir=opendir(".")) { + if ((j=scandir(".", &entry_list, 0, alphasort)) >= 0) { struct dirent*de; - unsigned int i,size=32+nl; + unsigned int i,size=32+nl,k; buffer_puts(buffer_1,"HTTP/1.0 200 OK\r\nServer: "FNORD"\r\nConnection: close\r\n"); buffer_puts(buffer_1,"Content-Type: text/html\r\n"); buffer_puts(buffer_1,"\r\n

Directory Listing: /"); @@ -990,7 +990,8 @@ static void handledirlist(const char*origurl) { buffer_puts(buffer_1,"\n"); size+=40+i; } - while(de=readdir(dir)) { + for(k=0;kd_name; unsigned int pl,dl=str_len(de->d_name); @@ -1020,7 +1021,7 @@ static void handledirlist(const char*origurl) { buffer_puts(buffer_1,"\n"); size+=22+(dl<<1); } - closedir(dir); + free(entry_list); buffer_puts(buffer_1,"\n"); buffer_flush(buffer_1); retcode=200; -- 1.6.3.3