| Update order-directories-by-date.patch after hackathon. - geomyidae - A small C… | |
| git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfri… | |
| Log | |
| Files | |
| Refs | |
| Tags | |
| README | |
| LICENSE | |
| --- | |
| commit 3e0c38b22b9608dcd54fe36c8e01710454284f14 | |
| parent 4446ff70af5a409a48be074450e790ac36f1824f | |
| Author: Christoph Lohmann <[email protected]> | |
| Date: Thu, 12 Aug 2021 21:35:17 +0200 | |
| Update order-directories-by-date.patch after hackathon. | |
| Thanks for joining the hackathon: | |
| * IanJ | |
| * Evil_Bob | |
| Diffstat: | |
| M patches/order-directories-by-date.… | 104 ++++++++++++++++++---------… | |
| 1 file changed, 60 insertions(+), 44 deletions(-) | |
| --- | |
| diff --git a/patches/order-directories-by-date.patch b/patches/order-directorie… | |
| @@ -1,69 +1,85 @@ | |
| -From 38a2a15d8b803ce5b725a6cb1f2b3ac75ab686c7 Mon Sep 17 00:00:00 2001 | |
| -From: root <[email protected]> | |
| -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 | |
| +index 0c230d3..5f5a767 100644 | |
| --- a/handlr.c | |
| +++ b/handlr.c | |
| -@@ -21,6 +21,33 @@ | |
| +@@ -3,6 +3,7 @@ | |
| + * by 20h | |
| + */ | |
| + | |
| ++#include <limits.h> | |
| + #include <unistd.h> | |
| + #include <memory.h> | |
| + #include <netdb.h> | |
| +@@ -21,13 +22,48 @@ | |
| #include "ind.h" | |
| #include "arg.h" | |
| -+char DIR_PATH[PATH_MAX]; | |
| -+int datesort (const struct dirent **, const struct dirent **); | |
| ++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; | |
| ++ struct stat sbuf1, sbuf2; | |
| ++ char path1[PATH_MAX], path2[PATH_MAX]; | |
| ++ int rv; | |
| ++ | |
| ++ rv = snprintf(path1, sizeof(path1), "%s/%s", dir_path, (*a)->d_name); | |
| ++ if (rv < 0 || (size_t)rv >= sizeof(path1)) { | |
| ++ perror("snprintf"); | |
| ++ return 0; | |
| ++ } | |
| ++ rv = snprintf(path2, sizeof(path2), "%s/%s", dir_path, (*b)->d_name); | |
| ++ if (rv < 0 || (size_t)rv >= sizeof(path2)) { | |
| ++ perror("snprintf"); | |
| ++ return 0; | |
| ++ } | |
| ++ | |
| ++ if (stat(path1, &sbuf1)) { | |
| ++ perror("stat"); | |
| ++ return 0; | |
| ++ } | |
| ++ if (stat(path2, &sbuf2)) { | |
| ++ perror("stat"); | |
| ++ return 0; | |
| ++ } | |
| ++ | |
| ++ return sbuf1.st_mtime < sbuf2.st_mtime ? -1 : sbuf1.st_mtime > sbuf2.… | |
| +} | |
| + | |
| 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, cha… | |
| + { | |
| ++ int (*sortorder) (const struct dirent **, const struct dirent **); | |
| ++ char ds[PATH_MAX]; | |
| + char *pa, *file, *e, *par, *b; | |
| + struct dirent **dirent; | |
| +- int ndir, i, ret = 0; | |
| ++ int ndir, i, ret = 0, rv; | |
| + struct stat st; | |
| + filetype *type; | |
| + | |
| +@@ -48,7 +84,21 @@ handledir(int sock, char *path, char *port, char *base, cha… | |
| } | |
| free(par); | |
| - ndir = scandir(pa[0] ? pa : ".", &dirent, 0, alphasort); | |
| -+ strcpy(DIR_PATH, pa); | |
| ++ rv = snprintf(dir_path, sizeof(dir_path), "%s", pa); | |
| ++ if (rv < 0 || (size_t)rv >= sizeof(dir_path)) { | |
| ++ perror("snprintf"); | |
| ++ return; | |
| ++ } | |
| + | |
| -+ char ds[PATH_MAX]; | |
| -+ strcpy(ds, pa); | |
| -+ strcat(ds, "/.datesort"); | |
| ++ rv = snprintf(ds, sizeof(ds), "%s/.datesort", pa); | |
| ++ if (rv < 0 || (size_t)rv >= sizeof(ds)) { | |
| ++ perror("snprintf"); | |
| ++ return; | |
| ++ } | |
| ++ | |
| ++ sortorder = access(ds, F_OK) != -1 ? datesort : alphasort; | |
| + | |
| -+ 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 | |
| - |