X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/8a82274bc46151a6b10fb621c3e2d5d12722a5e2..e7eb3a2744aa45179daea235800753d3d1955338:/cgi/macros-disorder.c diff --git a/cgi/macros-disorder.c b/cgi/macros-disorder.c index 88d1701..cd00f50 100644 --- a/cgi/macros-disorder.c +++ b/cgi/macros-disorder.c @@ -1,22 +1,19 @@ - /* * This file is part of DisOrder. * Copyright (C) 2004-2008 Richard Kettlewell * - * This program is free software; you can redistribute it and/or modify + * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * along with this program. If not, see . */ /** @file server/macros-disorder.c * @brief DisOrder-specific expansions @@ -814,15 +811,6 @@ static int exp_image(int attribute((unused)) nargs, return sink_writes(output, cgi_sgmlquote(url)) < 0 ? -1 : 0; } -/** @brief Compare two @ref entry objects */ -int dcgi_compare_entry(const void *a, const void *b) { - const struct dcgi_entry *ea = a, *eb = b; - - return compare_tracks(ea->sort, eb->sort, - ea->display, eb->display, - ea->track, eb->track); -} - /** @brief Implementation of exp_tracks() and exp_dirs() */ static int exp__files_dirs(int nargs, const struct mx_node **args, @@ -837,7 +825,7 @@ static int exp__files_dirs(int nargs, char **tracks, *dir, *re; int n, ntracks, rc; const struct mx_node *m; - struct dcgi_entry *e; + struct tracksort_data *tsd; if((rc = mx_expandstr(args[0], &dir, u, "argument #0 (DIR)"))) return rc; @@ -855,25 +843,18 @@ static int exp__files_dirs(int nargs, if(fn(dcgi_client, dir, re, &tracks, &ntracks)) return 0; /* Sort it. NB trackname_transform() does not go to the server. */ - e = xcalloc(ntracks, sizeof *e); - for(n = 0; n < ntracks; ++n) { - e->track = tracks[n]; - e[n].track = tracks[n]; - e[n].sort = trackname_transform(type, tracks[n], "sort"); - e[n].display = trackname_transform(type, tracks[n], "display"); - } - qsort(e, ntracks, sizeof (struct dcgi_entry), dcgi_compare_entry); + tsd = tracksort_init(ntracks, tracks, type); /* Expand the subsiduary templates. We chuck in @sort and @display because * it is particularly easy to do so. */ for(n = 0; n < ntracks; ++n) if((rc = mx_expand(mx_rewritel(m, "index", make_index(n), "parity", n % 2 ? "odd" : "even", - "track", tracks[n], + "track", tsd[n].track, "first", n == 0 ? "true" : "false", "last", n + 1 == ntracks ? "false" : "true", - "sort", e[n].sort, - "display", e[n].display, + "sort", tsd[n].sort, + "display", tsd[n].display, (char *)0), output, u))) return rc;