audio_file = open(sl[i], O_RDONLY);
if (audio_file < 0)
continue;
- if (fstat(audio_file, &file_status) == -1) {
+ if (fstat(audio_file, &file_status) == -1 ||
+ !file_status.st_size) {
close(audio_file);
continue;
}
map = para_mmap(file_status.st_size, PROT_READ, MAP_PRIVATE,
audio_file, 0);
strcpy(mmd->filename, sl[i]);
+ mmd->afi.header_len = 0; /* default: no header */
if (update_mmd() < 0) { /* invalid file */
close(audio_file);
munmap(map, mmd->size);
return &the_timeout;
}
-static void vss_eof(struct audio_format_handler *af)
+static void vss_eof(void)
{
struct timeval now;
int i;
char *tmp;
- if (!af || !map) {
+ if (!map) {
for (i = 0; senders[i].name; i++)
senders[i].shutdown_clients();
return;
map = NULL;
close(audio_file);
mmd->audio_format = -1;
- af = NULL;
mmd->chunks_sent = 0;
mmd->offset = 0;
mmd->afi.seconds_total = 0;
free(mmd->afi.chunk_table);
mmd->afi.chunk_table = NULL;
- free(mmd->afi.header);
- mmd->afi.header = NULL;
tmp = make_message("%s:\n%s:\n%s:\n", status_item_list[SI_AUDIO_INFO1],
status_item_list[SI_AUDIO_INFO2], status_item_list[SI_AUDIO_INFO3]);
strcpy(mmd->afi.info_string, tmp);
*/
char *vss_get_header(int *header_len)
{
- if (mmd->audio_format < 0)
+ if (mmd->audio_format < 0 || !map || !mmd->afi.header_len)
return NULL;
*header_len = mmd->afi.header_len;
- return mmd->afi.header;
+ return map + mmd->afi.header_offset;
}
/**
for (i = 0; senders[i].name; i++)
senders[i].shutdown_clients();
if (vss_next() && af) {
- vss_eof(af);
+ vss_eof();
return vss_compute_timeout();
}
if (vss_paused() || vss_repos()) {
mmd->new_vss_status_flags &= ~VSS_REPOS;
if (mmd->current_chunk >= mmd->afi.chunks_total) { /* eof */
mmd->new_vss_status_flags |= VSS_NEXT;
- return vss_eof(af);
+ return vss_eof();
}
pos = mmd->afi.chunk_table[mmd->current_chunk];
len = mmd->afi.chunk_table[mmd->current_chunk + 1] - pos;