]> git.ipfire.org Git - thirdparty/tar.git/commitdiff
Avoid malloc in change_tape_menu
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 2 Nov 2024 17:15:03 +0000 (10:15 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 2 Nov 2024 20:43:05 +0000 (13:43 -0700)
* src/buffer.c (change_tape_menu): Avoid unnecessary xstrdup.

src/buffer.c

index 6b55af26d9a415af310d7cced5949e6bff9c71eb..21a89374f752e402b210ffdc57e680b238badc0c 100644 (file)
@@ -1216,9 +1216,8 @@ change_tape_menu (FILE *read_file)
 {
   char *input_buffer = NULL;
   size_t size = 0;
-  bool stop = false;
 
-  while (!stop)
+  while (true)
     {
       fputc ('\007', stderr);
       fprintf (stderr,
@@ -1283,17 +1282,18 @@ change_tape_menu (FILE *read_file)
 
             for (cursor = name; *cursor && *cursor != '\n'; cursor++)
               ;
-            *cursor = '\0';
 
-            if (name[0])
+            if (cursor != name)
               {
-                /* FIXME: the following allocation is never reclaimed.  */
-                *archive_name_cursor = xstrdup (name);
-                stop = true;
+               memmove (input_buffer, name, cursor - name);
+               input_buffer[cursor - name] = '\0';
+               *archive_name_cursor = input_buffer;
+               /* FIXME: *archive_name_cursor is never freed.  */
+               return;
               }
-            else
-              fprintf (stderr, "%s",
-                       _("File name not specified. Try again.\n"));
+
+           fprintf (stderr, "%s",
+                    _("File name not specified. Try again.\n"));
           }
           break;