Module Name:    src
Committed By:   abhinav
Date:           Sat Nov 25 14:29:38 UTC 2017

Modified Files:
        src/usr.sbin/makemandb: apropos-utils.c apropos-utils.h apropos.c

Log Message:
Encapsulate all the arguments required by the query callback function in a 
struct.

If we want to add or remove arguments from the callback functions, it requires
changing the callback interface all over the place. By letting the callback 
simply
expect a single struct argument, it would clean things up a bit.

ok christos


To generate a diff of this commit:
cvs rdiff -u -r1.39 -r1.40 src/usr.sbin/makemandb/apropos-utils.c
cvs rdiff -u -r1.13 -r1.14 src/usr.sbin/makemandb/apropos-utils.h
cvs rdiff -u -r1.23 -r1.24 src/usr.sbin/makemandb/apropos.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/makemandb/apropos-utils.c
diff -u src/usr.sbin/makemandb/apropos-utils.c:1.39 src/usr.sbin/makemandb/apropos-utils.c:1.40
--- src/usr.sbin/makemandb/apropos-utils.c:1.39	Tue Aug  1 16:16:32 2017
+++ src/usr.sbin/makemandb/apropos-utils.c	Sat Nov 25 14:29:38 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: apropos-utils.c,v 1.39 2017/08/01 16:16:32 abhinav Exp $	*/
+/*	$NetBSD: apropos-utils.c,v 1.40 2017/11/25 14:29:38 abhinav Exp $	*/
 /*-
  * Copyright (c) 2011 Abhinav Upadhyay <er.abhinav.upadh...@gmail.com>
  * All rights reserved.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: apropos-utils.c,v 1.39 2017/08/01 16:16:32 abhinav Exp $");
+__RCSID("$NetBSD: apropos-utils.c,v 1.40 2017/11/25 14:29:38 abhinav Exp $");
 
 #include <sys/queue.h>
 #include <sys/stat.h>
@@ -56,8 +56,7 @@ __RCSID("$NetBSD: apropos-utils.c,v 1.39
 
 typedef struct orig_callback_data {
 	void *data;
-	int (*callback) (void *, const char *, const char *, const char *,
-		const char *, size_t);
+	int (*callback) (query_callback_args*);
 } orig_callback_data;
 
 typedef struct inverse_document_frequency {
@@ -657,15 +656,12 @@ static unsigned int
 execute_search_query(sqlite3 *db, char *query, query_args *args)
 {
 	sqlite3_stmt *stmt;
-	const char *section;
 	char *name;
 	char *slash_ptr;
-	const char *name_desc;
-	const char *machine;
-	const char *snippet = "";
 	const char *name_temp;
 	char *m = NULL;
 	int rc;
+	query_callback_args callback_args;
 	inverse_document_frequency idf = {0, 0};
 
 	if (!args->legacy) {
@@ -693,25 +689,27 @@ execute_search_query(sqlite3 *db, char *
 	unsigned int nresults = 0;
 	while (sqlite3_step(stmt) == SQLITE_ROW) {
 		nresults++;
-		section = (const char *) sqlite3_column_text(stmt, 0);
+		callback_args.section = (const char *) sqlite3_column_text(stmt, 0);
 		name_temp = (const char *) sqlite3_column_text(stmt, 1);
-		name_desc = (const char *) sqlite3_column_text(stmt, 2);
-		machine = (const char *) sqlite3_column_text(stmt, 3);
+		callback_args.name_desc = (const char *) sqlite3_column_text(stmt, 2);
+		callback_args.machine = (const char *) sqlite3_column_text(stmt, 3);
 		if (!args->legacy)
-			snippet = (const char *) sqlite3_column_text(stmt, 4);
+			callback_args.snippet = (const char *) sqlite3_column_text(stmt, 4);
+		else
+			callback_args.snippet = "";
 		if ((slash_ptr = strrchr(name_temp, '/')) != NULL)
 			name_temp = slash_ptr + 1;
-		if (machine && machine[0]) {
-			m = estrdup(machine);
+		if (callback_args.machine && callback_args.machine[0]) {
+			m = estrdup(callback_args.machine);
 			easprintf(&name, "%s/%s", lower(m), name_temp);
 			free(m);
 		} else {
 			name = estrdup((const char *)
 			    sqlite3_column_text(stmt, 1));
 		}
-
-		(args->callback)(args->callback_data, section, name,
-		    name_desc, snippet, args->legacy? 0: strlen(snippet));
+		callback_args.name = name;
+		callback_args.other_data = args->callback_data;
+		(args->callback)(&callback_args);
 		free(name);
 	}
 	sqlite3_finalize(stmt);
@@ -818,20 +816,20 @@ get_escaped_html_string(const char *src,
  *  calls the actual user supplied callback function.
  */
 static int
-callback_html(void *data, const char *section, const char *name,
-    const char *name_desc, const char *snippet, size_t snippet_length)
+callback_html(query_callback_args *callback_args)
 {
-	struct orig_callback_data *orig_data = data;
-	int (*callback)(void *, const char *, const char *, const char *,
-	    const char *, size_t) = orig_data->callback;
-	size_t length = snippet_length;
-	size_t name_description_length = strlen(name_desc);
-	char *qsnippet = get_escaped_html_string(snippet, &length);
-	char *qname_description = get_escaped_html_string(name_desc,
+	struct orig_callback_data *orig_data = callback_args->other_data;
+	int (*callback)(query_callback_args*) = orig_data->callback;
+	size_t length = callback_args->snippet_length;
+	size_t name_description_length = strlen(callback_args->name_desc);
+	char *qsnippet = get_escaped_html_string(callback_args->snippet, &length);
+	char *qname_description = get_escaped_html_string(callback_args->name_desc,
 	    &name_description_length);
-
-	(*callback)(orig_data->data, section, name, qname_description,
-	    qsnippet, length);
+	callback_args->name_desc = qname_description;
+	callback_args->snippet = qsnippet;
+	callback_args->snippet_length = length;
+	callback_args->other_data = orig_data->data;
+	(*callback)(callback_args);
 	free(qsnippet);
 	free(qname_description);
 	return 0;
@@ -889,12 +887,11 @@ ul_pager(int ul, const char *s)
  *  more or less.
  */
 static int
-callback_pager(void *data, const char *section, const char *name,
-	const char *name_desc, const char *snippet, size_t snippet_length)
+callback_pager(query_callback_args *callback_args)
 {
-	struct orig_callback_data *orig_data = data;
+	struct orig_callback_data *orig_data = callback_args->other_data;
 	char *psnippet;
-	const char *temp = snippet;
+	const char *temp = callback_args->snippet;
 	int count = 0;
 	int i = 0, did;
 	size_t sz = 0;
@@ -913,7 +910,7 @@ callback_pager(void *data, const char *s
 		temp++;
 	}
 
-	psnippet_length = snippet_length + count;
+	psnippet_length = callback_args->snippet_length + count;
 	psnippet = emalloc(psnippet_length + 1);
 
 	/* Copy the bytes from snippet to psnippet:
@@ -923,6 +920,7 @@ callback_pager(void *data, const char *s
 	 * 3. To overstrike a byte 'A' we need to write 'A\bA'
 	 */
 	did = 0;
+	const char *snippet = callback_args->snippet;
 	while (*snippet) {
 		sz = strcspn(snippet, "\002");
 		memcpy(&psnippet[i], snippet, sz);
@@ -945,11 +943,16 @@ callback_pager(void *data, const char *s
 	}
 
 	psnippet[i] = 0;
-	char *ul_section = ul_pager(did, section);
-	char *ul_name = ul_pager(did, name);
-	char *ul_name_desc = ul_pager(did, name_desc);
-	(orig_data->callback)(orig_data->data, ul_section, ul_name,
-	    ul_name_desc, psnippet, psnippet_length);
+	char *ul_section = ul_pager(did, callback_args->section);
+	char *ul_name = ul_pager(did, callback_args->name);
+	char *ul_name_desc = ul_pager(did, callback_args->name_desc);
+	callback_args->section = ul_section;
+	callback_args->name = ul_name;
+	callback_args->name_desc = ul_name_desc;
+	callback_args->snippet = psnippet;
+	callback_args->snippet_length = psnippet_length;
+	callback_args->other_data = orig_data->data;
+	(orig_data->callback)(callback_args);
 	free(ul_section);
 	free(ul_name);
 	free(ul_name_desc);
@@ -982,17 +985,19 @@ ul_term(const char *s, const struct term
  *  more or less.
  */
 static int
-callback_term(void *data, const char *section, const char *name,
-	const char *name_desc, const char *snippet, size_t snippet_length)
+callback_term(query_callback_args *callback_args)
 {
-	struct term_args *ta = data;
+	struct term_args *ta = callback_args->other_data;
 	struct orig_callback_data *orig_data = ta->orig_data;
 
-	char *ul_section = ul_term(section, ta);
-	char *ul_name = ul_term(name, ta);
-	char *ul_name_desc = ul_term(name_desc, ta);
-	(orig_data->callback)(orig_data->data, ul_section, ul_name,
-	    ul_name_desc, snippet, snippet_length);
+	char *ul_section = ul_term(callback_args->section, ta);
+	char *ul_name = ul_term(callback_args->name, ta);
+	char *ul_name_desc = ul_term(callback_args->name_desc, ta);
+	callback_args->section = ul_section;
+	callback_args->name = ul_name;
+	callback_args->name_desc = ul_name_desc;
+	callback_args->other_data = orig_data->data;
+	(orig_data->callback)(callback_args);
 	free(ul_section);
 	free(ul_name);
 	free(ul_name_desc);

Index: src/usr.sbin/makemandb/apropos-utils.h
diff -u src/usr.sbin/makemandb/apropos-utils.h:1.13 src/usr.sbin/makemandb/apropos-utils.h:1.14
--- src/usr.sbin/makemandb/apropos-utils.h:1.13	Sun Jun 18 16:24:10 2017
+++ src/usr.sbin/makemandb/apropos-utils.h	Sat Nov 25 14:29:38 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: apropos-utils.h,v 1.13 2017/06/18 16:24:10 abhinav Exp $	*/
+/*	$NetBSD: apropos-utils.h,v 1.14 2017/11/25 14:29:38 abhinav Exp $	*/
 /*-
  * Copyright (c) 2011 Abhinav Upadhyay <er.abhinav.upadh...@gmail.com>
  * All rights reserved.
@@ -71,6 +71,16 @@ enum man_sec {
 	MANSEC_NONE
 };
 
+typedef struct query_callback_args {
+	const char *name;
+	const char *section;
+	const char *machine;
+	const char *name_desc;
+	const char *snippet;
+	size_t snippet_length;
+	void *other_data;
+} query_callback_args;
+
 typedef struct query_args {
 	const char *search_str;		// user query
 	char **sections;		// Sections in which to do the search
@@ -78,12 +88,12 @@ typedef struct query_args {
 	int offset;		//From which position to start processing the records
 	int legacy;
 	const char *machine;
-	int (*callback) (void *, const char *, const char *, const char *,
-		const char *, size_t);	// The callback function
+	int (*callback) (query_callback_args *);
 	void *callback_data;	// data to pass to the callback function
 	char **errmsg;		// buffer for storing the error msg
 } query_args;
 
+
 typedef enum query_format {
     APROPOS_NONE,
     APROPOS_PAGER,

Index: src/usr.sbin/makemandb/apropos.c
diff -u src/usr.sbin/makemandb/apropos.c:1.23 src/usr.sbin/makemandb/apropos.c:1.24
--- src/usr.sbin/makemandb/apropos.c:1.23	Wed Aug  2 12:52:18 2017
+++ src/usr.sbin/makemandb/apropos.c	Sat Nov 25 14:29:38 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: apropos.c,v 1.23 2017/08/02 12:52:18 jmcneill Exp $	*/
+/*	$NetBSD: apropos.c,v 1.24 2017/11/25 14:29:38 abhinav Exp $	*/
 /*-
  * Copyright (c) 2011 Abhinav Upadhyay <er.abhinav.upadh...@gmail.com>
  * All rights reserved.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: apropos.c,v 1.23 2017/08/02 12:52:18 jmcneill Exp $");
+__RCSID("$NetBSD: apropos.c,v 1.24 2017/11/25 14:29:38 abhinav Exp $");
 
 #include <err.h>
 #include <stdio.h>
@@ -60,8 +60,7 @@ typedef struct callback_data {
 } callback_data;
 
 static char *remove_stopwords(const char *);
-static int query_callback(void *, const char * , const char *, const char *,
-	const char *, size_t);
+static int query_callback(query_callback_args *);
 __dead static void usage(void);
 
 #define _PATH_PAGER	"/usr/bin/more -s"
@@ -286,22 +285,21 @@ main(int argc, char *argv[])
  *  output stream.
  */
 static int
-query_callback(void *data, const char *section, const char *name,
-	const char *name_desc, const char *snippet, size_t snippet_length)
+query_callback(query_callback_args *qargs)
 {
-	callback_data *cbdata = (callback_data *) data;
+	callback_data *cbdata = (callback_data *) qargs->other_data;
 	FILE *out = cbdata->out;
 	cbdata->count++;
 	if (cbdata->aflags->format != APROPOS_HTML) {
 	    fprintf(out, cbdata->aflags->legacy ? "%s(%s) - %s\n" :
-		"%s (%s)\t%s\n", name, section, name_desc);
+		"%s (%s)\t%s\n", qargs->name, qargs->section, qargs->name_desc);
 	    if (cbdata->aflags->no_context == 0)
-		    fprintf(out, "%s\n\n", snippet);
+		    fprintf(out, "%s\n\n", qargs->snippet);
 	} else {
-	    fprintf(out, "<tr><td>%s(%s)</td><td>%s</td></tr>\n", name,
-		section, name_desc);
+	    fprintf(out, "<tr><td>%s(%s)</td><td>%s</td></tr>\n", qargs->name,
+		qargs->section, qargs->name_desc);
 	    if (cbdata->aflags->no_context == 0)
-		    fprintf(out, "<tr><td colspan=2>%s</td></tr>\n", snippet);
+		    fprintf(out, "<tr><td colspan=2>%s</td></tr>\n", qargs->snippet);
 	}
 
 	return 0;

Reply via email to