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); }
int isonfs(unsigned long long id) { char name[256]; serialize_id(id, name, 256); struct stat s; return (stat(name, &s) == 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); } }
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; }
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; }