Beispiel #1
0
void database_read(struct file_entry *fe)
{
	fe->last_access = time(0);

	// Check first that the file is present on disk before using the cache.
	if (!isonfs(fe->id)){
		if (fe->data) free(fe->data);
		fe->data = 0;
		return;
	}

	// Only read if isn't already cached.
	if (fe->data) return;

	char name[256];
	serialize_id(fe->id, name, 256);

	FILE *fp = fopen(name, "rb");
	if (!fp){
		fe->data = 0;
		return;
	}

	if (fe->len == 0){
		fseek(fp, 0, SEEK_END);
		fe->len = ftell(fp);
		fseek(fp, 0, SEEK_SET);
	}

	fe->data = malloc(fe->len);
	fread(fe->data, 1, fe->len, fp);

	fclose(fp);
}
Beispiel #2
0
int isonfs(unsigned long long id)
{
	char name[256];
	serialize_id(id, name, 256);

	struct stat s;
	return (stat(name, &s) == 0);
}
Beispiel #3
0
void database_destroydb()
{
	if (config->db_persist)
		return;

	char name[256];

	for (struct lnode *cur = file_list; cur; cur = cur->next){
		struct file_entry *fe = cur->data;
		serialize_id(fe->id, name, 256);
		remove(name);
	}
}
Beispiel #4
0
int database_write(struct file_entry *fe, char *data)
{
	char name[256];
	serialize_id(fe->id, name, 256);

	FILE *fp = fopen(name, "wb");
	if (!fp)
		return 1;

	fwrite(data, 1, fe->len, fp);

	fclose(fp);
	return 0;
}
Beispiel #5
0
char *database_read(struct file_entry *fe)
{
	char *data;
	char name[256];
	serialize_id(fe->id, name, 256);

	FILE *fp = fopen(name, "rb");
	if (!fp)
		return 0;

	data = malloc(fe->len);
	fread(data, 1, fe->len, fp);

	fclose(fp);
	return data;
}
void M2MTLVSerializer::serialize_TILV(uint8_t type, uint16_t id, uint8_t *value, uint32_t value_length, uint8_t *&data, uint32_t &size)
{
    uint8_t *tlv = 0;
    uint32_t type_length = 1;
    type += id < 256 ? 0 : ID16;
    type += value_length < 8 ? value_length :
            value_length < 256 ? LENGTH8 :
            value_length < 65536 ? LENGTH16 : LENGTH24;
    uint8_t *tlv_type = (uint8_t*)malloc(type_length+1);
    memset(tlv_type,0,type_length+1);
    *tlv_type = type & 0xFF;

    uint32_t id_size = 0;
    uint8_t* id_ptr = serialize_id(id, id_size);

    uint32_t length_size = 0;
    uint8_t* length_ptr = serialize_length(value_length, length_size);

    tlv = (uint8_t*)malloc(size + type_length + id_size + length_size + value_length+1);
    memset(tlv,0,size + type_length + id_size + length_size + value_length+1);
    if(data) {
        memcpy(tlv, data, size);
    }
    memcpy(tlv+size, tlv_type, type_length);
    memcpy(tlv+size+type_length, id_ptr, id_size);
    memcpy(tlv+size+type_length+id_size, length_ptr, length_size);
    memcpy(tlv+size+type_length+id_size+length_size, value, value_length);

    if(tlv_type) {
        free(tlv_type) ;
    }
    if(length_ptr) {
        free(length_ptr);
    }
    if(id_ptr) {
        free(id_ptr);
    }
    if(data) {
        free(data);
        data = NULL;
    }
    data = tlv;
    size += type_length + id_size + length_size + value_length;
}