Removed extra free
[pspp-builds.git] / src / repeat.c
index 42467096808b98d9a6891584c383b41eb65ce6da..c0510c5d5e26fc94df4dca0514660c369e8efe4d 100644 (file)
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA. */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
 
 #include <config.h>
 #include "repeat.h"
 #include "command.h"
 #include "dictionary.h"
 #include "error.h"
-#include "getline.h"
+#include "getl.h"
 #include "lexer.h"
 #include "misc.h"
 #include "settings.h"
 #include "str.h"
 #include "var.h"
 
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
 #include "debug-print.h"
 
 /* Describes one DO REPEAT macro. */
 struct repeat_entry
   {
     int type;                  /* 1=variable names, 0=any other. */
-    char id[SHORT_NAME_LEN + 1];       /* Macro identifier. */
+    char id[LONG_NAME_LEN + 1];        /* Macro identifier. */
     char **replacement;                /* Macro replacement. */
     struct repeat_entry *next;
   };
@@ -125,7 +128,7 @@ static int
 internal_cmd_do_repeat (void)
 {
   /* Name of first DO REPEAT macro. */
-  char first_name[SHORT_NAME_LEN + 1];
+  char first_name[LONG_NAME_LEN + 1];
 
   /* Current filename. */
   const char *current_filename = NULL;
@@ -146,7 +149,7 @@ internal_cmd_do_repeat (void)
       if (!lex_force_id ())
        return 0;
       for (iter = repeat_tab; iter; iter = iter->next)
-       if (!strcmp (iter->id, tokid))
+       if (!strcasecmp (iter->id, tokid))
          {
            msg (SE, _("Identifier %s is given twice."), tokid);
            return 0;
@@ -338,8 +341,8 @@ internal_cmd_do_repeat (void)
 static int
 parse_ids (struct repeat_entry * e)
 {
-  int i;
-  int n = 0;
+  size_t i;
+  size_t n = 0;
 
   e->type = 1;
   e->replacement = NULL;
@@ -347,13 +350,13 @@ parse_ids (struct repeat_entry * e)
   do
     {
       char **names;
-      int nnames;
+      size_t nnames;
 
       if (!parse_mixed_vars (&names, &nnames, PV_NONE))
        return 0;
 
-      e->replacement = xrealloc (e->replacement,
-                                (nnames + n) * sizeof *e->replacement);
+      e->replacement = xnrealloc (e->replacement,
+                                  nnames + n, sizeof *e->replacement);
       for (i = 0; i < nnames; i++)
        {
          e->replacement[n + i] = xstrdup (names[i]);
@@ -415,8 +418,8 @@ parse_numbers (struct repeat_entry *e)
       if (n + (abs (b - a) + 1) > m)
        {
          m = n + (abs (b - a) + 1) + 16;
-         e->replacement = array = xrealloc (array,
-                                            m * sizeof *e->replacement);
+         e->replacement = array = xnrealloc (array,
+                                              m, sizeof *e->replacement);
        }
 
       if (a == b)
@@ -467,8 +470,8 @@ parse_strings (struct repeat_entry * e)
       if (n + 1 > m)
        {
          m += 16;
-         e->replacement = string = xrealloc (string,
-                                             m * sizeof *e->replacement);
+         e->replacement = string = xnrealloc (string,
+                                               m, sizeof *e->replacement);
        }
       string[n++] = lex_token_representation ();
       lex_get ();
@@ -476,7 +479,7 @@ parse_strings (struct repeat_entry * e)
       lex_match (',');
     }
   while (token != '/' && token != '.');
-  e->replacement = xrealloc (string, n * sizeof *e->replacement);
+  e->replacement = xnrealloc (string, n, sizeof *e->replacement);
 
   return n;
 }
@@ -553,12 +556,12 @@ perform_DO_REPEAT_substitutions (void)
 
       /* Collect an identifier. */
       {
-       char name[SHORT_NAME_LEN + 1];
+       char name[LONG_NAME_LEN + 1];
        char *start = cp;
        char *np = name;
        char *substitution;
 
-       while (CHAR_IS_IDN (*cp) && np < &name[SHORT_NAME_LEN])
+       while (CHAR_IS_IDN (*cp) && np < &name[LONG_NAME_LEN])
          *np++ = *cp++;
        while (CHAR_IS_IDN (*cp))
          cp++;
@@ -576,7 +579,7 @@ perform_DO_REPEAT_substitutions (void)
       }
     }
   if (dot)
-    ds_putc (&output, get_endcmd() );
+    ds_putc (&output, get_endcmd ());
 
   ds_destroy (&getl_buf);
   getl_buf = output;