Skip to content
Extraits de code Groupes Projets
Vérifiée Valider d06a35a8 rédigé par Kubat's avatar Kubat
Parcourir les fichiers

Don't do not needed allocation

parent 13e5140a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!76Database update from FS
......@@ -337,7 +337,7 @@ __handle_got_json(volatile sqlite3 *db, struct lkt_repo *repo, struct json_objec
size_t i, len = json_object_array_length(json);
struct json_object *kara_json;
int32_t integer, err;
struct kara *kara;
struct kara kara;
char url[URL_MAX_LEN];
long filestamp, timestamp;
RETURN_UNLESS(len > 0 && json_object_get_array(json), "Json invalid or array empty", NOTHING);
......@@ -345,74 +345,62 @@ __handle_got_json(volatile sqlite3 *db, struct lkt_repo *repo, struct json_objec
LOG_INFO_SCT("REPO", "Starting to process json for repo %s", repo->name);
for (i = 0; i < len; ++i) {
kara_json = json_object_array_get_idx(json, i);
kara = calloc(1, sizeof(struct kara));
RETURN_UNLESS(kara, "Out of memory", NOTHING);
err = 0;
/* Get the id of the kara. */
if (safe_json_get_int32(kara_json, "id", &integer))
continue;
kara->id = integer;
kara.id = integer;
/* Craft a fake filepath here, it will be used later. */
size_t kara_dir_len = strlen(repo->kara_dir);
memcpy(kara->filename, repo->kara_dir, sizeof(char) * (kara_dir_len + 1));
if (kara->filename[kara_dir_len - 1] != '/') {
strncat(kara->filename, "/", PATH_MAX - 1);
kara->filename[++kara_dir_len] = 0;
memcpy(kara.filename, repo->kara_dir, sizeof(char) * (kara_dir_len + 1));
if (kara.filename[kara_dir_len - 1] != '/') {
strncat(kara.filename, "/", PATH_MAX - 1);
kara.filename[++kara_dir_len] = 0;
}
safe_snprintf(kara->filename + kara_dir_len, PATH_MAX - kara_dir_len, "%d.mkv", integer);
LOG_INFO_SCT("REPO", "Crafted filename is '%s'", kara->filename);
safe_snprintf(kara.filename + kara_dir_len, PATH_MAX - kara_dir_len, "%d.mkv", integer);
/* Timestamp verification */
if (safe_json_get_long(kara_json, "unix_timestamp", &timestamp))
continue;
filestamp = get_mtime(kara->filename);
if (database_get_timestamp(db) < filestamp) {
LOG_WARN_SCT("REPO", "Kara file %s is more recent than database timestamp, download it", kara->filename);
goto do_it;
}
if (filestamp > timestamp) {
LOG_INFO_SCT("REPO", "Ignore kara '%ld', last timestamp was %ld, new is %ld", kara->id, filestamp, timestamp);
filestamp = get_mtime(kara.filename);
if (database_get_timestamp(db) < filestamp)
LOG_WARN_SCT("REPO", "Download kara '%ld' with path '%s'", kara.id, kara.filename);
else if (filestamp > timestamp) {
LOG_INFO_SCT("REPO", "Ignore kara '%ld' with path '%s'", kara.id, kara.filename);
continue;
}
do_it:
err |= safe_json_get_string(kara_json, "song_name", kara->mdt.song_name, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "source_name", kara->mdt.source_name, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "category", kara->mdt.category, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "language", kara->mdt.language, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "author_name", kara->mdt.author_name, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "song_type", kara->mdt.song_type, LEKTOR_TAG_MAX);
GOTO_IF(err, "Invalid json", err);
if (safe_json_get_int32(kara_json, "song_number", &kara->mdt.song_number))
goto err;
err |= safe_json_get_string(kara_json, "song_name", kara.mdt.song_name, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "source_name", kara.mdt.source_name, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "category", kara.mdt.category, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "language", kara.mdt.language, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "author_name", kara.mdt.author_name, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "song_type", kara.mdt.song_type, LEKTOR_TAG_MAX);
RETURN_IF(err || safe_json_get_int32(kara_json, "song_number", &kara.mdt.song_number),
"Invalid json", NOTHING);
if (!database_update_add((sqlite3 *) db, kara->filename, &kara->mdt, kara->id, false)) {
LOG_ERROR_SCT("REPO", "Could not add unavailable kara %ld to db", kara->id);
if (!database_update_add((sqlite3 *) db, kara.filename, &kara.mdt, kara.id, false)) {
LOG_ERROR_SCT("REPO", "Could not add unavailable kara %ld to db", kara.id);
continue;
}
safe_snprintf(url, URL_MAX_LEN, repo->get_id_file, kara->id);
safe_snprintf(url, URL_MAX_LEN, repo->get_id_file, kara.id);
if (__download_kara(url, kara->filename, true)) {
LOG_WARN_SCT("REPO", "Could not download kara %ld at path '%s'", kara->id, kara->filename);
if (__download_kara(url, kara.filename, true)) {
LOG_WARN_SCT("REPO", "Could not download kara %ld at path '%s'", kara.id, kara.filename);
continue;
}
if (!database_update_set_available((sqlite3 *) db, kara->id)) {
LOG_WARN_SCT("REPO", "Could not set kara %ld available", kara->id);
if (!database_update_set_available((sqlite3 *) db, kara.id)) {
LOG_WARN_SCT("REPO", "Could not set kara %ld available", kara.id);
continue;
}
database_stamp(db);
LOG_INFO_SCT("REPO", "Added kara %ld from repo %s, filepath is %s", kara->id, repo->name, kara->filename);
LOG_INFO_SCT("REPO", "Added kara %ld from repo %s, filepath is %s", kara.id, repo->name, kara.filename);
}
err:
free(kara);
}
void *
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter