tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: patch: Option to not create backup files creates backup files



In article <YC+zTnkIGmtS10GZ%homeworld.netbsd.org@localhost>,
nia  <nia%NetBSD.org@localhost> wrote:
>I noticed some odd behaviour when I tried to use patch(1) without
>creating backup files (-V none). It seems this option is ignored,
>and backup files are created anyway. The PATCH_VERSION_CONTROL
>environment variable can also override -V none, which is the
>opposite of the behaviour stated in the man page.
>
>The problem in the code seems to be that patch treats "none"
>as the same as "undefined" (or "no option specified"), and
>freely allows it to be overriden.
>
>If there's no PATCH_VERSION_CONTROL environment variable and
>the backup type is undefined ("none") after the command line
>options are parsed, NULL is passed to get_version, which results
>in numbered_existing being returned, making it impossible to
>use -V none.
>
>This diff introduces an "undefined" backup type and uses it
>in places "none" was previously mistakenly used, allowing
>"none" to be passed with -V and work as expected.
>
>Please review.

LGTM.

christos
>
>Index: patch/backupfile.c
>===================================================================
>RCS file: /cvsroot/src/usr.bin/patch/backupfile.c,v
>retrieving revision 1.15
>diff -u -r1.15 backupfile.c
>--- patch/backupfile.c	11 Apr 2014 17:30:03 -0000	1.15
>+++ patch/backupfile.c	19 Feb 2021 12:39:45 -0000
>@@ -38,7 +38,7 @@
> #define ISDIGIT(c) (isascii ((unsigned char)c) && isdigit ((unsigned char)c))
> 
> /* Which type of backup file names are generated. */
>-enum backup_type backup_type = none;
>+enum backup_type backup_type = undefined;
> 
> /*
>  * The extension added to file names to produce a simple (as opposed to
>Index: patch/backupfile.h
>===================================================================
>RCS file: /cvsroot/src/usr.bin/patch/backupfile.h,v
>retrieving revision 1.6
>diff -u -r1.6 backupfile.h
>--- patch/backupfile.h	19 Sep 2008 18:33:34 -0000	1.6
>+++ patch/backupfile.h	19 Feb 2021 12:39:45 -0000
>@@ -19,6 +19,8 @@
> 
> /* When to make backup files. */
> enum backup_type {
>+	undefined,
>+
> 	/* Never make backups. */
> 	none,
> 
>Index: patch/patch.c
>===================================================================
>RCS file: /cvsroot/src/usr.bin/patch/patch.c,v
>retrieving revision 1.29
>diff -u -r1.29 patch.c
>--- patch/patch.c	6 Sep 2011 18:25:14 -0000	1.29
>+++ patch/patch.c	19 Feb 2021 12:39:45 -0000
>@@ -197,17 +197,18 @@
> 	else
> 		simple_backup_suffix = ORIGEXT;
> 
>+	if ((v = getenv("PATCH_VERSION_CONTROL")) == NULL)
>+		v = getenv("VERSION_CONTROL");
>+	if (v != NULL)
>+		backup_type = get_version(v);
>+
> 	/* parse switches */
> 	Argc = argc;
> 	Argv = argv;
> 	get_some_switches();
> 
>-	if (backup_type == none) {
>-		if ((v = getenv("PATCH_VERSION_CONTROL")) == NULL)
>-			v = getenv("VERSION_CONTROL");
>-		if (v != NULL || !posix)
>-			backup_type = get_version(v);	/* OK to pass NULL. */
>-	}
>+	if (backup_type == undefined)
>+		backup_type = posix ? none : numbered_existing;
> 
> 	/* make sure we clean up /tmp in case of disaster */
> 	set_signals(0);
>@@ -493,7 +494,7 @@
> 	while ((ch = getopt_long(Argc, Argv, options, longopts, NULL)) != -1) {
> 		switch (ch) {
> 		case 'b':
>-			if (backup_type == none)
>+			if (backup_type == undefined)
> 				backup_type = numbered_existing;
> 			if (optarg == NULL)
> 				break;
>





Home | Main Index | Thread Index | Old Index