static size_t ds_find_free_block(struct fileStore * fs, size_t startBlock, size_t stopBlock) { size_t i; int j; unsigned char c; int bitSet[8]; size_t start_offset, stop_offset; startBlock = (startBlock / 8) * 8; stopBlock = (1+((stopBlock-1) / 8)) * 8; if(stopBlock > fs->blockCount) { stopBlock = fs->blockCount; } start_offset = startBlock / 8; stop_offset = stopBlock / 8; c = fs->used_index[start_offset]; for(i = start_offset; i < stop_offset; i++) { if(c != 0xFF) { unpack_bits(bitSet, c); for(j = 0; j < 8; j++) { if(! bitSet[j]) { return (i*8)+j; } } } start_offset++; c = fs->used_index[start_offset]; } return -1; }
static void do_encrypt_r (char *block, int edflag, struct des_ctx *ctx) { unsigned char bin[8], bout[8]; pack_bits (bin, block); des_crypt_block (ctx, bout, bin, 1, edflag != 0); unpack_bits (block, bout); }
static void ds_mark_block(struct fileStore * fs, size_t blockNumber, int used) { unsigned char c; int bitSet[8]; c = fs->used_index[blockNumber / 8]; unpack_bits(bitSet, c); bitSet[blockNumber % 8] = used; c = pack_bits(bitSet); fs->used_index[blockNumber / 8] = c; }
int dci_format1_unpack(char *packet, int packet_len, struct dci_format1 *data) { int i; char *buffer = packet; int total_len; if (data->carrier_indicator_len < 0 || data->carrier_indicator_len > 3) { return -1; } if (data->harq_pnum_len != 3 && data->harq_pnum_len != 4) { return -1; } if (dci_packet_space(packet,buffer,packet_len) < data->carrier_indicator_len) { return -1; } if (data->carrier_indicator_len) { data->carrier_indicator = unpack_bits(&buffer, data->carrier_indicator_len); } if (dci_packet_space(packet,buffer,packet_len) < 1) { return -1; } if (data->ra_type != NA) { if (unpack_bits(&buffer,1)) { data->ra_type = TYPE1; } else { data->ra_type = TYPE0; } } if (dci_packet_space(packet,buffer,packet_len) < data->nof_rbg) { return -1; } if (data->ra_type == NA || data->ra_type == TYPE0) { for (i=0; i<data->nof_rbg; i++) { data->rbg_mask[i] = unpack_bits(&buffer,1); } } else { printf("TYPE1 RA not implemented\n"); return -1; } if (dci_packet_space(packet,buffer,packet_len) < 5) { return -1; } data->mcs = unpack_bits(&buffer,5); if (dci_packet_space(packet,buffer,packet_len) < data->harq_pnum_len) { return -1; } data->harq_pnum = unpack_bits(&buffer,data->harq_pnum_len); if (dci_packet_space(packet,buffer,packet_len) < 5) { return -1; } data->new_data = unpack_bits(&buffer,1); data->redundancy_version = unpack_bits(&buffer,2); data->tpc_command = unpack_bits(&buffer,2); total_len = (int) (buffer-packet); /* TODO: * If the number of information bits in format 1 is equal to that for format 0/1A * for scheduling the same serving cell and mapped onto the UE specific search space * given by the C-RNTI as defined in [3], one bit of value zero shall be appended to format 1. */ total_len = check_ambiguous_size(&buffer,total_len); return total_len; }