aboutsummaryrefslogtreecommitdiff
path: root/archivers/sharutils/files/patch-buffer-check
diff options
context:
space:
mode:
Diffstat (limited to 'archivers/sharutils/files/patch-buffer-check')
-rw-r--r--archivers/sharutils/files/patch-buffer-check98
1 files changed, 0 insertions, 98 deletions
diff --git a/archivers/sharutils/files/patch-buffer-check b/archivers/sharutils/files/patch-buffer-check
deleted file mode 100644
index 46cf35e8a7f4..000000000000
--- a/archivers/sharutils/files/patch-buffer-check
+++ /dev/null
@@ -1,98 +0,0 @@
-Index: src/shar.c
-===================================================================
-RCS file: /home/ke/cvsroot/sharutils/src/shar.c,v
-retrieving revision 1.22
-diff -u -r1.22 shar.c
---- src/shar.c 2 Dec 2002 20:52:10 -0000 1.22
-+++ src/shar.c 15 May 2004 09:13:16 -0000
-@@ -255,11 +255,11 @@
- /* Position for first file in the shar file. */
- static off_t first_file_position;
-
--/* Base for output filename. FIXME: No fix limit in GNU... */
--static char output_base_name[50];
-+/* Base for output filename. */
-+static char *output_base_name;
-
--/* Actual output filename. FIXME: No fix limit in GNU... */
--static char output_filename[50];
-+/* Actual output filename. */
-+static char *output_filename;
-
- static char *submitter_address = NULL;
-
-@@ -1727,7 +1727,12 @@
- static void
- open_output ()
- {
-- sprintf (output_filename, output_base_name, ++part_number);
-+ size_t l;
-+ l = strlen(output_base_name) + 128;
-+ if (output_filename)
-+ free(output_filename);
-+ output_filename = xmalloc(l);
-+ snprintf(output_filename, l, output_base_name, ++part_number);
- output = fopen (output_filename, "w");
- if (!output)
- error (EXIT_FAILURE, errno, _("Opening `%s'"), output_filename);
-@@ -1907,6 +1912,42 @@
- file_size_limit = lim;
- }
-
-+
-+char *parse_output_base_name(char *arg)
-+{
-+ int c;
-+ int hadarg = 0;
-+ char *fmt, *p;
-+
-+ for (p = arg ; (c = *p++) != 0; )
-+ {
-+ if (c != '%')
-+ continue;
-+ c = *p++;
-+ if (c == '%')
-+ continue;
-+ if (hadarg)
-+ return 0;
-+ while (c != 0 && strchr("#0+- 'I", c) != 0)
-+ c = *p++;
-+ while (c != 0 && c >= '0' && c <= '9')
-+ c = *p++;
-+ if (c == '.')
-+ c = *p++;
-+ while (c != 0 && c >= '0' && c <= '9')
-+ c = *p++;
-+ if (c == 0 || strchr("diouxX", c) == 0)
-+ return 0;
-+ hadarg = 1;
-+ }
-+ fmt = xmalloc(strlen(arg) + (hadarg ? 1 : 6));
-+ strcpy(fmt, arg);
-+ if (!hadarg)
-+ strcat(fmt, ".%02d");
-+ return fmt;
-+}
-+
-+
- /*---.
- | ? |
- `---*/
-@@ -2047,9 +2088,14 @@
- break;
-
- case 'o':
-- strcpy (output_base_name, optarg);
-- if (!strchr (output_base_name, '%'))
-- strcat (output_base_name, ".%02d");
-+ if (output_base_name)
-+ free (output_base_name);
-+ output_base_name = parse_output_base_name(optarg);
-+ if (!output_base_name)
-+ {
-+ fprintf (stderr, _("illegal output prefix\n"));
-+ exit (EXIT_FAILURE);
-+ }
- part_number = 0;
- open_output ();
- break;