You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.9 KiB
147 lines
3.9 KiB
Support macro names longer than two chars (closes: #408232).
|
|
|
|
diff -ruN -x '*.rej' -x '*.orig' man-1.6e-old/man2html/defs.h man-1.6e/man2html/defs.h
|
|
--- man-1.6e-old/man2html/defs.h 2005-08-21 01:26:06.000000000 +0200
|
|
+++ man-1.6e/man2html/defs.h 2007-04-20 11:41:55.000000000 +0200
|
|
@@ -8,6 +8,15 @@
|
|
STRDEF *next;
|
|
};
|
|
|
|
+typedef struct LONGSTRDEF LONGSTRDEF;
|
|
+struct LONGSTRDEF {
|
|
+ int nr,slen;
|
|
+ char *longname;
|
|
+ char *st;
|
|
+ LONGSTRDEF *next;
|
|
+};
|
|
+
|
|
+
|
|
typedef struct INTDEF INTDEF;
|
|
struct INTDEF {
|
|
int nr;
|
|
@@ -16,12 +25,14 @@
|
|
INTDEF *next;
|
|
};
|
|
|
|
-extern STRDEF *chardef, *strdef, *defdef;
|
|
+extern STRDEF *chardef, *strdef;
|
|
+extern LONGSTRDEF *defdef;
|
|
extern INTDEF *intdef;
|
|
|
|
#define V(A,B) ((A)*256+(B))
|
|
|
|
#include <sys/types.h>
|
|
+extern LONGSTRDEF *find_longstrdef(LONGSTRDEF* head, int nr, char * longname, char ** out_longname);
|
|
extern void stdinit(void);
|
|
extern void print_sig(void);
|
|
extern char *lookup_abbrev(char *);
|
|
diff -ruN -x '*.rej' -x '*.orig' man-1.6e-old/man2html/man2html.c man-1.6e/man2html/man2html.c
|
|
--- man-1.6e-old/man2html/man2html.c 2007-04-20 11:40:27.000000000 +0200
|
|
+++ man-1.6e/man2html/man2html.c 2007-04-20 11:43:40.000000000 +0200
|
|
@@ -1676,7 +1676,7 @@
|
|
char *wordlist[20];
|
|
int words;
|
|
char *sl;
|
|
- STRDEF *owndef;
|
|
+ LONGSTRDEF *owndef;
|
|
|
|
while (*c == ' ' || *c == '\t')
|
|
c++;
|
|
@@ -2378,11 +2378,13 @@
|
|
/* .de xx yy : define or redefine macro xx; end at .yy (..) */
|
|
/* define or handle as .ig yy */
|
|
{
|
|
- STRDEF *de;
|
|
+ LONGSTRDEF *de;
|
|
+ char *longname;
|
|
int olen=0;
|
|
c=c+j;
|
|
sl=fill_words(c, wordlist, SIZE(wordlist), &words, '\n');
|
|
i=V(c[0],c[1]);j=2;
|
|
+ longname = c;
|
|
if (words == 1) wordlist[1]=".."; else {
|
|
wordlist[1]--;
|
|
wordlist[1][0]='.';
|
|
@@ -2391,8 +2393,7 @@
|
|
c=sl+1;
|
|
sl=c;
|
|
while (*c && strncmp(c,wordlist[1],j)) c=skip_till_newline(c);
|
|
- de=defdef;
|
|
- while (de && de->nr!= i) de=de->next;
|
|
+ de = find_longstrdef(defdef, i, longname, &longname);
|
|
if (mode && de) olen=strlen(de->st);
|
|
j=olen+c-sl;
|
|
h= (char*) xmalloc((j*2+4)*sizeof(char));
|
|
@@ -2413,8 +2414,9 @@
|
|
if (de->st) free(de->st);
|
|
de->st=h;
|
|
} else {
|
|
- de = (STRDEF*) xmalloc(sizeof(STRDEF));
|
|
+ de = (LONGSTRDEF*) xmalloc(sizeof(LONGSTRDEF));
|
|
de->nr=i;
|
|
+ de->longname=longname;
|
|
de->next=defdef;
|
|
de->st=h;
|
|
defdef=de;
|
|
@@ -2893,13 +2895,12 @@
|
|
|
|
default:
|
|
/* search macro database of self-defined macros */
|
|
- owndef = defdef;
|
|
- while (owndef && owndef->nr!=i) owndef=owndef->next;
|
|
+ owndef = find_longstrdef(defdef, i, c, NULL);
|
|
if (owndef) {
|
|
char **oldargument;
|
|
int deflen;
|
|
int onff;
|
|
- sl=fill_words(c+j, wordlist, SIZE(wordlist), &words, '\n');
|
|
+ sl=fill_words(c+strlen(owndef->longname), wordlist, SIZE(wordlist), &words, '\n');
|
|
c=sl+1;
|
|
*sl=0;
|
|
for (i=1; i<words; i++)
|
|
diff -ruN -x '*.rej' -x '*.orig' man-1.6e-old/man2html/strdefs.c man-1.6e/man2html/strdefs.c
|
|
--- man-1.6e-old/man2html/strdefs.c 2007-04-20 11:40:27.000000000 +0200
|
|
+++ man-1.6e/man2html/strdefs.c 2007-04-20 11:43:55.000000000 +0200
|
|
@@ -1,4 +1,6 @@
|
|
#include "defs.h"
|
|
+#include <ctype.h>
|
|
+#include <string.h>
|
|
|
|
#ifndef NULL
|
|
#define NULL ((void *) 0)
|
|
@@ -9,7 +11,8 @@
|
|
#define NROFF (-666)
|
|
#define TROFF (-667)
|
|
|
|
-STRDEF *chardef, *strdef, *defdef;
|
|
+STRDEF *chardef, *strdef;
|
|
+LONGSTRDEF *defdef;
|
|
INTDEF *intdef;
|
|
|
|
static INTDEF standardint[] = {
|
|
@@ -178,3 +181,24 @@
|
|
intdef = &standardint[0];
|
|
defdef = NULL;
|
|
}
|
|
+
|
|
+
|
|
+LONGSTRDEF* find_longstrdef(LONGSTRDEF * head, int nr, char * longname, char ** out_longname)
|
|
+{
|
|
+ char *p, c;
|
|
+ LONGSTRDEF *de;
|
|
+
|
|
+ p = longname;
|
|
+ while (p && !isspace(*p)) p++;
|
|
+ c = *p;
|
|
+ *p = 0;
|
|
+
|
|
+ de = head;
|
|
+ while (de && (de->nr != nr || (de->longname && strcmp(longname, de->longname))))
|
|
+ de = de->next;
|
|
+
|
|
+ if (out_longname)
|
|
+ *out_longname = de ? de->longname : xstrdup(longname);
|
|
+ *p = c;
|
|
+ return de;
|
|
+}
|