diff options
| author | Linus Nielsen Feltzing <linus@haxx.se> | 2003-11-03 20:06:21 +0000 |
|---|---|---|
| committer | Linus Nielsen Feltzing <linus@haxx.se> | 2003-11-03 20:06:21 +0000 |
| commit | 532eb411acd39bce499c2127422eddcb376adf62 (patch) | |
| tree | 613237402c4d6ad179edefc62f9a0be8156f6fa2 | |
| parent | d9e8bfee75232dacdecd3f0f0c5edb1f01a4509b (diff) | |
| download | rockbox-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.c | 31 |
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) |