-/* $Id: cgi.c,v 1.21 2014/07/24 08:25:45 schwarze Exp $ */
+/* $Id: cgi.c,v 1.22 2014/07/24 20:30:38 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014 Ingo Schwarze <schwarze@usta.de>
};
static void catman(const struct req *, const char *);
-static int cmp(const void *, const void *);
static void format(const struct req *, const char *);
static void html_print(const char *);
static void html_printquery(const struct req *);
return;
}
- qsort(r, sz, sizeof(struct manpage), cmp);
-
resp_begin_html(200, NULL);
resp_searchform(req);
puts("<DIV CLASS=\"results\">");
return(EXIT_SUCCESS);
}
-static int
-cmp(const void *p1, const void *p2)
-{
-
- return(strcasecmp(((const struct manpage *)p1)->names,
- ((const struct manpage *)p2)->names));
-}
-
/*
* Scan for indexable paths.
*/
-/* $Id: mansearch.c,v 1.28 2014/07/12 13:59:54 schwarze Exp $ */
+/* $Id: mansearch.c,v 1.29 2014/07/24 20:30:38 schwarze Exp $ */
/*
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
static struct expr *exprspec(struct expr *, uint64_t,
const char *, const char *);
static struct expr *exprterm(const struct mansearch *, char *, int);
+static int manpage_compare(const void *, const void *);
static void sql_append(char **sql, size_t *sz,
const char *newstr, int count);
static void sql_match(sqlite3_context *context,
maxres, sizeof(struct manpage));
}
mpage = *res + cur;
+ mpage->sec = 10;
mpage->form = mp->form;
buildnames(mpage, db, s, mp->pageid,
paths->paths[i], mp->form);
sqlite3_close(db);
ohash_delete(&htab);
}
+ qsort(*res, cur, sizeof(struct manpage), manpage_compare);
rc = 1;
out:
if (-1 != fd) {
return(rc);
}
+static int
+manpage_compare(const void *vp1, const void *vp2)
+{
+ const struct manpage *mp1, *mp2;
+ int diff;
+
+ mp1 = vp1;
+ mp2 = vp2;
+ diff = mp1->sec - mp2->sec;
+ return(diff ? diff : strcasecmp(mp1->names, mp2->names));
+}
+
static void
buildnames(struct manpage *mpage, sqlite3 *db, sqlite3_stmt *s,
uint64_t pageid, const char *path, int form)
arch = sqlite3_column_text(s, 1);
name = sqlite3_column_text(s, 2);
+ /* Remember the first section found. */
+
+ if (9 < mpage->sec && '1' <= *sec && '9' >= *sec)
+ mpage->sec = (*sec - '1') + 1;
+
/* If the section changed, append the old one. */
if (NULL != prevsec &&
-/* $Id: mansearch.h,v 1.10 2014/07/12 13:59:54 schwarze Exp $ */
+/* $Id: mansearch.h,v 1.11 2014/07/24 20:30:38 schwarze Exp $ */
/*
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
char *file; /* to be prefixed by manpath */
char *names; /* a list of names with sections */
char *output; /* user-defined additional output */
+ int sec; /* section number, 10 means invalid */
int form; /* 0 == catpage */
};