geomyidae

A small C-based gopherd. (gopher://bitreich.org/1/scm/geomyidae)
git clone git://r-36.net/geomyidae
Log | Files | Refs | README | LICENSE

commit c62c2fe3b1ab53fca1df7f14f6256c84c6276f73
parent 3401df4e6802a68dd34581ae0de6b7e34f45ea12
Author: Christoph Lohmann <20h@r-36.net>
Date:   Fri,  6 Aug 2021 22:48:20 +0200

Add patch to allow directory sort by date.

Thanks IanJ for sending it in!

Diffstat:
patches/order-directories-by-date.patch | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 69 insertions(+), 0 deletions(-)

diff --git a/patches/order-directories-by-date.patch b/patches/order-directories-by-date.patch @@ -0,0 +1,69 @@ +From 38a2a15d8b803ce5b725a6cb1f2b3ac75ab686c7 Mon Sep 17 00:00:00 2001 +From: root <ian@contractcoder.biz> +Date: Fri, 6 Aug 2021 20:09:46 +0100 +Subject: [PATCH] Modification to allow directories to be ordered by date by + adding a file named .datesort to the directory. + +--- + handlr.c | 38 +++++++++++++++++++++++++++++++++++++- + 1 file changed, 37 insertions(+), 1 deletion(-) + +diff --git a/handlr.c b/handlr.c +index 0c230d3..e2e35a8 100644 +--- a/handlr.c ++++ b/handlr.c +@@ -21,6 +21,33 @@ + #include "ind.h" + #include "arg.h" + ++char DIR_PATH[PATH_MAX]; ++int datesort (const struct dirent **, const struct dirent **); ++ ++int ++datesort(const struct dirent **a, const struct dirent **b) ++{ ++ int rval; ++ struct stat sbuf1, sbuf2; ++ char path1[PATH_MAX], path2[PATH_MAX]; ++ ++ snprintf(path1, PATH_MAX, "%s/%s", DIR_PATH, (*a)->d_name); ++ snprintf(path2, PATH_MAX, "%s/%s", DIR_PATH, (*b)->d_name); ++ ++ rval = stat(path1, &sbuf1); ++ if (rval) { ++ perror("stat"); ++ return 0; ++ } ++ rval = stat(path2, &sbuf2); ++ if (rval) { ++ perror("stat"); ++ return 0; ++ } ++ ++ return sbuf1.st_mtime < sbuf2.st_mtime; ++} ++ + void + handledir(int sock, char *path, char *port, char *base, char *args, + char *sear, char *ohost, char *chost, int istls) +@@ -48,7 +75,16 @@ handledir(int sock, char *path, char *port, char *base, char *args, + } + free(par); + +- ndir = scandir(pa[0] ? pa : ".", &dirent, 0, alphasort); ++ strcpy(DIR_PATH, pa); ++ ++ char ds[PATH_MAX]; ++ strcpy(ds, pa); ++ strcat(ds, "/.datesort"); ++ ++ int (*sortorder) (const struct dirent **, const struct dirent **) =\ ++ (access(ds, F_OK) != -1) ? datesort : alphasort; ++ ++ ndir = scandir(pa[0] ? pa : ".", &dirent, 0, sortorder); + if (ndir < 0) { + perror("scandir"); + free(pa); +-- +2.20.1 +