diff --git a/src/module/module_repo.c b/src/module/module_repo.c index 71922468464e8cdaf59d0792afb96b524e9d6d10..80fc22e2be0f820bf9be242d1b8d2d1026afb6a8 100644 --- a/src/module/module_repo.c +++ b/src/module/module_repo.c @@ -93,7 +93,7 @@ struct ___file { *********************/ /* Sleep a bit, to not overuse ressources */ -static inline void +PRIVATE_FUNCTION void ___sleep(void) { struct timespec time_sleep = { @@ -104,7 +104,7 @@ ___sleep(void) } /* Recursive mkdir, where the last word of the string is a file, not a folder. */ -static inline void +PRIVATE_FUNCTION void ___mkdir(const char *dir, unsigned int umask) { #pragma message(TODO "Pour le Kubat du futur: inlude the umask from the conf") @@ -131,14 +131,14 @@ ___mkdir(const char *dir, unsigned int umask) mkdir(tmp, umask); } -static inline void +PRIVATE_FUNCTION void ___craft_filename_obfuscate(char str[PATH_MAX], struct kara *kara) { /* Obfuscate filename */ safe_snprintf(str, PATH_MAX, "%s%ld.mkv", kara->database_filepath, kara->id); } -static inline void +PRIVATE_FUNCTION void ___craft_filename_non_obfuscate(char str[PATH_MAX], struct kara *kara) { /* Not obfuscate filename, need to create directories, won't fail if not @@ -152,7 +152,7 @@ ___craft_filename_non_obfuscate(char str[PATH_MAX], struct kara *kara) kara->mdt.song_number, kara->mdt.song_name); } -static inline void +PRIVATE_FUNCTION void ___clean_file(struct ___file *f) { if (f->fd) { @@ -161,7 +161,7 @@ ___clean_file(struct ___file *f) } } -static inline void +PRIVATE_FUNCTION void ___clean_memory(struct ___memory *m) { if (m->mem) { @@ -171,14 +171,14 @@ ___clean_memory(struct ___memory *m) } } -static size_t +PRIVATE_FUNCTION size_t ___write_mem(char *data, size_t size, size_t nmem, void *user) { size_t realsize = size * nmem; struct ___memory *mem = (struct ___memory *)user; void *ptr = realloc(mem->mem, mem->size + realsize); - RETURN_UNLESS(ptr, "Out of memory", 0); + FAIL_UNLESS(ptr, "Out of memory"); mem->mem = ptr; memcpy(((uint8_t *)mem->mem) + mem->size, data, realsize); @@ -186,12 +186,13 @@ ___write_mem(char *data, size_t size, size_t nmem, void *user) return realsize; } -static size_t +PRIVATE_FUNCTION size_t ___write_disk(char *data, size_t size, size_t nmem, void *user) { ssize_t realsize = size * nmem; struct ___file *file = (struct ___file *)user; RETURN_IF(write(file->fd, data, realsize) != realsize, "Failed to write", 0); + if (file->index < 4) { memcpy(file->magic + file->index, data, 4 - file->index); if (file->index + realsize >= 4) { @@ -199,11 +200,12 @@ ___write_disk(char *data, size_t size, size_t nmem, void *user) RETURN_IF(mkv_magic(file->magic), "Magic number invalid, should be 0x1A45DFA3", 0); } } + file->index += realsize; return realsize; } -static int +PRIVATE_FUNCTION int ___json_dl(const char *url, char **json) { RETURN_UNLESS(json, "Invalid argument", 1); @@ -250,7 +252,7 @@ err: return ret; } -static inline int +PRIVATE_FUNCTION int ___download_kara(const char *url, const char *path, int override) { struct curl_slist *headers = NULL; @@ -319,7 +321,7 @@ err: return ret; } -static void +PRIVATE_FUNCTION void ___handle_got_json_dl(struct kara *kara, int current_id) { /* Download the kara */ @@ -359,7 +361,7 @@ ___handle_got_json_dl(struct kara *kara, int current_id) LOG_INFO("REPO", "Added kara %ld from repo %s, filepath is %s", kara->id, kara->repo->name, kara->filename); } -static int +PRIVATE_FUNCTION int ___handle_got_json_internal_callback(const char *key, const char *val, int comp, void *user) { struct json_parse_arg *arg = (struct json_parse_arg *)user; @@ -450,7 +452,7 @@ ___handle_got_json_internal_callback(const char *key, const char *val, int comp, return 0; } -static inline int +PRIVATE_FUNCTION int ___handle_got_json(volatile sqlite3 *db, struct module_repo_internal *repo, const char *json) { size_t len = json_parse_get_count(json, 2); @@ -487,7 +489,7 @@ ___handle_got_json(volatile sqlite3 *db, struct module_repo_internal *repo, cons return ret; } -static inline void +PRIVATE_FUNCTION void ___handle_deleted_kara(volatile sqlite3 *db) { size_t len, i; @@ -502,7 +504,7 @@ ___handle_deleted_kara(volatile sqlite3 *db) free(kara_ids); } -static void * +PRIVATE_FUNCTION void * ___worker_update(void UNUSED *worker, void *___repo) { struct module_repo_internal *repo = ___repo; @@ -543,7 +545,7 @@ end_no_lock: return NULL; } -static void * +PRIVATE_FUNCTION void * ___worker_rescan(void UNUSED *worker, void *___repo) { struct module_repo_internal *repo = ___repo; @@ -572,7 +574,7 @@ end_no_lock: return NULL; } -static int +PRIVATE_FUNCTION int ___handle_fav_list_internal(const char UNUSED *key, const char *val, int UNUSED comp, void *user) { if (val == NULL) @@ -600,7 +602,7 @@ ___handle_fav_list_internal(const char UNUSED *key, const char *val, int UNUSED return 0; } -static inline void +PRIVATE_FUNCTION void ___handle_fav_list(struct module_repo_internal *repo, char *fav, size_t fav_size) { char *json; @@ -650,7 +652,7 @@ ___handle_fav_list(struct module_repo_internal *repo, char *fav, size_t fav_size free(json); } -static int +PRIVATE_FUNCTION int ___worker_import_favorites_internal(const char UNUSED *k, const char *val, int UNUSED c, void *user) { if (val == NULL) @@ -668,14 +670,13 @@ ___worker_import_favorites_internal(const char UNUSED *k, const char *val, int U char fav[LKT_LINE_MAX]; safe_strncpy(fav, val, LKT_LINE_MAX); -#pragma message(TODO "Add a way to use the workers to do this for each fav list") LOG_INFO("REPO", "Processing favorite list: %s", fav); ___handle_fav_list(repo, fav, LKT_LINE_MAX); lkt_queue_send(repo->queue, LKT_EVENT_DB_UPDATE_TICK, NULL); return 0; } -static void * +PRIVATE_FUNCTION void * ___worker_import_favorites(void *worker, void *___repo) { struct module_repo_internal *repo = ___repo; @@ -718,7 +719,7 @@ end_no_lock: * Functions that will be wrapped and exported * ***********************************************/ -static inline void +PRIVATE_FUNCTION void module_repo_close(struct module_repo_internal *repo) { LOG_INFO("REPO", "Waiting for workers to finish"); @@ -726,7 +727,7 @@ module_repo_close(struct module_repo_internal *repo) LOG_INFO("REPO", "All workers have finished"); } -static inline bool +PRIVATE_FUNCTION bool module_repo_new(struct module_repo_internal *repo_, struct queue *queue, volatile sqlite3 *db) { RETURN_UNLESS(repo_ && queue && db, "Invalid argument", 1); @@ -793,7 +794,7 @@ module_repo_new(struct module_repo_internal *repo_, struct queue *queue, volatil * Export functions * ********************/ -static int +PRIVATE_FUNCTION int mod_new(va_list *va) { va_list copy; @@ -817,14 +818,14 @@ mod_new(va_list *va) return !ret; } -static int +PRIVATE_FUNCTION int mod_close(va_list UNUSED *va) { LOG_ERROR("ERROR", "Operation 'close' not supported on module"); return 1; } -static int +PRIVATE_FUNCTION int mod_free(va_list *va) { va_list copy; @@ -850,7 +851,7 @@ mod_free(va_list *va) return 0; } -static int +PRIVATE_FUNCTION int mod_update(va_list *va) { va_list copy; @@ -879,7 +880,7 @@ end_no_lock: return ret; } -static int +PRIVATE_FUNCTION int mod_rescan(va_list *va) { va_list copy; @@ -908,7 +909,7 @@ end_no_lock: return ret; } -static int +PRIVATE_FUNCTION int mod_import(va_list *va) { va_list copy;