iUpdate order-directories-by-date.patch after hackathon. - 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 3e0c38b22b9608dcd54fe36c8e01710454284f14 /scm/geomyidae/commit/3e0c38b22b9608dcd54fe36c8e01710454284f14.gph bitreich.org 70 1parent 4446ff70af5a409a48be074450e790ac36f1824f /scm/geomyidae/commit/4446ff70af5a409a48be074450e790ac36f1824f.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Thu, 12 Aug 2021 21:35:17 +0200 Err bitreich.org 70 i Err bitreich.org 70 iUpdate order-directories-by-date.patch after hackathon. Err bitreich.org 70 i Err bitreich.org 70 iThanks for joining the hackathon: Err bitreich.org 70 i* IanJ Err bitreich.org 70 i* Evil_Bob Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M patches/order-directories-by-date.… | 104 ++++++++++++++++++------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 60 insertions(+), 44 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/patches/order-directories-by-date.patch b/patches/order-directories-by-date.patch /scm/geomyidae/file/patches/order-directories-by-date.patch.gph bitreich.org 70 i@@ -1,69 +1,85 @@ Err bitreich.org 70 i-From 38a2a15d8b803ce5b725a6cb1f2b3ac75ab686c7 Mon Sep 17 00:00:00 2001 Err bitreich.org 70 i-From: root Err bitreich.org 70 i-Date: Fri, 6 Aug 2021 20:09:46 +0100 Err bitreich.org 70 i-Subject: [PATCH] Modification to allow directories to be ordered by date by Err bitreich.org 70 i- adding a file named .datesort to the directory. Err bitreich.org 70 i- Err bitreich.org 70 i---- Err bitreich.org 70 i- handlr.c | 38 +++++++++++++++++++++++++++++++++++++- Err bitreich.org 70 i- 1 file changed, 37 insertions(+), 1 deletion(-) Err bitreich.org 70 i- Err bitreich.org 70 i diff --git a/handlr.c b/handlr.c Err bitreich.org 70 i-index 0c230d3..e2e35a8 100644 Err bitreich.org 70 i+index 0c230d3..5f5a767 100644 Err bitreich.org 70 i --- a/handlr.c Err bitreich.org 70 i +++ b/handlr.c Err bitreich.org 70 i-@@ -21,6 +21,33 @@ Err bitreich.org 70 i+@@ -3,6 +3,7 @@ Err bitreich.org 70 i+ * by 20h Err bitreich.org 70 i+ */ Err bitreich.org 70 i+ Err bitreich.org 70 i++#include Err bitreich.org 70 i+ #include Err bitreich.org 70 i+ #include Err bitreich.org 70 i+ #include Err bitreich.org 70 i+@@ -21,13 +22,48 @@ Err bitreich.org 70 i #include "ind.h" Err bitreich.org 70 i #include "arg.h" Err bitreich.org 70 i Err bitreich.org 70 i-+char DIR_PATH[PATH_MAX]; Err bitreich.org 70 i-+int datesort (const struct dirent **, const struct dirent **); Err bitreich.org 70 i++char dir_path[PATH_MAX]; Err bitreich.org 70 i++int datesort(const struct dirent **, const struct dirent **); Err bitreich.org 70 i + Err bitreich.org 70 i +int Err bitreich.org 70 i +datesort(const struct dirent **a, const struct dirent **b) Err bitreich.org 70 i +{ Err bitreich.org 70 i-+ int rval; Err bitreich.org 70 i-+ struct stat sbuf1, sbuf2; Err bitreich.org 70 i-+ char path1[PATH_MAX], path2[PATH_MAX]; Err bitreich.org 70 i-+ Err bitreich.org 70 i-+ snprintf(path1, PATH_MAX, "%s/%s", DIR_PATH, (*a)->d_name); Err bitreich.org 70 i-+ snprintf(path2, PATH_MAX, "%s/%s", DIR_PATH, (*b)->d_name); Err bitreich.org 70 i-+ Err bitreich.org 70 i-+ rval = stat(path1, &sbuf1); Err bitreich.org 70 i-+ if (rval) { Err bitreich.org 70 i-+ perror("stat"); Err bitreich.org 70 i-+ return 0; Err bitreich.org 70 i-+ } Err bitreich.org 70 i-+ rval = stat(path2, &sbuf2); Err bitreich.org 70 i-+ if (rval) { Err bitreich.org 70 i-+ perror("stat"); Err bitreich.org 70 i-+ return 0; Err bitreich.org 70 i-+ } Err bitreich.org 70 i-+ Err bitreich.org 70 i-+ return sbuf1.st_mtime < sbuf2.st_mtime; Err bitreich.org 70 i++ struct stat sbuf1, sbuf2; Err bitreich.org 70 i++ char path1[PATH_MAX], path2[PATH_MAX]; Err bitreich.org 70 i++ int rv; Err bitreich.org 70 i++ Err bitreich.org 70 i++ rv = snprintf(path1, sizeof(path1), "%s/%s", dir_path, (*a)->d_name); Err bitreich.org 70 i++ if (rv < 0 || (size_t)rv >= sizeof(path1)) { Err bitreich.org 70 i++ perror("snprintf"); Err bitreich.org 70 i++ return 0; Err bitreich.org 70 i++ } Err bitreich.org 70 i++ rv = snprintf(path2, sizeof(path2), "%s/%s", dir_path, (*b)->d_name); Err bitreich.org 70 i++ if (rv < 0 || (size_t)rv >= sizeof(path2)) { Err bitreich.org 70 i++ perror("snprintf"); Err bitreich.org 70 i++ return 0; Err bitreich.org 70 i++ } Err bitreich.org 70 i++ Err bitreich.org 70 i++ if (stat(path1, &sbuf1)) { Err bitreich.org 70 i++ perror("stat"); Err bitreich.org 70 i++ return 0; Err bitreich.org 70 i++ } Err bitreich.org 70 i++ if (stat(path2, &sbuf2)) { Err bitreich.org 70 i++ perror("stat"); Err bitreich.org 70 i++ return 0; Err bitreich.org 70 i++ } Err bitreich.org 70 i++ Err bitreich.org 70 i++ return sbuf1.st_mtime < sbuf2.st_mtime ? -1 : sbuf1.st_mtime > sbuf2.st_mtime; Err bitreich.org 70 i +} Err bitreich.org 70 i + Err bitreich.org 70 i void Err bitreich.org 70 i handledir(int sock, char *path, char *port, char *base, char *args, Err bitreich.org 70 i char *sear, char *ohost, char *chost, int istls) Err bitreich.org 70 i-@@ -48,7 +75,16 @@ handledir(int sock, char *path, char *port, char *base, char *args, Err bitreich.org 70 i+ { Err bitreich.org 70 i++ int (*sortorder) (const struct dirent **, const struct dirent **); Err bitreich.org 70 i++ char ds[PATH_MAX]; Err bitreich.org 70 i+ char *pa, *file, *e, *par, *b; Err bitreich.org 70 i+ struct dirent **dirent; Err bitreich.org 70 i+- int ndir, i, ret = 0; Err bitreich.org 70 i++ int ndir, i, ret = 0, rv; Err bitreich.org 70 i+ struct stat st; Err bitreich.org 70 i+ filetype *type; Err bitreich.org 70 i+ Err bitreich.org 70 i+@@ -48,7 +84,21 @@ handledir(int sock, char *path, char *port, char *base, char *args, 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[0] ? pa : ".", &dirent, 0, alphasort); Err bitreich.org 70 i-+ strcpy(DIR_PATH, pa); Err bitreich.org 70 i++ rv = snprintf(dir_path, sizeof(dir_path), "%s", pa); Err bitreich.org 70 i++ if (rv < 0 || (size_t)rv >= sizeof(dir_path)) { Err bitreich.org 70 i++ perror("snprintf"); Err bitreich.org 70 i++ return; Err bitreich.org 70 i++ } Err bitreich.org 70 i + Err bitreich.org 70 i-+ char ds[PATH_MAX]; Err bitreich.org 70 i-+ strcpy(ds, pa); Err bitreich.org 70 i-+ strcat(ds, "/.datesort"); Err bitreich.org 70 i++ rv = snprintf(ds, sizeof(ds), "%s/.datesort", pa); Err bitreich.org 70 i++ if (rv < 0 || (size_t)rv >= sizeof(ds)) { Err bitreich.org 70 i++ perror("snprintf"); Err bitreich.org 70 i++ return; Err bitreich.org 70 i++ } Err bitreich.org 70 i++ Err bitreich.org 70 i++ sortorder = access(ds, F_OK) != -1 ? datesort : alphasort; Err bitreich.org 70 i + Err bitreich.org 70 i-+ int (*sortorder) (const struct dirent **, const struct dirent **) =\ Err bitreich.org 70 i-+ (access(ds, F_OK) != -1) ? datesort : alphasort; Err bitreich.org 70 i-+ Err bitreich.org 70 i + ndir = scandir(pa[0] ? pa : ".", &dirent, 0, sortorder); 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--- Err bitreich.org 70 i-2.20.1 Err bitreich.org 70 i- Err bitreich.org 70 .