[alsa-devel] [PATCH - alsa-utils 1/1] arecord: Remove only regular files

Александр Волков a.volkov at rusbitech.ru
Tue Sep 22 16:07:21 CEST 2015


22.09.2015 16:24, Arun Raghavan пишет:
> On 21 September 2015 at 18:35, Alexander Volkov <a.volkov at rusbitech.ru> wrote:
>> 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 at rusbitech.ru>
>>
>> diff --git a/aplay/aplay.c b/aplay/aplay.c
>> index 459f7dd..1b2cdfc 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);
> Would it work to just open with O_TRUNC?
>
> -- Arun
I guess that "remove" is used here to exclude mutual access to the file.
We can record to the created file while some program may read the 
removed file.
Using O_TRUNC will break this use case.



More information about the Alsa-devel mailing list