diff options
Diffstat (limited to 'archivers/sharutils/files/patch-buffer-check')
| -rw-r--r-- | archivers/sharutils/files/patch-buffer-check | 98 |
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; |
