File install-info.diff of Package texinfo

Index: install-info/install-info.c
===================================================================
RCS file: /sources/texinfo/texinfo/install-info/install-info.c,v
retrieving revision 1.10
retrieving revision 1.13
diff -u -a -p -u -p -a -r1.10 -r1.13
--- install-info/install-info.c	19 Apr 2008 17:03:14 -0000	1.10
+++ install-info/install-info.c	18 May 2008 16:54:02 -0000	1.13
@@ -1,5 +1,5 @@
 /* install-info -- create Info directory entry(ies) for an Info file.
-   $Id: install-info.c,v 1.10 2008/04/19 17:03:14 karl Exp $
+   $Id: install-info.c,v 1.13 2008/05/18 16:54:02 karl Exp $
 
    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
    2005, 2007, 2008 Free Software Foundation, Inc.
@@ -1445,19 +1445,27 @@ format_entry (char *name, size_t name_le
    free'd.
  */
 static void
-split_entry (char *entry, char **name, size_t *name_len, char **description, size_t *description_len)
+split_entry (const char *entry, char **name, size_t *name_len,
+             char **description, size_t *description_len)
 {
   char *endptr;
 
-  /* on the first line, the description starts after the first period. */
+  /* on the first line, the description starts after the first ". ";
+     that's a period and space -- our heuristic to handle item names like
+     "config.status", and node names like "config.status Invocation".
+     Also accept period-tab and period-newline.  */
   char *ptr = strchr (entry, '.');
+  while (ptr && ptr[1] != ' ' && ptr[1] != '\t' && ptr[1] != '\n') {
+    ptr = strchr (ptr + 1, '.');
+  }
+  
   /* Maybe there's no period, and no description */
   if (!ptr)
     {
       size_t length = strlen (entry);
       if (length == 0)
         return;
-      *name = strdup (ptr);
+      *name = strdup (entry);
       *name_len = length + 1;
       return;
     }
@@ -1474,7 +1482,6 @@ split_entry (char *entry, char **name, s
 
   while (ptr[0] != '\0')
     {
-
       /* Eat up the whitespace after the name, and at the start of a line. */
       while (isspace(ptr[0]))
         ptr++;
@@ -1598,14 +1605,14 @@ add_missing_basenames (struct spec_entry
           /* Insert NAME into the right place in ENTRY->TEXT. */
           char *info, *rest, *text;
           size_t name_len = strlen (name);
-          char *ptr = strstr (entry->text, ": ().");
+          char *ptr = strstr (entry->text, ": (). ");
           if (!ptr)
             return;
           ptr[0] = '\0';
-          rest = ptr += sizeof (": ().");
+          rest = ptr += strlen (": (). ");
 
-          info = xmalloc (name_len +  6);
-          snprintf (info, name_len + 6, ": (%s).", name);
+          info = xmalloc (name_len + 7);
+          snprintf (info, name_len + 7, ": (%s). ", name);
           text = concat (entry->text, info, rest);
           free (info);
           if (entry->text)
@@ -1672,8 +1679,8 @@ add_missing_descriptions (struct spec_en
         {
           char *text;
           int add_nl = 1;
-          if (entry->text)
-            if (entry->text[entry->text_len - 1] == '\n')
+          if (strlen (desc) > 1)
+            if (desc[strlen (desc) - 1] == '\n')
               add_nl = 0;
           /* Append DESC onto ENTRY->TEXT. */
           text = concat (entry->text == NULL ? "" : entry->text, desc,
@@ -1910,8 +1917,11 @@ main (int argc, char *argv[])
                   nl[0] = '\0';
               }
             /* Concat the description onto the current entry, adding a 
-               newline if we need one. */
-            next->text = concat (next->text == NULL ? "" : next->text, optarg, 
+               newline if we need one.  Prepend a space if we have no
+               previous text, since eventually we will be adding the
+               "* foo ()." and we want to end up with a ". " for parsing.  */
+            next->text = concat (next->text ? next->text : " ",
+                                 optarg, 
                                  optarg[length - 1] == '\n' ? "" : "\n");
             next->text_len = strlen (next->text);
           }
@@ -1958,20 +1968,20 @@ main (int argc, char *argv[])
             size_t length;
             if (optarg[0] != '*')
               {
-                /* Make enough space for "* foo: ().\n". */
+                /* Make enough space for "* foo: (). ". */
                 length = strlen (optarg) + 9;
                 next->text = xmalloc (length);
-                snprintf (next->text, length, "* %s: ().\n", optarg);
+                snprintf (next->text, length, "* %s: (). ", optarg);
                 next->missing_basename = 1;
                 /* The basename will be inserted in between the parentheses
                    at a later time.  See add_missing_basenames. */
               }
             else
               {
-                /* Make enough space for "foo\n". */
+                /* Make enough space for "foo ". */
                 length = strlen (optarg) + 2;
                 next->text = xmalloc (length);
-                snprintf (next->text, length, "%s\n", optarg);
+                snprintf (next->text, length, "%s ", optarg);
                 next->missing_basename = 0;
                 /* FIXME: check for info entry correctness in TEXT. 
                    e.g. `* Aaa: (bbb).' */
openSUSE Build Service is sponsored by