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

Arun Raghavan arun at accosted.net
Tue Sep 22 15:24:42 CEST 2015


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


More information about the Alsa-devel mailing list