mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-12-22 22:56:31 +01:00
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>
This commit is contained in:
parent
4482cc7cfe
commit
5f0fc49a3a
1 changed files with 5 additions and 1 deletions
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue