Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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;
}