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 /firmware | |
parent | d9e8bfee75232dacdecd3f0f0c5edb1f01a4509b (diff) | |
download | rockbox-532eb411acd39bce499c2127422eddcb376adf62.tar.gz rockbox-532eb411acd39bce499c2127422eddcb376adf62.zip |
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
Diffstat (limited to 'firmware')
-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 480cb1be57..e42623cbd9 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -1924,7 +1924,14 @@ static void mpeg_thread(void) | |||
1924 | 1924 | ||
1925 | /* Read the first MP3 frame from the recorded stream */ | 1925 | /* Read the first MP3 frame from the recorded stream */ |
1926 | lseek(mpeg_file, MPEG_RESERVED_HEADER_SPACE, SEEK_SET); | 1926 | lseek(mpeg_file, MPEG_RESERVED_HEADER_SPACE, SEEK_SET); |
1927 | read(mpeg_file, &saved_header, 4); | 1927 | rc = read(mpeg_file, &saved_header, 4); |
1928 | if(rc <= 0) | ||
1929 | { | ||
1930 | close(mpeg_file); | ||
1931 | mpeg_file = -1; | ||
1932 | mpeg_stop_done = true; | ||
1933 | break; | ||
1934 | } | ||
1928 | 1935 | ||
1929 | framelen = create_xing_header(mpeg_file, 0, | 1936 | framelen = create_xing_header(mpeg_file, 0, |
1930 | num_rec_bytes, mp3buf, | 1937 | num_rec_bytes, mp3buf, |
@@ -1980,13 +1987,21 @@ static void mpeg_thread(void) | |||
1980 | DEBUGF("Header: %08x\n", saved_header); | 1987 | DEBUGF("Header: %08x\n", saved_header); |
1981 | } | 1988 | } |
1982 | 1989 | ||
1983 | mem_find_next_frame(startpos, &offset, 1800, saved_header); | 1990 | rc = mem_find_next_frame(startpos, &offset, 1800, |
1984 | 1991 | saved_header); | |
1985 | /* offset will now contain the number of bytes to | 1992 | if(rc) /* Header found? */ |
1986 | add to startpos to find the frame boundary */ | 1993 | { |
1987 | startpos += offset; | 1994 | /* offset will now contain the number of bytes to |
1988 | if(startpos >= mp3buflen) | 1995 | add to startpos to find the frame boundary */ |
1989 | startpos -= mp3buflen; | 1996 | startpos += offset; |
1997 | if(startpos >= mp3buflen) | ||
1998 | startpos -= mp3buflen; | ||
1999 | } | ||
2000 | else | ||
2001 | { | ||
2002 | /* No header found. Let's save the whole buffer. */ | ||
2003 | startpos = mp3buf_write; | ||
2004 | } | ||
1990 | 2005 | ||
1991 | amount_to_save = startpos - mp3buf_read; | 2006 | amount_to_save = startpos - mp3buf_read; |
1992 | if(amount_to_save < 0) | 2007 | if(amount_to_save < 0) |