File 0011-arecord-Remove-only-regular-files.patch of Package alsa-utils
From 5f0fc49a3ab9e9a66eb7a74582829c21556506a1 Mon Sep 17 00:00:00 2001
From: Alexander Volkov <a.volkov@rusbitech.ru>
Date: Mon, 21 Sep 2015 16:05:57 +0300
Subject: [PATCH] arecord: Remove only regular files
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 | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/aplay/aplay.c b/aplay/aplay.c
index 459f7dd6f667..1b2cdfc527ca 100644
--- a/aplay/aplay.c
+++ b/aplay/aplay.c
@@ -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);
--
2.5.3