X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=ogg_afh.c;h=d5c4726269b4d30c889f16340cb5f2ca5e86c640;hb=e3728fb63092fa2afdb9044cf3610c677f34b890;hp=078ff786883b53c17b83ffc04f42cb61bc0be4c5;hpb=86c9ceb46b4299282ea1e5f3fe1aab7a97ef30bc;p=paraslash.git diff --git a/ogg_afh.c b/ogg_afh.c index 078ff786..d5c47262 100644 --- a/ogg_afh.c +++ b/ogg_afh.c @@ -117,18 +117,14 @@ static int ogg_open_callbacks(void *datasource, OggVorbis_File *vf, ov_callbacks } -static void ogg_save_header(char *map, struct audio_format_info *afi) -{ - afi->header = para_malloc(afi->header_len); - memcpy(afi->header, map, afi->header_len); -} - -static int ogg_compute_header_len(char *map, off_t numbytes, +static int ogg_compute_header_len(char *map, size_t numbytes, struct audio_format_info *afi) { - int ret, len = PARA_MIN(numbytes, CHUNK_SIZE); - unsigned int serial; + int ret; + size_t len = PARA_MIN(numbytes, CHUNK_SIZE); + int serial; char *buf; + ogg_page page; ogg_packet packet; vorbis_comment vc; @@ -140,9 +136,9 @@ static int ogg_compute_header_len(char *map, off_t numbytes, ogg_sync_init(sync_in); vorbis_info_init(&vi); vorbis_comment_init(&vc); - buf = ogg_sync_buffer(sync_in, len); + buf = ogg_sync_buffer(sync_in, (long)len); memcpy(buf, map, len); - ogg_sync_wrote(sync_in, len); + ogg_sync_wrote(sync_in, (long)len); ret = -E_SYNC_PAGEOUT; if (ogg_sync_pageout(sync_in, &page) <= 0) goto err1; @@ -187,7 +183,7 @@ static int ogg_compute_header_len(char *map, off_t numbytes, while (ogg_stream_flush(stream_out, &page)) afi->header_len += page.body_len + page.header_len; PARA_INFO_LOG("header_len = %d\n", afi->header_len); - ogg_save_header(map, afi); + afi->header_offset = 0; ret = 1; err2: ogg_stream_destroy(stream_in); @@ -205,7 +201,7 @@ err1: * CHUNK_TIME begins. Always successful. */ static long unsigned ogg_compute_chunk_table(OggVorbis_File *of, - struct audio_format_info *afi, double time_total) + struct audio_format_info *afi, long unsigned time_total) { int i, ret, num; ssize_t max_chunk_len, pos = 0, min = 0, old_pos; @@ -245,7 +241,7 @@ static long unsigned ogg_compute_chunk_table(OggVorbis_File *of, /* * Init oggvorbis file and write some tech data to given pointers. */ -static int ogg_get_file_info(char *map, off_t numbytes, +static int ogg_get_file_info(char *map, size_t numbytes, struct audio_format_info *afi) { int ret; @@ -287,8 +283,6 @@ static int ogg_get_file_info(char *map, off_t numbytes, ret = 1; err: ov_clear(&of); /* keeps the file open */ - if (ret < 0) - free(afi->header); return ret; }