X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=aft.c;h=8d9c7063bfad8f20c0b0feb28da43366ed0b4f86;hb=4df56926d10669ec120510957d3aa3fddb16e3c6;hp=c99b5ac52dc5f336d85d6a311fd80b0cd2f3ad9f;hpb=a5b65db9da1cd81c25494429ea8adb5d76e5b32a;p=paraslash.git diff --git a/aft.c b/aft.c index c99b5ac5..8d9c7063 100644 --- a/aft.c +++ b/aft.c @@ -323,12 +323,18 @@ enum afhi_offsets { AFHI_BITRATE_OFFSET = 4, /** Position of the frequency. */ AFHI_FREQUENCY_OFFSET = 8, + /** Location of the audio file header. */ + AFHI_HEADER_OFFSET_OFFSET = 12, + /* Length of the audio file header. Zero means: No header. */ + AFHI_HEADER_LEN_OFFSET = 16, /** Number of channels is stored here. */ - AFHI_CHANNELS_OFFSET = 12, + AFHI_CHANNELS_OFFSET = 20, + /** EOF timeout in ms. */ + AFHI_EOF_OFFSET = 21, /** The tag info position. */ - AFHI_INFO_STRING_OFFSET = 13, + AFHI_INFO_STRING_OFFSET = 23, /** Minimal on-disk size of a valid afhi struct. */ - MIN_AFHI_SIZE = 14 + MIN_AFHI_SIZE = 24 }; static unsigned sizeof_afhi_buf(const struct afh_info *afhi) @@ -346,7 +352,10 @@ static void save_afhi(struct afh_info *afhi, char *buf) afhi->seconds_total); write_u32(buf + AFHI_BITRATE_OFFSET, afhi->bitrate); write_u32(buf + AFHI_FREQUENCY_OFFSET, afhi->frequency); + write_u32(buf + AFHI_HEADER_OFFSET_OFFSET, afhi->header_offset); + write_u32(buf + AFHI_HEADER_LEN_OFFSET, afhi->header_len); write_u8(buf + AFHI_CHANNELS_OFFSET, afhi->channels); + write_u16(buf + AFHI_EOF_OFFSET, tv2ms(&afhi->eof_tv)); strcpy(buf + AFHI_INFO_STRING_OFFSET, afhi->info_string); /* OK */ PARA_DEBUG_LOG("last byte written: %p\n", buf + AFHI_INFO_STRING_OFFSET + strlen(afhi->info_string)); } @@ -357,6 +366,9 @@ static void load_afhi(const char *buf, struct afh_info *afhi) afhi->bitrate = read_u32(buf + AFHI_BITRATE_OFFSET); afhi->frequency = read_u32(buf + AFHI_FREQUENCY_OFFSET); afhi->channels = read_u8(buf + AFHI_CHANNELS_OFFSET); + afhi->header_offset = read_u32(buf + AFHI_HEADER_OFFSET_OFFSET); + afhi->header_len = read_u32(buf + AFHI_HEADER_LEN_OFFSET); + ms2tv(read_u16(buf + AFHI_EOF_OFFSET), &afhi->eof_tv); strcpy(afhi->info_string, buf + AFHI_INFO_STRING_OFFSET); } @@ -719,8 +731,9 @@ int open_and_update_audio_file(struct osl_row *aft_row, struct audio_file_data * ret = get_attribute_text(&afd->afsi.attributes, " ", &tmp); if (ret < 0) goto err; - tmp[sizeof(afd->attributes_string) - 1] = '\0'; - strcpy(afd->attributes_string, tmp); /* OK */ + assert(tmp); + strncpy(afd->attributes_string, tmp, sizeof(afd->attributes_string)); + afd->attributes_string[sizeof(afd->attributes_string) - 1] = '\0'; free(tmp); aced.aft_row = aft_row;