From f72cf7571d996ecf062df7e7a13c7b15ecef5324 Mon Sep 17 00:00:00 2001 From: Nishi Date: Sat, 14 Sep 2024 16:33:59 +0000 Subject: [PATCH] sort stuff git-svn-id: file:///raid/svn-personal/tewi/trunk@29 8739d7e6-ffea-ec47-b151-bdff447c6205 --- Server/server.c | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/Server/server.c b/Server/server.c index b885aab..a3f67fd 100644 --- a/Server/server.c +++ b/Server/server.c @@ -486,22 +486,31 @@ void tw_server_pass(int sock, bool ssl, int port, SOCKADDR addr) { addstring(&str, " Size\n"); addstring(&str, " \n"); if(items != NULL) { + int phase = 0; + doit: for(i = 0; items[i] != NULL; i++) { char* fpth = cm_strcat3(path, "/", items[i]); struct stat s; char size[512]; size[0] = 0; stat(fpth, &s); - if(s.st_size < 1024ULL){ + if(phase == 0 && !S_ISDIR(s.st_mode)) { + free(fpth); + continue; + } else if(phase == 1 && S_ISDIR(s.st_mode)) { + free(fpth); + continue; + } + if(s.st_size < 1024ULL) { sprintf(size, "%d", s.st_size); - }else if(s.st_size < 1024ULL * 1024){ - sprintf(size, "%.1f K", (double)s.st_size / 1024); - }else if(s.st_size < 1024ULL * 1024 * 1024){ - sprintf(size, "%.1f M", (double)s.st_size / 1024 / 1024); - }else if(s.st_size < 1024ULL * 1024 * 1024 * 1024){ - sprintf(size, "%.1f G", (double)s.st_size / 1024 / 1024 / 1024); - }else if(s.st_size < 1024ULL * 1024 * 1024 * 1024 * 1024){ - sprintf(size, "%.1f T", (double)s.st_size / 1024 / 1024 / 1024 / 1024); + } else if(s.st_size < 1024ULL * 1024) { + sprintf(size, "%.1fK", (double)s.st_size / 1024); + } else if(s.st_size < 1024ULL * 1024 * 1024) { + sprintf(size, "%.1fM", (double)s.st_size / 1024 / 1024); + } else if(s.st_size < 1024ULL * 1024 * 1024 * 1024) { + sprintf(size, "%.1fG", (double)s.st_size / 1024 / 1024 / 1024); + } else if(s.st_size < 1024ULL * 1024 * 1024 * 1024 * 1024) { + sprintf(size, "%.1fT", (double)s.st_size / 1024 / 1024 / 1024 / 1024); } free(fpth); @@ -520,9 +529,11 @@ void tw_server_pass(int sock, bool ssl, int port, SOCKADDR addr) { char* mime = tw_get_mime(ext, vhost_entry); if(strcmp(items[i], "../") == 0) { mime = "misc/parent"; + size[0] = 0; } else if(items[i][strlen(items[i]) - 1] == '/') { mime = "misc/dir"; - }else{ + size[0] = 0; + } else { showmime = mime; } char* icon = tw_get_icon(mime, vhost_entry); @@ -545,11 +556,15 @@ void tw_server_pass(int sock, bool ssl, int port, SOCKADDR addr) { addstring(&str, "\n"); addstring(&str, " \"icon\"\n", icon); addstring(&str, " %h\n", items[i], itm); - addstring(&str, " %h\n", showmime); - addstring(&str, " %s\n", size); + addstring(&str, "   %h  \n", showmime); + addstring(&str, "   %s  \n", size); addstring(&str, "\n"); free(itm); } + phase++; + if(phase != 2) goto doit; + for(i = 0; items[i] != NULL; i++) free(items[i]); + free(items); } addstring(&str, " \n"); addstring(&str, "
\n");