* mdocml: Make apropos results-gathering able to error out and clean up
@ 2011-10-09 10:46 kristaps
0 siblings, 0 replies; only message in thread
From: kristaps @ 2011-10-09 10:46 UTC (permalink / raw)
To: source
Log Message:
-----------
Make apropos results-gathering able to error out and clean up before
making the utility exit non-zero.
Modified Files:
--------------
mdocml:
apropos.c
Revision Data
-------------
Index: apropos.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/apropos.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -Lapropos.c -Lapropos.c -u -p -r1.6 -r1.7
--- apropos.c
+++ apropos.c
@@ -152,7 +152,7 @@ static int sort_title(const void *, con
static int state_getrecord(struct state *,
recno_t, struct rec *);
static void state_output(const struct res *, int);
-static void state_search(struct state *,
+static int state_search(struct state *,
const struct opts *, char *);
static void usage(void);
@@ -275,9 +275,8 @@ main(int argc, char *argv[])
/* Main search function. */
- state_search(&state, &opts, q);
-
- rc = EXIT_SUCCESS;
+ rc = state_search(&state, &opts, q) ?
+ EXIT_SUCCESS : EXIT_FAILURE;
out:
if (state.db)
(*state.db->close)(state.db);
@@ -287,10 +286,10 @@ out:
return(rc);
}
-static void
+static int
state_search(struct state *p, const struct opts *opts, char *q)
{
- int leaf, root, len, ch, dflag;
+ int leaf, root, len, ch, dflag, rc;
struct mchars *mc;
char *buf;
size_t bufsz;
@@ -303,6 +302,7 @@ state_search(struct state *p, const stru
char filebuf[10];
struct rec record;
+ rc = 0;
root = leaf = -1;
res = NULL;
len = 0;
@@ -322,7 +322,7 @@ state_search(struct state *p, const stru
if (0 != regcomp(®, q, ch)) {
fprintf(stderr, "%s: Bad pattern\n", q);
- return;
+ return(0);
}
regp = ®
@@ -358,8 +358,8 @@ state_search(struct state *p, const stru
*/
if (key.size < 2 || 8 != val.size) {
- fprintf(stderr, "%s: Corrupt database\n", p->dbf);
- exit(EXIT_FAILURE);
+ fprintf(stderr, "%s: Bad database\n", p->dbf);
+ goto out;
}
buf_redup(mc, &buf, &bufsz, (char *)key.data);
@@ -396,7 +396,7 @@ state_search(struct state *p, const stru
memcpy(&rec, val.data + 4, sizeof(recno_t));
if ( ! state_getrecord(p, rec, &record))
- exit(EXIT_FAILURE);
+ goto out;
/* If we're in a different section, skip... */
@@ -456,12 +456,11 @@ state_search(struct state *p, const stru
len++;
}
-send:
if (ch < 0) {
perror(p->dbf);
- exit(EXIT_FAILURE);
+ goto out;
}
-
+send:
/* Sort our results. */
if (SORT_CAT == opts->sort)
@@ -470,7 +469,8 @@ send:
qsort(res, len, sizeof(struct res), sort_title);
state_output(res, len);
-
+ rc = 1;
+out:
for (len-- ; len >= 0; len--) {
free(res[len].keyword);
free(res[len].title);
@@ -486,6 +486,8 @@ send:
if (regp)
regfree(regp);
+
+ return(rc);
}
/*
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2011-10-09 10:46 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-10-09 10:46 mdocml: Make apropos results-gathering able to error out and clean up kristaps
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).