static int read_tables20(int fd, unpack_data_t *unpack_data) { unsigned char bit_length[BC20]; unsigned char table[MC20 * 4]; int table_size, n, i, number; unsigned int bit_field; rar_dbgmsg("in read_tables20\n"); if (unpack_data->in_addr > unpack_data->read_top-25) { if (!rar_unp_read_buf(fd, unpack_data)) { return FALSE; } } bit_field = rar_getbits(unpack_data); unpack_data->unp_audio_block = (bit_field & 0x8000); if (!(bit_field & 0x4000)) { memset(unpack_data->unp_old_table20, 0, sizeof(unpack_data->unp_old_table20)); } rar_addbits(unpack_data, 2); if (unpack_data->unp_audio_block) { unpack_data->unp_channels = ((bit_field>>12) & 3) + 1; if (unpack_data->unp_cur_channel >= unpack_data->unp_channels) { unpack_data->unp_cur_channel = 0; } rar_addbits(unpack_data, 2); table_size = MC20 * unpack_data->unp_channels; } else {
unsigned int rar_get_char(const unsigned char **fd, unpack_data_t *unpack_data) { if (unpack_data->in_addr > MAX_BUF_SIZE-30) { if (!rar_unp_read_buf(fd, unpack_data)) { rar_dbgmsg("rar_get_char: rar_unp_read_buf FAILED\n"); return -1; } } rar_dbgmsg("rar_get_char = %u\n", unpack_data->in_buf[unpack_data->in_addr]); return(unpack_data->in_buf[unpack_data->in_addr++]); }