Sophie

Sophie

distrib > Fedora > 18 > x86_64 > by-pkgid > 4943cd111874246a32af7558e92aab7d > files > 17

man2html-1.6-10.g.fc18.src.rpm

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;
+}