mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-11-09 17:35:42 +01:00
aplay: fix lurking capture file overwrite bug
If -d was given to arecord while commit
8aa13eec80
(now reverted) was in effect,
the last read would be shorter than the chunk size, but pcm_read would
read and return the chunk size, the samples were discarded, and
capture() continued in a loop because count never reached 0. arecord
opens a new file each loop iteration, if arecord is dynamically naming
files, --use-strftime option or beyond the wave 2GB limit, this will
generate a series of header only wave files. If the file is unique
the originally recorded data is lost and it will continue overwriting
the same file with a header only wave file.
While the current pcm_read can't fail (it can exit), it is better to
just fix this lurking bug in case it is "fixed" again.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
96db90e98a
commit
85827fbb64
1 changed files with 6 additions and 3 deletions
|
@ -3067,11 +3067,14 @@ static void capture(char *orig_name)
|
|||
size_t c = (rest <= (off64_t)chunk_bytes) ?
|
||||
(size_t)rest : chunk_bytes;
|
||||
size_t f = c * 8 / bits_per_frame;
|
||||
if (pcm_read(audiobuf, f) != f)
|
||||
if (pcm_read(audiobuf, f) != f) {
|
||||
in_aborting = 1;
|
||||
break;
|
||||
}
|
||||
if (write(fd, audiobuf, c) != c) {
|
||||
perror(name);
|
||||
prg_exit(EXIT_FAILURE);
|
||||
in_aborting = 1;
|
||||
break;
|
||||
}
|
||||
count -= c;
|
||||
rest -= c;
|
||||
|
@ -3091,7 +3094,7 @@ static void capture(char *orig_name)
|
|||
}
|
||||
|
||||
if (in_aborting)
|
||||
break;
|
||||
prg_exit(EXIT_FAILURE);
|
||||
|
||||
/* repeat the loop when format is raw without timelimit or
|
||||
* requested counts of data are recorded
|
||||
|
|
Loading…
Reference in a new issue