NetBSD Problem Report #51062
From www@NetBSD.org Tue Apr 12 15:35:06 2016
Return-Path: <www@NetBSD.org>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(Client CN "mail.netbsd.org", Issuer "Postmaster NetBSD.org" (verified OK))
by mollari.NetBSD.org (Postfix) with ESMTPS id EED4C7A2AC
for <gnats-bugs@gnats.NetBSD.org>; Tue, 12 Apr 2016 15:35:05 +0000 (UTC)
Message-Id: <20160412153504.14F2C7AA9A@mollari.NetBSD.org>
Date: Tue, 12 Apr 2016 15:35:04 +0000 (UTC)
From: er.abhinav.upadhyay@gmail.com
Reply-To: er.abhinav.upadhyay@gmail.com
To: gnats-bugs@NetBSD.org
Subject: Allow non numeric sections to be indexed and searched by apropos(1)
X-Send-Pr-Version: www-1.0
>Number: 51062
>Category: bin
>Synopsis: Allow non numeric sections to be indexed and searched by apropos(1)
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: bin-bug-people
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Tue Apr 12 15:40:00 +0000 2016
>Closed-Date: Wed Apr 13 12:16:33 +0000 2016
>Last-Modified: Wed Apr 13 14:45:00 +0000 2016
>Originator: Abhinav Upadhyay
>Release: CURRENT
>Organization:
>Environment:
>Description:
Apropos(1) doesn't allow searching for man pages in non-numeric sections. Also, makemandb(8) indexes only the first character of the section number and drops everything else.
The attached patch fixes both the problems. It also includes changes for tickets bin/51038, bin/51039, and bin/51040.
I can probably send a smaller patch if there is no interest in the aforementioned patches :)
>How-To-Repeat:
apropos -s 9lua systm
>Fix:
Index: apropos-utils.c
===================================================================
RCS file: /cvsroot/src/usr.sbin/makemandb/apropos-utils.c,v
retrieving revision 1.22
diff -u -r1.22 apropos-utils.c
--- apropos-utils.c 31 Mar 2016 20:16:58 -0000 1.22
+++ apropos-utils.c 12 Apr 2016 15:31:27 -0000
@@ -300,18 +300,19 @@
* In normal cases the function should return a handle to the db.
*/
sqlite3 *
-init_db(int db_flag, const char *manconf)
+init_db(mandb_access_mode db_flag, const char *manconf)
{
sqlite3 *db = NULL;
sqlite3_stmt *stmt;
struct stat sb;
int rc;
int create_db_flag = 0;
+ int access_mode;
char *dbpath = get_dbpath(manconf);
if (dbpath == NULL)
errx(EXIT_FAILURE, "_mandb entry not found in man.conf");
- /* Check if the database exists or not */
+
if (!(stat(dbpath, &sb) == 0 && S_ISREG(sb.st_mode))) {
/* Database does not exist, check if DB_CREATE was specified, and set
* flag to create the database schema
@@ -322,16 +323,23 @@
return NULL;
}
create_db_flag = 1;
+ } else {
+ /*
+ * Database exists. Check if we have the permissions to read/write the files
+ */
+ access_mode = db_flag == MANDB_CREATE || db_flag == MANDB_WRITE? R_OK | W_OK: R_OK;
+ if ((access(dbpath, access_mode)) != 0) {
+ warnx("Unable to access the database, please check permissions for %s", dbpath);
+ return NULL;
+ }
}
- /* Now initialize the database connection */
sqlite3_initialize();
rc = sqlite3_open_v2(dbpath, &db, db_flag, NULL);
if (rc != SQLITE_OK) {
warnx("%s", sqlite3_errmsg(db));
- sqlite3_shutdown();
- return NULL;
+ goto error;
}
if (create_db_flag && create_db(db) < 0) {
@@ -379,8 +387,7 @@
return db;
error:
- sqlite3_close(db);
- sqlite3_shutdown();
+ close_db(db);
return NULL;
}
@@ -458,7 +465,7 @@
}
/*
- * run_query --
+ * run_query_internal --
* Performs the searches for the keywords entered by the user.
* The 2nd param: snippet_args is an array of strings providing values for the
* last three parameters to the snippet function of sqlite. (Look at the docs).
@@ -509,15 +516,20 @@
* 2. I am using LIKE operator because '=' or IN operators do not seem to be
* working with the compression option enabled.
*/
+ char *sections_str = args->sec_nums;
+ char *temp;
+ if (sections_str) {
+ while (*sections_str) {
+ size_t len = strcspn(sections_str, " ");
+ char *sec = sections_str;
+ if (sections_str[len] == 0) {
+ sections_str += len;
+ } else {
+ sections_str[len] = 0;
+ sections_str += len + 1;
+ }
+ easprintf(&temp, "\'%s\',", sec);
- if (args->sec_nums) {
- char *temp;
- int i;
-
- for (i = 0; i < SECMAX; i++) {
- if (args->sec_nums[i] == 0)
- continue;
- easprintf(&temp, " OR section = \'%d\'", i + 1);
if (section_clause) {
concat(§ion_clause, temp);
free(temp);
@@ -529,9 +541,11 @@
/*
* At least one section requested, add glue for query.
*/
+ size_t section_clause_len = strlen(section_clause);
+ if (section_clause[section_clause_len - 1] == ',')
+ section_clause[section_clause_len - 1] = 0;
temp = section_clause;
- /* Skip " OR " before first term. */
- easprintf(§ion_clause, " AND (%s)", temp + 4);
+ easprintf(§ion_clause, " AND section IN (%s)", temp);
free(temp);
}
}
Index: apropos-utils.h
===================================================================
RCS file: /cvsroot/src/usr.sbin/makemandb/apropos-utils.h,v
retrieving revision 1.9
diff -u -r1.9 apropos-utils.h
--- apropos-utils.h 2 Apr 2013 17:16:50 -0000 1.9
+++ apropos-utils.h 12 Apr 2016 15:31:27 -0000
@@ -36,12 +36,14 @@
#include "sqlite3.h"
#define MANCONF "/etc/man.conf"
-#define SECMAX 9
/* Flags for opening the database */
-#define MANDB_READONLY SQLITE_OPEN_READONLY
-#define MANDB_WRITE SQLITE_OPEN_READWRITE
-#define MANDB_CREATE SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
+typedef enum mandb_access_mode {
+ MANDB_READONLY = SQLITE_OPEN_READONLY,
+ MANDB_WRITE = SQLITE_OPEN_READWRITE,
+ MANDB_CREATE = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
+} mandb_access_mode;
+
#define APROPOS_SCHEMA_VERSION 20120507
@@ -71,7 +73,7 @@
typedef struct query_args {
const char *search_str; // user query
- int *sec_nums; // Section in which to do the search
+ char *sec_nums; // Section in which to do the search
int nrec; // number of records to fetch
int offset; //From which position to start processing the records
int legacy;
@@ -92,7 +94,7 @@
char *lower(char *);
void concat(char **, const char *);
void concat2(char **, const char *, size_t);
-sqlite3 *init_db(int, const char *);
+sqlite3 *init_db(mandb_access_mode, const char *);
void close_db(sqlite3 *);
char *get_dbpath(const char *);
int run_query(sqlite3 *, query_format, query_args *);
Index: apropos.c
===================================================================
RCS file: /cvsroot/src/usr.sbin/makemandb/apropos.c,v
retrieving revision 1.18
diff -u -r1.18 apropos.c
--- apropos.c 31 Mar 2016 20:13:37 -0000 1.18
+++ apropos.c 12 Apr 2016 15:31:27 -0000
@@ -43,7 +43,7 @@
#include "apropos-utils.h"
typedef struct apropos_flags {
- int sec_nums[SECMAX];
+ char *sec_nums;
int nresults;
int pager;
int no_context;
@@ -58,6 +58,8 @@
apropos_flags *aflags;
} callback_data;
+static const unsigned int sections_args_length = 16;
+
static char *remove_stopwords(const char *);
static int query_callback(void *, const char * , const char *, const char *,
const char *, size_t);
@@ -69,6 +71,7 @@
parseargs(int argc, char **argv, struct apropos_flags *aflags)
{
int ch;
+ char sec[2] = {0};
while ((ch = getopt(argc, argv, "123456789Cchiln:PprS:s:")) != -1) {
switch (ch) {
case '1':
@@ -80,7 +83,13 @@
case '7':
case '8':
case '9':
- aflags->sec_nums[ch - '1'] = 1;
+ /* Generate a space separated list of all the requested sections */
+ sec[0] = (char) ch ;
+ if (aflags->sec_nums == NULL) {
+ aflags->sec_nums = emalloc(sections_args_length);
+ memcpy(aflags->sec_nums, sec, 2);
+ } else
+ concat2(&aflags->sec_nums, sec, 1);
break;
case 'C':
aflags->no_context = 1;
@@ -115,10 +124,12 @@
aflags->machine = optarg;
break;
case 's':
- ch = atoi(optarg);
- if (ch < 1 || ch > 9)
- errx(EXIT_FAILURE, "Invalid section");
- aflags->sec_nums[ch - 1] = 1;
+ if (aflags->sec_nums == NULL) {
+ size_t arglen = strlen(optarg);
+ aflags->sec_nums = arglen > sections_args_length? emalloc(arglen + 1): emalloc(sections_args_length);
+ memcpy(aflags->sec_nums, optarg, arglen + 1);
+ } else
+ concat(&aflags->sec_nums, optarg);
break;
case '?':
default:
@@ -140,6 +151,7 @@
cbdata.out = stdout; // the default output stream
cbdata.count = 0;
apropos_flags aflags;
+ aflags.sec_nums = NULL;
cbdata.aflags = &aflags;
sqlite3 *db;
setprogname(argv[0]);
@@ -169,12 +181,6 @@
parseargs(argc, argv, &aflags);
- /*
- * If the user specifies a section number as an option, the
- * corresponding index element in sec_nums is set to the string
- * representing that section number.
- */
-
argc -= optind;
argv += optind;
@@ -232,6 +238,7 @@
fprintf(cbdata.out, "</table>\n</body>\n</html>\n");
free(query);
+ free(aflags.sec_nums);
close_db(db);
if (errmsg) {
warnx("%s", errmsg);
Index: makemandb.c
===================================================================
RCS file: /cvsroot/src/usr.sbin/makemandb/makemandb.c,v
retrieving revision 1.33
diff -u -r1.33 makemandb.c
--- makemandb.c 31 Mar 2016 20:17:58 -0000 1.33
+++ makemandb.c 12 Apr 2016 15:31:28 -0000
@@ -71,7 +71,7 @@
secbuff exit_status; // EXIT STATUS
secbuff diagnostics; // DIAGNOSTICS
secbuff errors; // ERRORS
- char section[2];
+ char *section;
int xr_found; // To track whether a .Xr was seen when parsing a section
@@ -702,7 +702,7 @@
for (;;) {
r = archive_read_data(a, buf + off, *len - off);
if (r == ARCHIVE_OK) {
- archive_read_close(a);
+ archive_read_finish(a);
*bufp = buf;
*len = off;
return 0;
@@ -718,7 +718,7 @@
if (mflags.verbosity)
warnx("File too large: %s", file);
free(buf);
- archive_read_close(a);
+ archive_read_finish(a);
return -1;
}
buf = erealloc(buf, *len);
@@ -727,7 +727,7 @@
archive_error:
warnx("Error while reading `%s': %s", file, archive_error_string(a));
- archive_read_close(a);
+ archive_read_finish(a);
return -1;
}
@@ -773,7 +773,7 @@
rc = sqlite3_prepare_v2(db, sqlstr, -1, &stmt, NULL);
if (rc != SQLITE_OK) {
if (mflags.verbosity)
- warnx("%s", sqlite3_errmsg(db));
+ warnx("%s", sqlite3_errmsg(db));
close_db(db);
errx(EXIT_FAILURE, "Could not query file cache");
}
@@ -945,15 +945,15 @@
if (md) {
const struct mdoc_meta *md_meta = mdoc_meta(md);
if (md_meta->msec == NULL) {
- rec->section[0] = '?';
+ easprintf(&rec->section, "%s", "?");
} else
- rec->section[0] = md_meta->msec[0];
+ rec->section = estrdup(md_meta->msec);
} else if (m) {
const struct man_meta *m_meta = man_meta(m);
if (m_meta->msec == NULL)
- rec->section[0] = '?';
+ easprintf(&rec->section, "%s", "?");
else
- rec->section[0] = m_meta->msec[0];
+ rec->section = estrdup(m_meta->msec);
} else
return;
@@ -1574,7 +1574,7 @@
char *tmp;
rec->links = estrdup(rec->name);
free(rec->name);
- int sz = strcspn(rec->links, " \0");
+ size_t sz = strcspn(rec->links, " \0");
rec->name = emalloc(sz + 1);
memcpy(rec->name, rec->links, sz);
if(rec->name[sz - 1] == ',')
@@ -1980,6 +1980,9 @@
free(rec->md5_hash);
rec->md5_hash = NULL;
+
+ free(rec->section);
+ rec->section = NULL;
}
/*
>Release-Note:
>Audit-Trail:
From: christos@zoulas.com (Christos Zoulas)
To: gnats-bugs@NetBSD.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc:
Subject: Re: bin/51062: Allow non numeric sections to be indexed and searched by apropos(1)
Date: Tue, 12 Apr 2016 21:45:21 -0400
On Apr 12, 3:40pm, er.abhinav.upadhyay@gmail.com (er.abhinav.upadhyay@gmail.com) wrote:
-- Subject: bin/51062: Allow non numeric sections to be indexed and searched
| >Number: 51062
| >Category: bin
| >Synopsis: Allow non numeric sections to be indexed and searched by apropos(1)
| >Confidential: no
| >Severity: non-critical
| >Priority: medium
| >Responsible: bin-bug-people
| >State: open
| >Class: sw-bug
| >Submitter-Id: net
| >Arrival-Date: Tue Apr 12 15:40:00 +0000 2016
| >Originator: Abhinav Upadhyay
| >Release: CURRENT
| >Organization:
| >Environment:
| >Description:
| Apropos(1) doesn't allow searching for man pages in non-numeric sections. Also, makemandb(8) indexes only the first character of the section number and drops everything else.
|
|
| The attached patch fixes both the problems. It also includes changes for tickets bin/51038, bin/51039, and bin/51040.
|
| I can probably send a smaller patch if there is no interest in the aforementioned patches :)
| >How-To-Repeat:
| apropos -s 9lua systm
|
Please don't mix other patches together. Resubmit just the relevant change,
christos
From: Abhinav Upadhyay <er.abhinav.upadhyay@gmail.com>
To: Christos Zoulas <christos@zoulas.com>
Cc: NetBSD GNATS <gnats-bugs@netbsd.org>, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: bin/51062: Allow non numeric sections to be indexed and searched
by apropos(1)
Date: Wed, 13 Apr 2016 11:55:55 +0530
--001a113d1980ac3ad4053057d91c
Content-Type: text/plain; charset=UTF-8
On Wed, Apr 13, 2016 at 7:15 AM, Christos Zoulas <christos@zoulas.com> wrote:
> On Apr 12, 3:40pm, er.abhinav.upadhyay@gmail.com (er.abhinav.upadhyay@gmail.com) wrote:
> -- Subject: bin/51062: Allow non numeric sections to be indexed and searched
>
> | >Number: 51062
> | >Category: bin
> | >Synopsis: Allow non numeric sections to be indexed and searched by apropos(1)
> | >Confidential: no
> | >Severity: non-critical
> | >Priority: medium
> | >Responsible: bin-bug-people
> | >State: open
> | >Class: sw-bug
> | >Submitter-Id: net
> | >Arrival-Date: Tue Apr 12 15:40:00 +0000 2016
> | >Originator: Abhinav Upadhyay
> | >Release: CURRENT
> | >Organization:
> | >Environment:
> | >Description:
> | Apropos(1) doesn't allow searching for man pages in non-numeric sections. Also, makemandb(8) indexes only the first character of the section number and drops everything else.
> |
> |
> | The attached patch fixes both the problems. It also includes changes for tickets bin/51038, bin/51039, and bin/51040.
> |
> | I can probably send a smaller patch if there is no interest in the aforementioned patches :)
> | >How-To-Repeat:
> | apropos -s 9lua systm
> |
>
> Please don't mix other patches together. Resubmit just the relevant change,
Hi Christos,
Thanks for committing the other patches. I have updated the patch and
attached with the email.
--001a113d1980ac3ad4053057d91c
Content-Type: text/x-patch; charset=US-ASCII; name="apropos_sections.patch"
Content-Disposition: attachment; filename="apropos_sections.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_imyh2npm0
SW5kZXg6IGFwcm9wb3MtdXRpbHMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMv
dXNyLnNiaW4vbWFrZW1hbmRiL2Fwcm9wb3MtdXRpbHMuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yMwpkaWZmIC11IC1yMS4yMyBhcHJvcG9zLXV0aWxzLmMKLS0tIGFwcm9wb3MtdXRpbHMuYwkx
MyBBcHIgMjAxNiAwMTozNzo1MCAtMDAwMAkxLjIzCisrKyBhcHJvcG9zLXV0aWxzLmMJMTMgQXBy
IDIwMTYgMDY6MDI6MjAgLTAwMDAKQEAgLTQ3NCw3ICs0NzQsNyBAQAogfQogCiAvKgotICogIHJ1
bl9xdWVyeSAtLQorICogIHJ1bl9xdWVyeV9pbnRlcm5hbCAtLQogICogIFBlcmZvcm1zIHRoZSBz
ZWFyY2hlcyBmb3IgdGhlIGtleXdvcmRzIGVudGVyZWQgYnkgdGhlIHVzZXIuCiAgKiAgVGhlIDJu
ZCBwYXJhbTogc25pcHBldF9hcmdzIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MgcHJvdmlkaW5nIHZh
bHVlcyBmb3IgdGhlCiAgKiAgbGFzdCB0aHJlZSBwYXJhbWV0ZXJzIHRvIHRoZSBzbmlwcGV0IGZ1
bmN0aW9uIG9mIHNxbGl0ZS4gKExvb2sgYXQgdGhlIGRvY3MpLgpAQCAtNTI1LDE1ICs1MjUsMjAg
QEAKIAkgKiAyLiBJIGFtIHVzaW5nIExJS0Ugb3BlcmF0b3IgYmVjYXVzZSAnPScgb3IgSU4gb3Bl
cmF0b3JzIGRvIG5vdCBzZWVtIHRvIGJlCiAJICogd29ya2luZyB3aXRoIHRoZSBjb21wcmVzc2lv
biBvcHRpb24gZW5hYmxlZC4KIAkgKi8KKwljaGFyICpzZWN0aW9uc19zdHIgPSBhcmdzLT5zZWNf
bnVtczsKKwljaGFyICp0ZW1wOworCWlmIChzZWN0aW9uc19zdHIpIHsKKwkJd2hpbGUgKCpzZWN0
aW9uc19zdHIpIHsKKwkJCXNpemVfdCBsZW4gPSBzdHJjc3BuKHNlY3Rpb25zX3N0ciwgIiAiKTsK
KwkJCWNoYXIgKnNlYyA9IHNlY3Rpb25zX3N0cjsKKwkJCWlmIChzZWN0aW9uc19zdHJbbGVuXSA9
PSAwKSB7CisJCQkJc2VjdGlvbnNfc3RyICs9IGxlbjsKKwkJCX0gZWxzZSB7CisJCQkJc2VjdGlv
bnNfc3RyW2xlbl0gPSAwOworCQkJCXNlY3Rpb25zX3N0ciArPSBsZW4gKyAxOworCQkJfQorCQkJ
ZWFzcHJpbnRmKCZ0ZW1wLCAiXCclc1wnLCIsIHNlYyk7CiAKLQlpZiAoYXJncy0+c2VjX251bXMp
IHsKLQkJY2hhciAqdGVtcDsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IFNFQ01BWDsg
aSsrKSB7Ci0JCQlpZiAoYXJncy0+c2VjX251bXNbaV0gPT0gMCkKLQkJCQljb250aW51ZTsKLQkJ
CWVhc3ByaW50ZigmdGVtcCwgIiBPUiBzZWN0aW9uID0gXCclZFwnIiwgaSArIDEpOwogCQkJaWYg
KHNlY3Rpb25fY2xhdXNlKSB7CiAJCQkJY29uY2F0KCZzZWN0aW9uX2NsYXVzZSwgdGVtcCk7CiAJ
CQkJZnJlZSh0ZW1wKTsKQEAgLTU0NCwxMCArNTQ5LDEzIEBACiAJCWlmIChzZWN0aW9uX2NsYXVz
ZSkgewogCQkJLyoKIAkJCSAqIEF0IGxlYXN0IG9uZSBzZWN0aW9uIHJlcXVlc3RlZCwgYWRkIGds
dWUgZm9yIHF1ZXJ5LgorCQkJICogQmVmb3JlIGRvaW5nIHRoYXQsIHJlbW92ZSB0aGUgY29tbWEg
YXQgdGhlIGVuZCBvZiBzZWN0aW9uX2NsYXVzZQogCQkJICovCisJCQlzaXplX3Qgc2VjdGlvbl9j
bGF1c2VfbGVuID0gc3RybGVuKHNlY3Rpb25fY2xhdXNlKTsKKwkJCWlmIChzZWN0aW9uX2NsYXVz
ZVtzZWN0aW9uX2NsYXVzZV9sZW4gLSAxXSA9PSAnLCcpCisJCQkJc2VjdGlvbl9jbGF1c2Vbc2Vj
dGlvbl9jbGF1c2VfbGVuIC0gMV0gPSAwOwogCQkJdGVtcCA9IHNlY3Rpb25fY2xhdXNlOwotCQkJ
LyogU2tpcCAiIE9SICIgYmVmb3JlIGZpcnN0IHRlcm0uICovCi0JCQllYXNwcmludGYoJnNlY3Rp
b25fY2xhdXNlLCAiIEFORCAoJXMpIiwgdGVtcCArIDQpOworCQkJZWFzcHJpbnRmKCZzZWN0aW9u
X2NsYXVzZSwgIiBBTkQgc2VjdGlvbiBJTiAoJXMpIiwgdGVtcCk7CiAJCQlmcmVlKHRlbXApOwog
CQl9CiAJfQpJbmRleDogYXByb3Bvcy11dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNy
b290L3NyYy91c3Iuc2Jpbi9tYWtlbWFuZGIvYXByb3Bvcy11dGlscy5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEwCmRpZmYgLXUgLXIxLjEwIGFwcm9wb3MtdXRpbHMuaAotLS0gYXByb3Bvcy11
dGlscy5oCTEzIEFwciAyMDE2IDAxOjM3OjUwIC0wMDAwCTEuMTAKKysrIGFwcm9wb3MtdXRpbHMu
aAkxMyBBcHIgMjAxNiAwNjowMjoyMSAtMDAwMApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUg
InNxbGl0ZTMuaCIKIAogI2RlZmluZSBNQU5DT05GICIvZXRjL21hbi5jb25mIgotI2RlZmluZSBT
RUNNQVggOQogCiAvKiBGbGFncyBmb3Igb3BlbmluZyB0aGUgZGF0YWJhc2UgKi8KIHR5cGVkZWYg
ZW51bSBtYW5kYl9hY2Nlc3NfbW9kZSB7CkBAIC03NCw3ICs3Myw3IEBACiAKIHR5cGVkZWYgc3Ry
dWN0IHF1ZXJ5X2FyZ3MgewogCWNvbnN0IGNoYXIgKnNlYXJjaF9zdHI7CQkvLyB1c2VyIHF1ZXJ5
Ci0JaW50ICpzZWNfbnVtczsJCS8vIFNlY3Rpb24gaW4gd2hpY2ggdG8gZG8gdGhlIHNlYXJjaAor
CWNoYXIgKnNlY19udW1zOwkJLy8gU2VjdGlvbiBpbiB3aGljaCB0byBkbyB0aGUgc2VhcmNoCiAJ
aW50IG5yZWM7CQkJLy8gbnVtYmVyIG9mIHJlY29yZHMgdG8gZmV0Y2gKIAlpbnQgb2Zmc2V0OwkJ
Ly9Gcm9tIHdoaWNoIHBvc2l0aW9uIHRvIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIHJlY29yZHMKIAlp
bnQgbGVnYWN5OwpJbmRleDogYXByb3Bvcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290
L3NyYy91c3Iuc2Jpbi9tYWtlbWFuZGIvYXByb3Bvcy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjE4CmRpZmYgLXUgLXIxLjE4IGFwcm9wb3MuYwotLS0gYXByb3Bvcy5jCTMxIE1hciAyMDE2IDIw
OjEzOjM3IC0wMDAwCTEuMTgKKysrIGFwcm9wb3MuYwkxMyBBcHIgMjAxNiAwNjowMjoyMSAtMDAw
MApAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgImFwcm9wb3MtdXRpbHMuaCIKIAogdHlwZWRl
ZiBzdHJ1Y3QgYXByb3Bvc19mbGFncyB7Ci0JaW50IHNlY19udW1zW1NFQ01BWF07CisJY2hhciAq
c2VjX251bXM7CiAJaW50IG5yZXN1bHRzOwogCWludCBwYWdlcjsKIAlpbnQgbm9fY29udGV4dDsK
QEAgLTU4LDYgKzU4LDggQEAKIAlhcHJvcG9zX2ZsYWdzICphZmxhZ3M7CiB9IGNhbGxiYWNrX2Rh
dGE7CiAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2VjdGlvbnNfYXJnc19sZW5ndGggPSAx
NjsKKwogc3RhdGljIGNoYXIgKnJlbW92ZV9zdG9wd29yZHMoY29uc3QgY2hhciAqKTsKIHN0YXRp
YyBpbnQgcXVlcnlfY2FsbGJhY2sodm9pZCAqLCBjb25zdCBjaGFyICogLCBjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKiwKIAljb25zdCBjaGFyICosIHNpemVfdCk7CkBAIC02OSw2ICs3MSw3IEBA
CiBwYXJzZWFyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBzdHJ1Y3QgYXByb3Bvc19mbGFncyAq
YWZsYWdzKQogewogCWludCBjaDsKKwljaGFyIHNlY1syXSA9IHswLCAwfTsKIAl3aGlsZSAoKGNo
ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICIxMjM0NTY3ODlDY2hpbG46UHByUzpzOiIpKSAhPSAtMSkg
ewogCQlzd2l0Y2ggKGNoKSB7CiAJCWNhc2UgJzEnOgpAQCAtODAsNyArODMsMTMgQEAKIAkJY2Fz
ZSAnNyc6CiAJCWNhc2UgJzgnOgogCQljYXNlICc5JzoKLQkJCWFmbGFncy0+c2VjX251bXNbY2gg
LSAnMSddID0gMTsKKwkJCS8qIEdlbmVyYXRlIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYWxs
IHRoZSByZXF1ZXN0ZWQgc2VjdGlvbnMgKi8KKwkJCXNlY1swXSA9IChjaGFyKSBjaCA7CisJCQlp
ZiAoYWZsYWdzLT5zZWNfbnVtcyA9PSBOVUxMKSB7CisJCQkJYWZsYWdzLT5zZWNfbnVtcyA9IGVt
YWxsb2Moc2VjdGlvbnNfYXJnc19sZW5ndGgpOworCQkJCW1lbWNweShhZmxhZ3MtPnNlY19udW1z
LCBzZWMsIDIpOworCQkJfSBlbHNlCisJCQkJY29uY2F0MigmYWZsYWdzLT5zZWNfbnVtcywgc2Vj
LCAxKTsKIAkJCWJyZWFrOwogCQljYXNlICdDJzoKIAkJCWFmbGFncy0+bm9fY29udGV4dCA9IDE7
CkBAIC0xMTUsMTAgKzEyNCwxMiBAQAogCQkJYWZsYWdzLT5tYWNoaW5lID0gb3B0YXJnOwogCQkJ
YnJlYWs7CiAJCWNhc2UgJ3MnOgotCQkJY2ggPSBhdG9pKG9wdGFyZyk7Ci0JCQlpZiAoY2ggPCAx
IHx8IGNoID4gOSkKLQkJCQllcnJ4KEVYSVRfRkFJTFVSRSwgIkludmFsaWQgc2VjdGlvbiIpOwot
CQkJYWZsYWdzLT5zZWNfbnVtc1tjaCAtIDFdID0gMTsKKwkJCWlmIChhZmxhZ3MtPnNlY19udW1z
ID09IE5VTEwpIHsKKwkJCQlzaXplX3QgYXJnbGVuID0gc3RybGVuKG9wdGFyZyk7CisJCQkJYWZs
YWdzLT5zZWNfbnVtcyA9IGFyZ2xlbiA+IHNlY3Rpb25zX2FyZ3NfbGVuZ3RoPyBlbWFsbG9jKGFy
Z2xlbiArIDEpOiBlbWFsbG9jKHNlY3Rpb25zX2FyZ3NfbGVuZ3RoKTsKKwkJCQltZW1jcHkoYWZs
YWdzLT5zZWNfbnVtcywgb3B0YXJnLCBhcmdsZW4gKyAxKTsKKwkJCX0gZWxzZQorCQkJCWNvbmNh
dCgmYWZsYWdzLT5zZWNfbnVtcywgb3B0YXJnKTsKIAkJCWJyZWFrOwogCQljYXNlICc/JzoKIAkJ
ZGVmYXVsdDoKQEAgLTE0MCw2ICsxNTEsNyBAQAogCWNiZGF0YS5vdXQgPSBzdGRvdXQ7CQkvLyB0
aGUgZGVmYXVsdCBvdXRwdXQgc3RyZWFtCiAJY2JkYXRhLmNvdW50ID0gMDsKIAlhcHJvcG9zX2Zs
YWdzIGFmbGFnczsKKwlhZmxhZ3Muc2VjX251bXMgPSBOVUxMOwogCWNiZGF0YS5hZmxhZ3MgPSAm
YWZsYWdzOwogCXNxbGl0ZTMgKmRiOwogCXNldHByb2duYW1lKGFyZ3ZbMF0pOwpAQCAtMTY5LDEy
ICsxODEsNiBAQAogCiAJcGFyc2VhcmdzKGFyZ2MsIGFyZ3YsICZhZmxhZ3MpOwogCi0JLyoKLQkg
KiBJZiB0aGUgdXNlciBzcGVjaWZpZXMgYSBzZWN0aW9uIG51bWJlciBhcyBhbiBvcHRpb24sIHRo
ZQotCSAqIGNvcnJlc3BvbmRpbmcgaW5kZXggZWxlbWVudCBpbiBzZWNfbnVtcyBpcyBzZXQgdG8g
dGhlIHN0cmluZwotCSAqIHJlcHJlc2VudGluZyB0aGF0IHNlY3Rpb24gbnVtYmVyLgotCSAqLwot
CiAJYXJnYyAtPSBvcHRpbmQ7CiAJYXJndiArPSBvcHRpbmQ7CiAKQEAgLTIzMiw2ICsyMzgsNyBA
QAogCQlmcHJpbnRmKGNiZGF0YS5vdXQsICI8L3RhYmxlPlxuPC9ib2R5PlxuPC9odG1sPlxuIik7
CiAKIAlmcmVlKHF1ZXJ5KTsKKwlmcmVlKGFmbGFncy5zZWNfbnVtcyk7CiAJY2xvc2VfZGIoZGIp
OwogCWlmIChlcnJtc2cpIHsKIAkJd2FybngoIiVzIiwgZXJybXNnKTsKSW5kZXg6IG1ha2VtYW5k
Yi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy91c3Iuc2Jpbi9tYWtlbWFuZGIv
bWFrZW1hbmRiLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzYKZGlmZiAtdSAtcjEuMzYgbWFr
ZW1hbmRiLmMKLS0tIG1ha2VtYW5kYi5jCTEzIEFwciAyMDE2IDAxOjQxOjE4IC0wMDAwCTEuMzYK
KysrIG1ha2VtYW5kYi5jCTEzIEFwciAyMDE2IDA2OjAyOjIyIC0wMDAwCkBAIC03MSw3ICs3MSw3
IEBACiAJc2VjYnVmZiBleGl0X3N0YXR1czsgLy8gRVhJVCBTVEFUVVMKIAlzZWNidWZmIGRpYWdu
b3N0aWNzOyAvLyBESUFHTk9TVElDUwogCXNlY2J1ZmYgZXJyb3JzOyAvLyBFUlJPUlMKLQljaGFy
IHNlY3Rpb25bMl07CisJY2hhciAqc2VjdGlvbjsKIAogCWludCB4cl9mb3VuZDsgLy8gVG8gdHJh
Y2sgd2hldGhlciBhIC5YciB3YXMgc2VlbiB3aGVuIHBhcnNpbmcgYSBzZWN0aW9uCiAKQEAgLTc3
NCw3ICs3NzQsNyBAQAogCXJjID0gc3FsaXRlM19wcmVwYXJlX3YyKGRiLCBzcWxzdHIsIC0xLCAm
c3RtdCwgTlVMTCk7CiAJaWYgKHJjICE9IFNRTElURV9PSykgewogCQlpZiAobWZsYWdzLnZlcmJv
c2l0eSkKLQkJd2FybngoIiVzIiwgc3FsaXRlM19lcnJtc2coZGIpKTsKKwkJCXdhcm54KCIlcyIs
IHNxbGl0ZTNfZXJybXNnKGRiKSk7CiAJCWNsb3NlX2RiKGRiKTsKIAkJZXJyeChFWElUX0ZBSUxV
UkUsICJDb3VsZCBub3QgcXVlcnkgZmlsZSBjYWNoZSIpOwogCX0KQEAgLTk1NCwxNSArOTU0LDE1
IEBACiAJaWYgKG1kKSB7CiAJCWNvbnN0IHN0cnVjdCBtZG9jX21ldGEgKm1kX21ldGEgPSBtZG9j
X21ldGEobWQpOwogCQlpZiAobWRfbWV0YS0+bXNlYyA9PSBOVUxMKSB7Ci0JCQlyZWMtPnNlY3Rp
b25bMF0gPSAnPyc7CisJCQllYXNwcmludGYoJnJlYy0+c2VjdGlvbiwgIiVzIiwgIj8iKTsKIAkJ
fSBlbHNlCi0JCQlyZWMtPnNlY3Rpb25bMF0gPSBtZF9tZXRhLT5tc2VjWzBdOworCQkJcmVjLT5z
ZWN0aW9uID0gZXN0cmR1cChtZF9tZXRhLT5tc2VjKTsKIAl9IGVsc2UgaWYgKG0pIHsKIAkJY29u
c3Qgc3RydWN0IG1hbl9tZXRhICptX21ldGEgPSBtYW5fbWV0YShtKTsKIAkJaWYgKG1fbWV0YS0+
bXNlYyA9PSBOVUxMKQotCQkJcmVjLT5zZWN0aW9uWzBdID0gJz8nOworCQkJZWFzcHJpbnRmKCZy
ZWMtPnNlY3Rpb24sICIlcyIsICI/Iik7CiAJCWVsc2UKLQkJCXJlYy0+c2VjdGlvblswXSA9IG1f
bWV0YS0+bXNlY1swXTsKKwkJCXJlYy0+c2VjdGlvbiA9IGVzdHJkdXAobV9tZXRhLT5tc2VjKTsK
IAl9IGVsc2UKIAkJcmV0dXJuOwogCkBAIC0xNTgzLDcgKzE1ODMsNyBAQAogCQljaGFyICp0bXA7
CiAJCXJlYy0+bGlua3MgPSBlc3RyZHVwKHJlYy0+bmFtZSk7CiAJCWZyZWUocmVjLT5uYW1lKTsK
LQkJaW50IHN6ID0gc3RyY3NwbihyZWMtPmxpbmtzLCAiIFwwIik7CisJCXNpemVfdCBzeiA9IHN0
cmNzcG4ocmVjLT5saW5rcywgIiBcMCIpOwogCQlyZWMtPm5hbWUgPSBlbWFsbG9jKHN6ICsgMSk7
CiAJCW1lbWNweShyZWMtPm5hbWUsIHJlYy0+bGlua3MsIHN6KTsKIAkJaWYocmVjLT5uYW1lW3N6
IC0gMV0gPT0gJywnKQpAQCAtMTk4OSw2ICsxOTg5LDkgQEAKIAogCWZyZWUocmVjLT5tZDVfaGFz
aCk7CiAJcmVjLT5tZDVfaGFzaCA9IE5VTEw7CisKKwlmcmVlKHJlYy0+c2VjdGlvbik7CisJcmVj
LT5zZWN0aW9uID0gTlVMTDsKIH0KIAogLyoK
--001a113d1980ac3ad4053057d91c--
From: Abhinav Upadhyay <er.abhinav.upadhyay@gmail.com>
To: NetBSD GNATS <gnats-bugs@netbsd.org>
Cc: gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: bin/51062: Allow non numeric sections to be indexed and searched
by apropos(1)
Date: Wed, 13 Apr 2016 12:21:18 +0530
On Wed, Apr 13, 2016 at 12:00 PM, Abhinav Upadhyay
<er.abhinav.upadhyay@gmail.com> wrote:
> The following reply was made to PR bin/51062; it has been noted by GNATS.
>
> From: Abhinav Upadhyay <er.abhinav.upadhyay@gmail.com>
> To: Christos Zoulas <christos@zoulas.com>
> Cc: NetBSD GNATS <gnats-bugs@netbsd.org>, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
> Subject: Re: bin/51062: Allow non numeric sections to be indexed and searched
> by apropos(1)
> Date: Wed, 13 Apr 2016 11:55:55 +0530
>
> --001a113d1980ac3ad4053057d91c
> Content-Type: text/plain; charset=UTF-8
>
> On Wed, Apr 13, 2016 at 7:15 AM, Christos Zoulas <christos@zoulas.com> wrote:
> > On Apr 12, 3:40pm, er.abhinav.upadhyay@gmail.com (er.abhinav.upadhyay@gmail.com) wrote:
> > -- Subject: bin/51062: Allow non numeric sections to be indexed and searched
> >
> > | >Number: 51062
> > | >Category: bin
> > | >Synopsis: Allow non numeric sections to be indexed and searched by apropos(1)
> > | >Confidential: no
> > | >Severity: non-critical
> > | >Priority: medium
> > | >Responsible: bin-bug-people
> > | >State: open
> > | >Class: sw-bug
> > | >Submitter-Id: net
> > | >Arrival-Date: Tue Apr 12 15:40:00 +0000 2016
> > | >Originator: Abhinav Upadhyay
> > | >Release: CURRENT
> > | >Organization:
> > | >Environment:
> > | >Description:
> > | Apropos(1) doesn't allow searching for man pages in non-numeric sections. Also, makemandb(8) indexes only the first character of the section number and drops everything else.
> > |
> > |
> > | The attached patch fixes both the problems. It also includes changes for tickets bin/51038, bin/51039, and bin/51040.
> > |
> > | I can probably send a smaller patch if there is no interest in the aforementioned patches :)
> > | >How-To-Repeat:
> > | apropos -s 9lua systm
> > |
> >
> > Please don't mix other patches together. Resubmit just the relevant change,
>
> Hi Christos,
>
> Thanks for committing the other patches. I have updated the patch and
> attached with the email.
>
Looks like gmail messed up the patch in the attachment. Posting it inline:
Index: apropos-utils.c
===================================================================
RCS file: /cvsroot/src/usr.sbin/makemandb/apropos-utils.c,v
retrieving revision 1.23
diff -u -r1.23 apropos-utils.c
--- apropos-utils.c 13 Apr 2016 01:37:50 -0000 1.23
+++ apropos-utils.c 13 Apr 2016 06:02:20 -0000
@@ -474,7 +474,7 @@
}
/*
- * run_query --
+ * run_query_internal --
* Performs the searches for the keywords entered by the user.
* The 2nd param: snippet_args is an array of strings providing values for the
* last three parameters to the snippet function of sqlite. (Look at
the docs).
@@ -525,15 +525,20 @@
* 2. I am using LIKE operator because '=' or IN operators do not
seem to be
* working with the compression option enabled.
*/
+ char *sections_str = args->sec_nums;
+ char *temp;
+ if (sections_str) {
+ while (*sections_str) {
+ size_t len = strcspn(sections_str, " ");
+ char *sec = sections_str;
+ if (sections_str[len] == 0) {
+ sections_str += len;
+ } else {
+ sections_str[len] = 0;
+ sections_str += len + 1;
+ }
+ easprintf(&temp, "\'%s\',", sec);
- if (args->sec_nums) {
- char *temp;
- int i;
-
- for (i = 0; i < SECMAX; i++) {
- if (args->sec_nums[i] == 0)
- continue;
- easprintf(&temp, " OR section = \'%d\'", i + 1);
if (section_clause) {
concat(§ion_clause, temp);
free(temp);
@@ -544,10 +549,13 @@
if (section_clause) {
/*
* At least one section requested, add glue for query.
+ * Before doing that, remove the comma at the end of section_clause
*/
+ size_t section_clause_len = strlen(section_clause);
+ if (section_clause[section_clause_len - 1] == ',')
+ section_clause[section_clause_len - 1] = 0;
temp = section_clause;
- /* Skip " OR " before first term. */
- easprintf(§ion_clause, " AND (%s)", temp + 4);
+ easprintf(§ion_clause, " AND section IN (%s)", temp);
free(temp);
}
}
Index: apropos-utils.h
===================================================================
RCS file: /cvsroot/src/usr.sbin/makemandb/apropos-utils.h,v
retrieving revision 1.10
diff -u -r1.10 apropos-utils.h
--- apropos-utils.h 13 Apr 2016 01:37:50 -0000 1.10
+++ apropos-utils.h 13 Apr 2016 06:02:21 -0000
@@ -36,7 +36,6 @@
#include "sqlite3.h"
#define MANCONF "/etc/man.conf"
-#define SECMAX 9
/* Flags for opening the database */
typedef enum mandb_access_mode {
@@ -74,7 +73,7 @@
typedef struct query_args {
const char *search_str; // user query
- int *sec_nums; // Section in which to do the search
+ char *sec_nums; // Section in which to do the search
int nrec; // number of records to fetch
int offset; //From which position to start processing the records
int legacy;
Index: apropos.c
===================================================================
RCS file: /cvsroot/src/usr.sbin/makemandb/apropos.c,v
retrieving revision 1.18
diff -u -r1.18 apropos.c
--- apropos.c 31 Mar 2016 20:13:37 -0000 1.18
+++ apropos.c 13 Apr 2016 06:02:21 -0000
@@ -43,7 +43,7 @@
#include "apropos-utils.h"
typedef struct apropos_flags {
- int sec_nums[SECMAX];
+ char *sec_nums;
int nresults;
int pager;
int no_context;
@@ -58,6 +58,8 @@
apropos_flags *aflags;
} callback_data;
+static const unsigned int sections_args_length = 16;
+
static char *remove_stopwords(const char *);
static int query_callback(void *, const char * , const char *, const char *,
const char *, size_t);
@@ -69,6 +71,7 @@
parseargs(int argc, char **argv, struct apropos_flags *aflags)
{
int ch;
+ char sec[2] = {0, 0};
while ((ch = getopt(argc, argv, "123456789Cchiln:PprS:s:")) != -1) {
switch (ch) {
case '1':
@@ -80,7 +83,13 @@
case '7':
case '8':
case '9':
- aflags->sec_nums[ch - '1'] = 1;
+ /* Generate a space separated list of all the requested sections */
+ sec[0] = (char) ch ;
+ if (aflags->sec_nums == NULL) {
+ aflags->sec_nums = emalloc(sections_args_length);
+ memcpy(aflags->sec_nums, sec, 2);
+ } else
+ concat2(&aflags->sec_nums, sec, 1);
break;
case 'C':
aflags->no_context = 1;
@@ -115,10 +124,12 @@
aflags->machine = optarg;
break;
case 's':
- ch = atoi(optarg);
- if (ch < 1 || ch > 9)
- errx(EXIT_FAILURE, "Invalid section");
- aflags->sec_nums[ch - 1] = 1;
+ if (aflags->sec_nums == NULL) {
+ size_t arglen = strlen(optarg);
+ aflags->sec_nums = arglen > sections_args_length?
emalloc(arglen + 1): emalloc(sections_args_length);
+ memcpy(aflags->sec_nums, optarg, arglen + 1);
+ } else
+ concat(&aflags->sec_nums, optarg);
break;
case '?':
default:
@@ -140,6 +151,7 @@
cbdata.out = stdout; // the default output stream
cbdata.count = 0;
apropos_flags aflags;
+ aflags.sec_nums = NULL;
cbdata.aflags = &aflags;
sqlite3 *db;
setprogname(argv[0]);
@@ -169,12 +181,6 @@
parseargs(argc, argv, &aflags);
- /*
- * If the user specifies a section number as an option, the
- * corresponding index element in sec_nums is set to the string
- * representing that section number.
- */
-
argc -= optind;
argv += optind;
@@ -232,6 +238,7 @@
fprintf(cbdata.out, "</table>\n</body>\n</html>\n");
free(query);
+ free(aflags.sec_nums);
close_db(db);
if (errmsg) {
warnx("%s", errmsg);
Index: makemandb.c
===================================================================
RCS file: /cvsroot/src/usr.sbin/makemandb/makemandb.c,v
retrieving revision 1.36
diff -u -r1.36 makemandb.c
--- makemandb.c 13 Apr 2016 01:41:18 -0000 1.36
+++ makemandb.c 13 Apr 2016 06:02:22 -0000
@@ -71,7 +71,7 @@
secbuff exit_status; // EXIT STATUS
secbuff diagnostics; // DIAGNOSTICS
secbuff errors; // ERRORS
- char section[2];
+ char *section;
int xr_found; // To track whether a .Xr was seen when parsing a section
@@ -774,7 +774,7 @@
rc = sqlite3_prepare_v2(db, sqlstr, -1, &stmt, NULL);
if (rc != SQLITE_OK) {
if (mflags.verbosity)
- warnx("%s", sqlite3_errmsg(db));
+ warnx("%s", sqlite3_errmsg(db));
close_db(db);
errx(EXIT_FAILURE, "Could not query file cache");
}
@@ -954,15 +954,15 @@
if (md) {
const struct mdoc_meta *md_meta = mdoc_meta(md);
if (md_meta->msec == NULL) {
- rec->section[0] = '?';
+ easprintf(&rec->section, "%s", "?");
} else
- rec->section[0] = md_meta->msec[0];
+ rec->section = estrdup(md_meta->msec);
} else if (m) {
const struct man_meta *m_meta = man_meta(m);
if (m_meta->msec == NULL)
- rec->section[0] = '?';
+ easprintf(&rec->section, "%s", "?");
else
- rec->section[0] = m_meta->msec[0];
+ rec->section = estrdup(m_meta->msec);
} else
return;
@@ -1583,7 +1583,7 @@
char *tmp;
rec->links = estrdup(rec->name);
free(rec->name);
- int sz = strcspn(rec->links, " \0");
+ size_t sz = strcspn(rec->links, " \0");
rec->name = emalloc(sz + 1);
memcpy(rec->name, rec->links, sz);
if(rec->name[sz - 1] == ',')
@@ -1989,6 +1989,9 @@
free(rec->md5_hash);
rec->md5_hash = NULL;
+
+ free(rec->section);
+ rec->section = NULL;
}
/*
From: "Christos Zoulas" <christos@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/51062 CVS commit: src/usr.sbin/makemandb
Date: Wed, 13 Apr 2016 07:48:29 -0400
Module Name: src
Committed By: christos
Date: Wed Apr 13 11:48:29 UTC 2016
Modified Files:
src/usr.sbin/makemandb: apropos-utils.c apropos-utils.h apropos.c
makemandb.c
Log Message:
PR/51062: Abhinav Upadhyay: Allow non numeric sections to be indexed and
searched by apropos(1).
Fold long lines.
To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/usr.sbin/makemandb/apropos-utils.c
cvs rdiff -u -r1.10 -r1.11 src/usr.sbin/makemandb/apropos-utils.h
cvs rdiff -u -r1.18 -r1.19 src/usr.sbin/makemandb/apropos.c
cvs rdiff -u -r1.36 -r1.37 src/usr.sbin/makemandb/makemandb.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: christos@zoulas.com (Christos Zoulas)
To: Abhinav Upadhyay <er.abhinav.upadhyay@gmail.com>
Cc: NetBSD GNATS <gnats-bugs@netbsd.org>, gnats-admin@netbsd.org,
netbsd-bugs@netbsd.org
Subject: Re: bin/51062: Allow non numeric sections to be indexed and searched by apropos(1)
Date: Wed, 13 Apr 2016 07:50:10 -0400
On Apr 13, 11:55am, er.abhinav.upadhyay@gmail.com (Abhinav Upadhyay) wrote:
-- Subject: Re: bin/51062: Allow non numeric sections to be indexed and searc
Applied, thanks!
christos
From: Abhinav Upadhyay <er.abhinav.upadhyay@gmail.com>
To: Christos Zoulas <christos@zoulas.com>
Cc: NetBSD GNATS <gnats-bugs@netbsd.org>, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: bin/51062: Allow non numeric sections to be indexed and searched
by apropos(1)
Date: Wed, 13 Apr 2016 17:26:38 +0530
On Wed, Apr 13, 2016 at 5:20 PM, Christos Zoulas <christos@zoulas.com> wrote:
> On Apr 13, 11:55am, er.abhinav.upadhyay@gmail.com (Abhinav Upadhyay) wrote:
> -- Subject: Re: bin/51062: Allow non numeric sections to be indexed and searc
>
> Applied, thanks!
>
Thanks Christos :)
--
Abhinav
State-Changed-From-To: open->closed
State-Changed-By: wiz@NetBSD.org
State-Changed-When: Wed, 13 Apr 2016 12:16:33 +0000
State-Changed-Why:
Committed by christos, thanks!
From: Abhinav Upadhyay <er.abhinav.upadhyay@gmail.com>
To: NetBSD GNATS <gnats-bugs@netbsd.org>
Cc: gnats-admin@netbsd.org, netbsd-bugs@netbsd.org,
Thomas Klausner <wiz@netbsd.org>
Subject: Re: bin/51062 (Allow non numeric sections to be indexed and searched
by apropos(1))
Date: Wed, 13 Apr 2016 20:14:48 +0530
On Wed, Apr 13, 2016 at 5:46 PM, <wiz@netbsd.org> wrote:
> Synopsis: Allow non numeric sections to be indexed and searched by apropos(1)
>
> State-Changed-From-To: open->closed
> State-Changed-By: wiz@NetBSD.org
> State-Changed-When: Wed, 13 Apr 2016 12:16:33 +0000
> State-Changed-Why:
> Committed by christos, thanks!
I think bin/46081 can also be closed :)
--
Abhinav
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2014
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.