iFixing some dir handling. A path does not need to end in '/'. - geomyidae - A small C-based gopherd. Err bitreich.org 70 hgit clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ URL:git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ bitreich.org 70 1Log /scm/geomyidae/log.gph bitreich.org 70 1Files /scm/geomyidae/files.gph bitreich.org 70 1Refs /scm/geomyidae/refs.gph bitreich.org 70 1Tags /scm/geomyidae/tag bitreich.org 70 1README /scm/geomyidae/file/README.gph bitreich.org 70 1LICENSE /scm/geomyidae/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 7b14b6e74778cf0ddb328cf3e049a302be614b36 /scm/geomyidae/commit/7b14b6e74778cf0ddb328cf3e049a302be614b36.gph bitreich.org 70 1parent 5be8d044ed4e832c4c6a6b7f748b81a30695dc39 /scm/geomyidae/commit/5be8d044ed4e832c4c6a6b7f748b81a30695dc39.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Wed, 4 Jan 2017 21:54:49 +0100 Err bitreich.org 70 i Err bitreich.org 70 iFixing some dir handling. A path does not need to end in '/'. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M handlr.c | 67 +++++++++++++++---------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 33 insertions(+), 34 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/handlr.c b/handlr.c /scm/geomyidae/file/handlr.c.gph bitreich.org 70 i@@ -33,46 +33,45 @@ handledir(int sock, char *path, char *port, char *base, char *args, Err bitreich.org 70 i USED(sear); Err bitreich.org 70 i Err bitreich.org 70 i pa = gstrdup(path); Err bitreich.org 70 i- e = strrchr(pa, '/'); Err bitreich.org 70 i- if(e != nil) { Err bitreich.org 70 i+ e = pa + strlen(pa) - 1; Err bitreich.org 70 i+ if(e[0] == '/') Err bitreich.org 70 i *e = '\0'; Err bitreich.org 70 i Err bitreich.org 70 i- par = gstrdup(pa); Err bitreich.org 70 i- b = strrchr(par + strlen(base), '/'); Err bitreich.org 70 i- if(b != nil) { Err bitreich.org 70 i- *b = '\0'; Err bitreich.org 70 i- tprintf(sock, "1..\t%s\t%s\t%s\r\n", Err bitreich.org 70 i- par + strlen(base), ohost, port); Err bitreich.org 70 i- } Err bitreich.org 70 i- free(par); Err bitreich.org 70 i- Err bitreich.org 70 i- ndir = scandir(pa, &dirent, 0, alphasort); Err bitreich.org 70 i- if(ndir < 0) { Err bitreich.org 70 i- perror("scandir"); Err bitreich.org 70 i- free(pa); Err bitreich.org 70 i- return; Err bitreich.org 70 i- } else { Err bitreich.org 70 i- for(i = 0; i < ndir; i++) { Err bitreich.org 70 i- if(dirent[i]->d_name[0] == '.') { Err bitreich.org 70 i- free(dirent[i]); Err bitreich.org 70 i- continue; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- type = gettype(dirent[i]->d_name); Err bitreich.org 70 i- file = smprintf("%s/%s", pa, Err bitreich.org 70 i- dirent[i]->d_name); Err bitreich.org 70 i- if(stat(file, &st) >= 0 && S_ISDIR(st.st_mode)) Err bitreich.org 70 i- type = gettype("index.gph"); Err bitreich.org 70 i- e = file + strlen(base); Err bitreich.org 70 i- tprintf(sock, "%c%s\t%s\t%s\t%s\r\n", *type->type, Err bitreich.org 70 i- dirent[i]->d_name, e, ohost, port); Err bitreich.org 70 i- free(file); Err bitreich.org 70 i+ par = gstrdup(pa); Err bitreich.org 70 i+ b = strrchr(par + strlen(base), '/'); Err bitreich.org 70 i+ if(b != nil) { Err bitreich.org 70 i+ *b = '\0'; Err bitreich.org 70 i+ tprintf(sock, "1..\t%s\t%s\t%s\r\n", Err bitreich.org 70 i+ par + strlen(base), ohost, port); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ free(par); Err bitreich.org 70 i+ Err bitreich.org 70 i+ ndir = scandir(pa, &dirent, 0, alphasort); Err bitreich.org 70 i+ if(ndir < 0) { Err bitreich.org 70 i+ perror("scandir"); Err bitreich.org 70 i+ free(pa); Err bitreich.org 70 i+ return; Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ for(i = 0; i < ndir; i++) { Err bitreich.org 70 i+ if(dirent[i]->d_name[0] == '.') { Err bitreich.org 70 i free(dirent[i]); Err bitreich.org 70 i+ continue; Err bitreich.org 70 i } Err bitreich.org 70 i- free(dirent); Err bitreich.org 70 i+ Err bitreich.org 70 i+ type = gettype(dirent[i]->d_name); Err bitreich.org 70 i+ file = smprintf("%s/%s", pa, Err bitreich.org 70 i+ dirent[i]->d_name); Err bitreich.org 70 i+ if(stat(file, &st) >= 0 && S_ISDIR(st.st_mode)) Err bitreich.org 70 i+ type = gettype("index.gph"); Err bitreich.org 70 i+ e = file + strlen(base); Err bitreich.org 70 i+ tprintf(sock, "%c%s\t%s\t%s\t%s\r\n", *type->type, Err bitreich.org 70 i+ dirent[i]->d_name, e, ohost, port); Err bitreich.org 70 i+ free(file); Err bitreich.org 70 i+ free(dirent[i]); Err bitreich.org 70 i } Err bitreich.org 70 i- tprintf(sock, ".\r\n"); Err bitreich.org 70 i+ free(dirent); Err bitreich.org 70 i } Err bitreich.org 70 i+ tprintf(sock, ".\r\n"); Err bitreich.org 70 i Err bitreich.org 70 i free(pa); Err bitreich.org 70 i } Err bitreich.org 70 .