Subject: Re: bug#40325: make backup files for "-i" option invisible

From: Assaf Gordon <[email-masked]>
Date: Mon, 30 Mar 2020 23:20:48 -0600

Hello,

On 2020-03-28 10:00 a.m., nokangaroo wrote:
> The visible backup files create problems with file managers, e. g. they show up
> in MATE, and I have to reload the folder to make them disappear. The following
> patch creates invisible files:

Nice idea, and doesn't seem to cause any regressions.
If there are no objects (Jim?), I'll push this soon in your name.
The patch is small enough that copyright assignment is not necessary.

> BTW why not use /tmp instead of '.'?

When using "-i/--in-place", the new content is first written
to the temporary file, and then a rename(2) sys-call is used to replace
the input file with the new file.

When the two files are in the same directory,
such rename(2) sys-call is atomic and quick.

On many systems the "/tmp" directory is mounted
on a different file system (or in memory),
and we'd have to use a non-atomic and slower "copy+delete" instead of
a rename(2).

regards,
  - assaf

>From 281b457e05a9fdb7b13dd3eb038455121b8747f7 Mon Sep 17 00:00:00 2001
From: nokangaroo <[email-masked]>
Date: Mon, 30 Mar 2020 23:07:53 -0600
Subject: [PATCH] sed: make backup files for "-i" option invisible

The visible backup files create problems with file managers, e. g. they
show up in MATE, and I have to reload the folder to make them disappear.
The following patch creates invisible files.

* sed/execute.c (open_next_file): Use ".sed" as basename for ck_mkstemp
to create a hidden file (on unix systems).
---
 sed/execute.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sed/execute.c b/sed/execute.c
index f94b125..28573fc 100644
--- a/sed/execute.c
+++ b/sed/execute.c
@@ -614,7 +614,7 @@ open_next_file (const char *name, struct input *input)
             }
         }
 
-      output_file.fp = ck_mkstemp (&input->out_file_name, tmpdir, "sed",
+      output_file.fp = ck_mkstemp (&input->out_file_name, tmpdir, ".sed",
                                    write_mode);
       register_cleanup_file (input->out_file_name);
       output_file.missing_newline = false;
-- 
2.20.1