texinfo-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[8102] parsetexi deal with extra string allocation


From: gavinsmith0123
Subject: [8102] parsetexi deal with extra string allocation
Date: Sat, 18 Aug 2018 07:02:26 -0400 (EDT)

Revision: 8102
          http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=8102
Author:   gavin
Date:     2018-08-18 07:02:26 -0400 (Sat, 18 Aug 2018)
Log Message:
-----------
parsetexi deal with extra string allocation

Modified Paths:
--------------
    trunk/tp/Texinfo/XS/parsetexi/def.c
    trunk/tp/Texinfo/XS/parsetexi/end_line.c
    trunk/tp/Texinfo/XS/parsetexi/extra.c
    trunk/tp/Texinfo/XS/parsetexi/handle_commands.c
    trunk/tp/Texinfo/XS/parsetexi/parser.c
    trunk/tp/Texinfo/XS/parsetexi/parser.h
    trunk/tp/Texinfo/XS/parsetexi/separator.c
    trunk/tp/Texinfo/XS/parsetexi/tree.c

Modified: trunk/tp/Texinfo/XS/parsetexi/def.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/def.c 2018-08-18 08:56:52 UTC (rev 8101)
+++ trunk/tp/Texinfo/XS/parsetexi/def.c 2018-08-18 11:02:26 UTC (rev 8102)
@@ -313,8 +313,8 @@
       if (global_documentlanguage && *global_documentlanguage)
         {
           e1->type = ET_untranslated;
-          add_extra_string (e1, "documentlanguage",
-                            global_documentlanguage);
+          add_extra_string_dup (e1, "documentlanguage",
+                                global_documentlanguage);
         }
       e1->parent_type = route_not_in_tree;
 

Modified: trunk/tp/Texinfo/XS/parsetexi/end_line.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/end_line.c    2018-08-18 08:56:52 UTC (rev 
8101)
+++ trunk/tp/Texinfo/XS/parsetexi/end_line.c    2018-08-18 11:02:26 UTC (rev 
8102)
@@ -1217,7 +1217,7 @@
                           && !*(g->text.text
                                 + strspn (g->text.text, "0123456789"))))
                     {
-                      spec = strdup (g->text.text);
+                      spec = g->text.text;
                     }
                   else
                     command_error (current, "bad argument to @%s",
@@ -1224,7 +1224,7 @@
                                    command_name(current->cmd));
                 }
             }
-          add_extra_string (current, "enumerate_specification", spec);
+          add_extra_string_dup (current, "enumerate_specification", spec);
         }
       else if (item_line_command (current->cmd)) // 3002
         {
@@ -1438,8 +1438,6 @@
           text = convert_to_text (trimmed, &superfluous_arg);
         }
 
-      if (!text)
-        text = "";
       destroy_element (trimmed);
 
       if (!text || !strcmp (text, ""))
@@ -1447,6 +1445,7 @@
           if (!superfluous_arg)
             line_warn ("@%s missing argument", command_name(cmd)); // 3123
           add_extra_integer (current, "missing_argument", 1);
+          free (text);
         }
       else
         {
@@ -1557,8 +1556,8 @@
           else if (current->cmd == CM_verbatiminclude)
             {
               if (global_info.input_perl_encoding)
-                add_extra_string (current, "input_perl_encoding",
-                                  global_info.input_perl_encoding);
+                add_extra_string_dup (current, "input_perl_encoding",
+                                      global_info.input_perl_encoding);
             }
           else if (current->cmd == CM_documentencoding) // 3190
             {
@@ -1642,8 +1641,8 @@
                           break;
                         }
                     }
-                  add_extra_string (current, "input_perl_encoding",
-                                    perl_encoding);
+                  add_extra_string_dup (current, "input_perl_encoding",
+                                        perl_encoding);
                   global_info.input_perl_encoding = perl_encoding;
                 }
               else
@@ -1694,8 +1693,8 @@
                 }
               if (input_encoding)
                 {
-                  add_extra_string (current, "input_encoding_name",
-                                    input_encoding);
+                  add_extra_string_dup (current, "input_encoding_name",
+                                        input_encoding);
 
                   global_info.input_encoding_name = input_encoding; // 3210
                   set_input_encoding (input_encoding);
@@ -1748,7 +1747,7 @@
                     }
                 }
 
-              global_documentlanguage = text;
+              global_documentlanguage = strdup (text);
               /* TODO: check customization variable */
             }
         }
@@ -1961,7 +1960,7 @@
               add_extra_string (current, "max_columns", s);
             }
           else
-              add_extra_string (current, "max_columns", "0");
+              add_extra_string_dup (current, "max_columns", "0");
 
           before_item = new_element (ET_before_item);
           add_to_element_contents (current, before_item);
@@ -2299,8 +2298,8 @@
                       || def_command == CM_deftypeivar
                       || def_command == CM_deftypecv))
                 {
-                  add_extra_string (current->parent, "documentlanguage",
-                                    global_documentlanguage);
+                  add_extra_string_dup (current->parent, "documentlanguage",
+                                        global_documentlanguage);
                 }
               else
                 {

Modified: trunk/tp/Texinfo/XS/parsetexi/extra.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/extra.c       2018-08-18 08:56:52 UTC (rev 
8101)
+++ trunk/tp/Texinfo/XS/parsetexi/extra.c       2018-08-18 11:02:26 UTC (rev 
8102)
@@ -122,6 +122,12 @@
 }
 
 void
+add_extra_string_dup (ELEMENT *e, char *key, char *value)
+{
+  add_extra_key (e, key, (ELEMENT *) strdup (value), extra_string);
+}
+
+void
 add_extra_integer (ELEMENT *e, char *key, int value)
 {
   add_extra_key (e, key, (ELEMENT *) value, extra_integer);

Modified: trunk/tp/Texinfo/XS/parsetexi/handle_commands.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/handle_commands.c     2018-08-18 08:56:52 UTC 
(rev 8101)
+++ trunk/tp/Texinfo/XS/parsetexi/handle_commands.c     2018-08-18 11:02:26 UTC 
(rev 8102)
@@ -1024,9 +1024,9 @@
           def_line->line_nr = line_nr;
           add_to_element_contents (current, def_line);
           current = def_line;
-          add_extra_string (current, "def_command", command_name(cmd));
-          add_extra_string (current, "original_def_cmdname", 
-                            command_name(cmd));
+          add_extra_string_dup (current, "def_command", command_name(cmd));
+          add_extra_string_dup (current, "original_def_cmdname", 
+                                command_name(cmd));
         }
       else
         {
@@ -1187,7 +1187,7 @@
   mark_and_warn_invalid (cmd, invalid_parent, e);
   if (cmd == CM_click)
     {
-      add_extra_string (e, "clickstyle", global_clickstyle);
+      add_extra_string_dup (e, "clickstyle", global_clickstyle);
     }
   else if (cmd == CM_kbd)
     {
@@ -1221,8 +1221,8 @@
       INFO_ENCLOSE *ie = lookup_infoenclose (cmd);
       if (ie)
         {
-          add_extra_string (e, "begin", ie->begin);
-          add_extra_string (e, "end", ie->end);
+          add_extra_string_dup (e, "begin", ie->begin);
+          add_extra_string_dup (e, "end", ie->end);
         }
       e->type = ET_definfoenclose_command;
     }

Modified: trunk/tp/Texinfo/XS/parsetexi/parser.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/parser.c      2018-08-18 08:56:52 UTC (rev 
8101)
+++ trunk/tp/Texinfo/XS/parsetexi/parser.c      2018-08-18 11:02:26 UTC (rev 
8102)
@@ -257,7 +257,8 @@
 
       e = new_element (ET_paragraph);
       if (indent)
-        add_extra_string (e, indent == CM_indent ? "indent" : "noindent", "1");
+        add_extra_string_dup (e, indent == CM_indent ? "indent" : "noindent",
+                              "1");
       add_to_element_contents (current, e);
       current = e;
 
@@ -503,8 +504,8 @@
           if (owning_keypair)
             {
               /* Replace element reference with a simple string. */
-              add_extra_string (owning_element, "spaces_before_argument",
-                                owning_keypair->value->text.text);
+              add_extra_string_dup (owning_element, "spaces_before_argument",
+                                    owning_keypair->value->text.text);
 
               owning_keypair->key = "";
               owning_keypair->value = 0;
@@ -729,7 +730,8 @@
                  command_name(command),
                  command_name(invalid_parent));
       if (marked_as_invalid_command)
-        add_extra_string (marked_as_invalid_command, "invalid_nesting", "1");
+        add_extra_string_dup (marked_as_invalid_command, "invalid_nesting",
+                              "1");
     }
 }
 

Modified: trunk/tp/Texinfo/XS/parsetexi/parser.h
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/parser.h      2018-08-18 08:56:52 UTC (rev 
8101)
+++ trunk/tp/Texinfo/XS/parsetexi/parser.h      2018-08-18 11:02:26 UTC (rev 
8102)
@@ -112,6 +112,7 @@
 void add_extra_def_args (ELEMENT *e, char *key, DEF_ARGS_EXTRA *value);
 void add_extra_float_type (ELEMENT *e, char *key, EXTRA_FLOAT_TYPE *value);
 void add_extra_string (ELEMENT *e, char *key, char *value);
+void add_extra_string_dup (ELEMENT *e, char *key, char *value);
 KEY_PAIR *lookup_extra_key (ELEMENT *e, char *key);
 
 /* In menus.c */

Modified: trunk/tp/Texinfo/XS/parsetexi/separator.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/separator.c   2018-08-18 08:56:52 UTC (rev 
8101)
+++ trunk/tp/Texinfo/XS/parsetexi/separator.c   2018-08-18 11:02:26 UTC (rev 
8102)
@@ -421,8 +421,8 @@
               line_error ("@image missing filename argument");
             }
           if (global_info.input_perl_encoding)
-            add_extra_string (image, "input_perl_encoding",
-                              global_info.input_perl_encoding);
+            add_extra_string_dup (image, "input_perl_encoding",
+                                  global_info.input_perl_encoding);
         }
       else if (closed_command == CM_dotless)
         {
@@ -560,8 +560,8 @@
                           & CF_index_entry_command))
                     {
                       index_elt = current->parent->parent->parent;
-                      add_extra_string (index_elt, "sortas",
-                                        e->text.text);
+                      add_extra_string_dup (index_elt, "sortas",
+                                            e->text.text);
                     }
                 }
             }
@@ -734,7 +734,7 @@
           else
             expandp = 0;
 
-          add_extra_string (current, "format", inline_type);
+          add_extra_string_dup (current, "format", inline_type);
 
           /* Skip first argument for a false @inlinefmtifelse */
           if (!expandp && current->cmd == CM_inlinefmtifelse)

Modified: trunk/tp/Texinfo/XS/parsetexi/tree.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/tree.c        2018-08-18 08:56:52 UTC (rev 
8101)
+++ trunk/tp/Texinfo/XS/parsetexi/tree.c        2018-08-18 11:02:26 UTC (rev 
8102)
@@ -60,6 +60,9 @@
     {
       switch (e->extra[i].type)
         {
+        case extra_string:
+          free (e->extra[i].value);
+          break;
         default:
           /* TODO: need to check if the element is in the main tree or not. */
           break;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]