Date: Tue, 26 Oct 1999 13:51:33 +0200 (IST) From: Eli Zaretskii X-Sender: eliz AT is To: "Juan Manuel Guerrero, Student, FB05" cc: djgpp AT delorie DOT com Subject: Re: djlsr203 (990819) In-Reply-To: <84E1E9836AE@HRZ1.hrz.tu-darmstadt.de> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Reply-To: djgpp AT delorie DOT com X-Mailing-List: djgpp AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk On Tue, 12 Oct 1999, Juan Manuel Guerrero, Student, FB05 wrote: > When decompressing a tgz-file with an entry of the form: > libg++-1.2.3/libg++/readme.g++ > the program performs the substitution: > ++ --> plus. > It should be clear that this substitution must be applied to all > occuriences of "++" and not only to the first as the program does. Thanks for the report and the patches. I corrected the problem in DJTAR a bit differently; see the patch below. The corrected version will be in DJGPP v2.03. --- src/utils/djtar/djtar.c~1 Tue Aug 24 16:03:00 1999 +++ src/utils/djtar/djtar.c Fri Oct 15 10:58:38 1999 @@ -1,3 +1,4 @@ +/* Copyright (C) 1999 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */ @@ -6,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -297,34 +299,40 @@ get_new_name(char *name_to_change, int * changed_name = get_entry(name_to_change); if (*should_be_written && !to_stdout && NO_LFN(changed_name)) { - info = strstr(changed_name, ".info-"); - if (info) + static char info_[] = ".info-"; + info = strstr(changed_name, info_); + if (info && isdigit(info[sizeof(info_)-1])) { strcpy(new, changed_name); - info = strstr(new, ".info-"); - strcpy(info+2, info+6); + info = strstr(new, info_); + strcpy(info+2, info+sizeof(info_)-1); fprintf(log_out, "[ changing %s to %s ]\n", changed_name, new); } else { - char *tgz = strstr(changed_name, ".tar.gz"); - if (tgz) + static char _tar_gz[] = ".tar.gz", _tgz[] = ".tgz"; + char *tgz = strstr(changed_name, _tar_gz); + if (tgz && tgz[sizeof(_tar_gz)-1] == '\0') { strcpy(new, changed_name); - tgz = strstr(new, ".tar.gz"); - strcpy(tgz, ".tgz"); - strcat(tgz, tgz+7); + tgz += new - changed_name; + strcpy(tgz, _tgz); fprintf(log_out, "[ changing %s to %s ]\n", changed_name, new); } else { - char *plus = strstr(changed_name, "++"), *plus2; + static char xx[] = "++"; + register char *plus = strstr(changed_name, xx); if (plus) { strcpy(new, changed_name); - plus2 = strstr(new, "++"); - strcpy(plus2, "plus"); - strcpy(plus2+4, plus+2); + plus += new - changed_name; + while (plus) + { + *plus++ = 'x'; + *plus++ = 'x'; + plus = strstr(plus, xx); + } fprintf(log_out, "[ changing %s to %s ]\n", changed_name, new); } else --- src/utils/utils.t~0 Tue Jun 1 09:23:16 1999 +++ src/utils/utils.tex Fri Oct 15 11:10:34 1999 @@ -153,14 +153,15 @@ @code{djtar} performs a number of file name conversions in an attempt to make the files fit into MS-DOS's restricted file names. Any file -ending in @file{.info-N} becomes @file{.iN}. Any file ending in -@file{.tar.gz} becomes @file{.tgz}. Any file with @file{++} becomes -@file{plus}. Any leading dots are changed to underscores (but current -and parent directories, @file{./} and @file{../} are left alone). Any -remaining multiple dots are changed to dashes, unless the part before the -dot is shorter than 3 characters and there are more than 1 dot in the -filename, in which case the dot also becomes an underscore. As a result, -e.g., @file{.foo.a.b} becomes @file{_foo.a-b}, and @file{sh.lex.c} becomes +ending in @file{.info- AT var{n}}, where @var{n} is a number, becomes +@file{.i AT var{n}}. Any file ending in @file{.tar.gz} becomes +@file{.tgz}. Any @file{++} string within a file name becomes @file{xx}. +Any leading dots are changed to underscores (but current and parent +directories, @file{./} and @file{../} are left alone). Any remaining +multiple dots are changed to dashes, unless the part before the dot is +shorter than 3 characters and there are more than 1 dot in the filename, +in which case the dot also becomes an underscore. As a result, e.g., +@file{.foo.a.b} becomes @file{_foo.a-b}, and @file{sh.lex.c} becomes @file{sh_lex.c}. While @code{djtar} is running, if it cannot successfully perform an