]> git.alsa-project.org Git - alsa-utils.git/commitdiff
arecord: Remove only regular files
authorAlexander Volkov <a.volkov@rusbitech.ru>
Mon, 21 Sep 2015 13:05:57 +0000 (16:05 +0300)
committerTakashi Iwai <tiwai@suse.de>
Wed, 23 Sep 2015 13:27:40 +0000 (15:27 +0200)
arecord removes a file before writing into it. It's not
appropriate in some cases. For example, if you a pass
a symlink to a file, then the symlink will be removed
while the user expects to record into the symlink's target.
Another case is recording into the device file. Some
modems provide a tty device file as a voice device.
And it's not possible to write into it under root with
arecord, because it removes the device file.

So check the type of a file before writing into it and
remove only regular files.

Signed-off-by: Alexander Volkov <a.volkov@rusbitech.ru>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
aplay/aplay.c

index 459f7dd6f6673896742ac1e8cfe1da30e3ff0e3c..1b2cdfc527cabb9299e8c827a267a75e52c3ef57 100644 (file)
@@ -2929,6 +2929,7 @@ static void capture(char *orig_name)
        char *name = orig_name; /* current filename */
        char namebuf[PATH_MAX+1];
        off64_t count, rest;            /* number of bytes to capture */
+       struct stat statbuf;
 
        /* get number of bytes to capture */
        count = calc_count();
@@ -2973,7 +2974,10 @@ static void capture(char *orig_name)
                        }
                        
                        /* open a new file */
-                       remove(name);
+                       if (!lstat(name, &statbuf)) {
+                               if (S_ISREG(statbuf.st_mode))
+                                       remove(name);
+                       }
                        fd = safe_open(name);
                        if (fd < 0) {
                                perror(name);