summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2003-11-03 20:06:21 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2003-11-03 20:06:21 +0000
commit532eb411acd39bce499c2127422eddcb376adf62 (patch)
tree613237402c4d6ad179edefc62f9a0be8156f6fa2
parentd9e8bfee75232dacdecd3f0f0c5edb1f01a4509b (diff)
downloadrockbox-532eb411acd39bce499c2127422eddcb376adf62.zip
rockbox-532eb411acd39bce499c2127422eddcb376adf62.tar.gz
rockbox-532eb411acd39bce499c2127422eddcb376adf62.tar.bz2
rockbox-532eb411acd39bce499c2127422eddcb376adf62.tar.xz
Now handles empty recordings without crashing. This fixes bug #835158.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4006 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/mpeg.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index 480cb1b..e42623c 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -1924,7 +1924,14 @@ static void mpeg_thread(void)
/* Read the first MP3 frame from the recorded stream */
lseek(mpeg_file, MPEG_RESERVED_HEADER_SPACE, SEEK_SET);
- read(mpeg_file, &saved_header, 4);
+ rc = read(mpeg_file, &saved_header, 4);
+ if(rc <= 0)
+ {
+ close(mpeg_file);
+ mpeg_file = -1;
+ mpeg_stop_done = true;
+ break;
+ }
framelen = create_xing_header(mpeg_file, 0,
num_rec_bytes, mp3buf,
@@ -1980,13 +1987,21 @@ static void mpeg_thread(void)
DEBUGF("Header: %08x\n", saved_header);
}
- mem_find_next_frame(startpos, &offset, 1800, saved_header);
-
- /* offset will now contain the number of bytes to
- add to startpos to find the frame boundary */
- startpos += offset;
- if(startpos >= mp3buflen)
- startpos -= mp3buflen;
+ rc = mem_find_next_frame(startpos, &offset, 1800,
+ saved_header);
+ if(rc) /* Header found? */
+ {
+ /* offset will now contain the number of bytes to
+ add to startpos to find the frame boundary */
+ startpos += offset;
+ if(startpos >= mp3buflen)
+ startpos -= mp3buflen;
+ }
+ else
+ {
+ /* No header found. Let's save the whole buffer. */
+ startpos = mp3buf_write;
+ }
amount_to_save = startpos - mp3buf_read;
if(amount_to_save < 0)