* Re: using "bits" comparison in manpage_compare()
2018-10-29 22:41 using "bits" comparison in manpage_compare() Yuri Pankov
2018-11-21 15:17 ` Yuri Pankov
@ 2018-11-22 12:11 ` Ingo Schwarze
1 sibling, 0 replies; 3+ messages in thread
From: Ingo Schwarze @ 2018-11-22 12:11 UTC (permalink / raw)
To: Yuri Pankov; +Cc: discuss, Edward Tomasz Napierala
Hi Yuri, hi Edward,
Yuri Pankov wrote on Tue, Oct 30, 2018 at 01:41:23AM +0300:
> It looks like using "bits" comparison in manpage_compare() leads to
> somewhat inconsistent output sorting for apropos(1), reported as
> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=227408.
>
> So I've proposed the change below as a "fix", any thoughts on it?
I think you are right, the feature wasn't even documented.
Besides, i have been trying to gradually reduce the importance
of the .Nm bits magic over the years, it is less useful than we
originally thought, and it tends to cause confusion.
Thanks for the suggestion,
Ingo
Log Message:
-----------
In apropos(1) output, stop sorting .Nm search results by name
priorities (bits). The obscure feature wasn't documented and merely
confused people - for example Edward Tomasz Napierala <trasz at
FreeBSD>, see https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=227408.
Smaller patch provided by Yuri Pankov <yuripv at FreeBSD>, but i'm
also retiring the now unused "bits" member from struct manpage.
Simplification is good.
Modified Files:
--------------
mandoc:
main.c
mansearch.c
mansearch.h
Revision Data
-------------
Index: main.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/main.c,v
retrieving revision 1.309
retrieving revision 1.310
diff -Lmain.c -Lmain.c -u -p -r1.309 -r1.310
--- main.c
+++ main.c
@@ -405,7 +405,6 @@ main(int argc, char *argv[])
res[sz].names = NULL;
res[sz].output = NULL;
res[sz].ipath = SIZE_MAX;
- res[sz].bits = 0;
res[sz].sec = 10;
res[sz].form = FORM_SRC;
sz++;
@@ -754,7 +753,6 @@ found:
page->names = NULL;
page->output = NULL;
page->ipath = ipath;
- page->bits = NAME_FILE & NAME_MASK;
page->sec = (*sec >= '1' && *sec <= '9') ? *sec - '1' + 1 : 10;
page->form = form;
return 1;
Index: mansearch.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/mansearch.c,v
retrieving revision 1.78
retrieving revision 1.79
diff -Lmansearch.c -Lmansearch.c -u -p -r1.78 -r1.79
--- mansearch.c
+++ mansearch.c
@@ -201,7 +201,6 @@ mansearch(const struct mansearch *search
mpage->names = buildnames(page);
mpage->output = buildoutput(outkey, page);
mpage->ipath = i;
- mpage->bits = rp->bits;
mpage->sec = *page->sect - '0';
if (mpage->sec < 0 || mpage->sec > 9)
mpage->sec = 10;
@@ -296,10 +295,8 @@ manmerge_term(struct expr *e, struct oha
break;
slot = ohash_lookup_memory(htab,
(char *)&res, sizeof(res.page), res.page);
- if ((rp = ohash_find(htab, slot)) != NULL) {
- rp->bits |= res.bits;
+ if ((rp = ohash_find(htab, slot)) != NULL)
continue;
- }
rp = mandoc_malloc(sizeof(*rp));
*rp = res;
ohash_insert(htab, slot, rp);
@@ -412,8 +409,7 @@ manpage_compare(const void *vp1, const v
mp1 = vp1;
mp2 = vp2;
- if ((diff = mp2->bits - mp1->bits) ||
- (diff = mp1->sec - mp2->sec))
+ if ((diff = mp1->sec - mp2->sec))
return diff;
/* Fall back to alphabetic ordering of names. */
Index: mansearch.h
===================================================================
RCS file: /home/cvs/mandoc/mandoc/mansearch.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -Lmansearch.h -Lmansearch.h -u -p -r1.28 -r1.29
--- mansearch.h
+++ mansearch.h
@@ -93,7 +93,6 @@ struct manpage {
char *names; /* a list of names with sections */
char *output; /* user-defined additional output */
size_t ipath; /* number of the manpath */
- uint64_t bits; /* name type mask */
int sec; /* section number, 10 means invalid */
enum form form;
};
--
To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv
^ permalink raw reply [flat|nested] 3+ messages in thread