void database_getfile(struct request *r) { struct file_entry *entry = 0; char *err = 0; unsigned long long id = strtoull(r->filename, &err, 16); if ((!id && errno == EINVAL) || (err && *err)){ errno = 0; r->data = 0; return; } struct lnode *n = database_get(id); if (n){ entry = n->data; database_read(entry); // For some reason we couldn't load the file from disk. // Unlink node from list and return. if (!entry->data){ wkb_log(LOG_DB, "File %llx not found on disk, unlinking", entry->id); r->data = 0; database_pop(n); return; } r->data = entry->data; r->len = entry->len; r->id = id; strcpy(r->ext, entry->ext); return; } r->data = 0; }
int database_rm(char *name) { unsigned long long id = strtoull(name, 0, 16); struct lnode *node = database_get(id); if (!node) return 1; database_uncache(node->data); database_pop(node); char buf[512]; snprintf(buf, 512, DATA_DIR "/database/%llx", id); remove(buf); wkb_log(LOG_DB, "File %llx removed", id); return 0; }
int database_rm(char *name) { unsigned long long id = strtoull(name, 0, 16); struct lnode *node = database_get(id); if (!node) return 1; database_pop(node); cache_rm(id); char path[512]; snprintf(path, 512, DATA_DIR "/database/%llx", id); remove(path); char strtime[512]; time_t t = time(0); strftime(strtime, 512, TIME_FORMAT, localtime(&t)); printf("\033[1m%s, (database):\033[m File %llx removed\n", strtime, id); return 0; }