fix(lib): some bug fixes, optimization improves and code cleanup
This commit is contained in:
parent
8768d55b48
commit
cc795bae19
@ -1,4 +1,4 @@
|
||||
// Tanabata file manager lib
|
||||
// Tanabata lib
|
||||
// By Masahiko AMANO aka H1K0
|
||||
|
||||
#pragma once
|
||||
@ -43,13 +43,13 @@ int tanabata_dump(Tanabata *tanabata, const char *path);
|
||||
int tanabata_sasa_add(Tanabata *tanabata, const char *path);
|
||||
|
||||
// Remove sasa by ID
|
||||
int tanabata_sasa_rem_by_id(Tanabata *tanabata, uint64_t sasa_id);
|
||||
int tanabata_sasa_rem(Tanabata *tanabata, uint64_t sasa_id);
|
||||
|
||||
// Update sasa file path
|
||||
int tanabata_sasa_upd(Tanabata *tanabata, uint64_t sasa_id, const char *path);
|
||||
|
||||
// Get sasa by ID
|
||||
Sasa tanabata_sasa_get_by_id(Tanabata *tanabata, uint64_t sasa_id);
|
||||
Sasa tanabata_sasa_get(Tanabata *tanabata, uint64_t sasa_id);
|
||||
|
||||
// ==================== TANZAKU SECTION ==================== //
|
||||
|
||||
@ -57,13 +57,13 @@ Sasa tanabata_sasa_get_by_id(Tanabata *tanabata, uint64_t sasa_id);
|
||||
int tanabata_tanzaku_add(Tanabata *tanabata, const char *name, const char *description);
|
||||
|
||||
// Remove tanzaku by ID
|
||||
int tanabata_tanzaku_rem_by_id(Tanabata *tanabata, uint64_t tanzaku_id);
|
||||
int tanabata_tanzaku_rem(Tanabata *tanabata, uint64_t tanzaku_id);
|
||||
|
||||
// Update tanzaku name and description
|
||||
int tanabata_tanzaku_upd(Tanabata *tanabata, uint64_t tanzaku_id, const char *name, const char *description);
|
||||
|
||||
// Get tanzaku by ID
|
||||
Tanzaku tanabata_tanzaku_get_by_id(Tanabata *tanabata, uint64_t tanzaku_id);
|
||||
Tanzaku tanabata_tanzaku_get(Tanabata *tanabata, uint64_t tanzaku_id);
|
||||
|
||||
// ==================== KAZARI SECTION ==================== //
|
||||
|
||||
|
||||
@ -33,20 +33,22 @@ int tanabata_free(Tanabata *tanabata) {
|
||||
shoppyou_free(&tanabata->shoppyou) != 0) {
|
||||
return 1;
|
||||
}
|
||||
tanabata->sasahyou_mod = 0;
|
||||
tanabata->sappyou_mod = 0;
|
||||
tanabata->shoppyou_mod = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tanabata_weed(Tanabata *tanabata) {
|
||||
uint64_t hole_cnt = 0;
|
||||
uint64_t new_id;
|
||||
uint64_t hole_cnt = 0, new_id;
|
||||
Kazari *current_kazari;
|
||||
Sasa *current_sasa = tanabata->sasahyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->sasahyou.size; i++) {
|
||||
for (uint64_t i = 0; i < tanabata->sasahyou.size; i++, current_sasa++) {
|
||||
if (current_sasa->id != HOLE_ID) {
|
||||
if (hole_cnt > 0) {
|
||||
new_id = current_sasa->id - hole_cnt;
|
||||
for (current_kazari = tanabata->shoppyou.database + tanabata->shoppyou.size - 1;
|
||||
current_kazari >= tanabata->shoppyou.database; current_kazari++) {
|
||||
current_kazari >= tanabata->shoppyou.database; current_kazari--) {
|
||||
if (current_kazari->sasa_id == current_sasa->id) {
|
||||
current_kazari->sasa_id = new_id;
|
||||
}
|
||||
@ -58,23 +60,24 @@ int tanabata_weed(Tanabata *tanabata) {
|
||||
kazari_rem_by_sasa(&tanabata->shoppyou, current_sasa->id);
|
||||
hole_cnt++;
|
||||
}
|
||||
current_sasa++;
|
||||
}
|
||||
if (hole_cnt > 0) {
|
||||
tanabata->sasahyou.size -= hole_cnt;
|
||||
tanabata->sasahyou.hole_cnt = 0;
|
||||
free(tanabata->sasahyou.holes);
|
||||
tanabata->sasahyou.database = realloc(tanabata->sasahyou.database, tanabata->sasahyou.size * sizeof(Sasa));
|
||||
tanabata->sasahyou.holes = NULL;
|
||||
tanabata->sasahyou.database = reallocarray(tanabata->sasahyou.database, tanabata->sasahyou.size,
|
||||
sizeof(Sasa));
|
||||
tanabata->sasahyou.modified_ts = time(NULL);
|
||||
}
|
||||
hole_cnt = 0;
|
||||
Tanzaku *current_tanzaku = tanabata->sappyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->sappyou.size; i++) {
|
||||
for (uint64_t i = 0; i < tanabata->sappyou.size; i++, current_tanzaku++) {
|
||||
if (current_tanzaku->id != HOLE_ID) {
|
||||
if (hole_cnt > 0) {
|
||||
new_id = current_tanzaku->id - hole_cnt;
|
||||
for (current_kazari = tanabata->shoppyou.database + tanabata->shoppyou.size - 1;
|
||||
current_kazari >= tanabata->shoppyou.database; current_kazari++) {
|
||||
current_kazari >= tanabata->shoppyou.database; current_kazari--) {
|
||||
if (current_kazari->tanzaku_id == current_tanzaku->id) {
|
||||
current_kazari->tanzaku_id = new_id;
|
||||
}
|
||||
@ -85,18 +88,19 @@ int tanabata_weed(Tanabata *tanabata) {
|
||||
hole_cnt++;
|
||||
}
|
||||
}
|
||||
current_tanzaku++;
|
||||
}
|
||||
if (hole_cnt > 0) {
|
||||
tanabata->sappyou.size -= tanabata->sappyou.hole_cnt;
|
||||
tanabata->sappyou.hole_cnt = 0;
|
||||
free(tanabata->sappyou.holes);
|
||||
tanabata->sappyou.database = realloc(tanabata->sappyou.database, tanabata->sappyou.size * sizeof(Tanzaku));
|
||||
tanabata->sappyou.holes = NULL;
|
||||
tanabata->sappyou.database = reallocarray(tanabata->sappyou.database, tanabata->sappyou.size,
|
||||
sizeof(Tanzaku));
|
||||
tanabata->sappyou.modified_ts = time(NULL);
|
||||
}
|
||||
hole_cnt = 0;
|
||||
current_kazari = tanabata->shoppyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) {
|
||||
for (uint64_t i = 0; i < tanabata->shoppyou.size; i++, current_kazari++) {
|
||||
if (current_kazari->sasa_id != HOLE_ID && current_kazari->tanzaku_id != HOLE_ID &&
|
||||
current_kazari->sasa_id < tanabata->sasahyou.size &&
|
||||
current_kazari->tanzaku_id < tanabata->sappyou.size) {
|
||||
@ -106,22 +110,23 @@ int tanabata_weed(Tanabata *tanabata) {
|
||||
} else {
|
||||
hole_cnt++;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
if (hole_cnt > 0) {
|
||||
tanabata->shoppyou.size -= tanabata->shoppyou.hole_cnt;
|
||||
tanabata->shoppyou.hole_cnt = 0;
|
||||
free(tanabata->shoppyou.holes);
|
||||
tanabata->shoppyou.database = realloc(tanabata->shoppyou.database, tanabata->shoppyou.size * sizeof(Kazari));
|
||||
tanabata->shoppyou.holes = NULL;
|
||||
tanabata->shoppyou.database = reallocarray(tanabata->shoppyou.database, tanabata->shoppyou.size,
|
||||
sizeof(Kazari));
|
||||
tanabata->shoppyou.modified_ts = time(NULL);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tanabata_load(Tanabata *tanabata) {
|
||||
if (sasahyou_load(&tanabata->sasahyou) != 0 ||
|
||||
sappyou_load(&tanabata->sappyou) != 0 ||
|
||||
shoppyou_load(&tanabata->shoppyou) != 0) {
|
||||
if (tanabata->sasahyou_mod != tanabata->sasahyou.modified_ts && sasahyou_load(&tanabata->sasahyou) != 0 ||
|
||||
tanabata->sappyou_mod != tanabata->sappyou.modified_ts && sappyou_load(&tanabata->sappyou) != 0 ||
|
||||
tanabata->shoppyou_mod != tanabata->shoppyou.modified_ts && shoppyou_load(&tanabata->shoppyou) != 0) {
|
||||
return 1;
|
||||
}
|
||||
tanabata->sasahyou_mod = tanabata->sasahyou.modified_ts;
|
||||
@ -150,17 +155,16 @@ int tanabata_open(Tanabata *tanabata, const char *path) {
|
||||
if (stat(path, &st) != 0 || !S_ISDIR(st.st_mode)) {
|
||||
return 1;
|
||||
}
|
||||
char *file_path = malloc(strlen(path) + 10);
|
||||
size_t pathlen = strlen(path);
|
||||
char *file_path = malloc(pathlen + 10);
|
||||
strcpy(file_path, path);
|
||||
if (sasahyou_open(&tanabata->sasahyou, strcat(file_path, "/sasahyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
strcpy(file_path, path);
|
||||
if (sappyou_open(&tanabata->sappyou, strcat(file_path, "/sappyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
strcpy(file_path, path);
|
||||
if (shoppyou_open(&tanabata->shoppyou, strcat(file_path, "/shoppyou")) != 0) {
|
||||
if (tanabata->sasahyou_mod != tanabata->sasahyou.modified_ts &&
|
||||
sasahyou_open(&tanabata->sasahyou, strcpy(file_path + pathlen, "/sasahyou")) != 0 ||
|
||||
tanabata->sappyou_mod != tanabata->sappyou.modified_ts &&
|
||||
sappyou_open(&tanabata->sappyou, strcpy(file_path + pathlen, "/sappyou")) != 0 ||
|
||||
tanabata->shoppyou_mod != tanabata->shoppyou.modified_ts &&
|
||||
shoppyou_open(&tanabata->shoppyou, strcpy(file_path + pathlen, "/shoppyou")) != 0) {
|
||||
free(file_path);
|
||||
return 1;
|
||||
}
|
||||
free(file_path);
|
||||
@ -178,28 +182,21 @@ int tanabata_dump(Tanabata *tanabata, const char *path) {
|
||||
if (stat(path, &st) != 0 || !S_ISDIR(st.st_mode)) {
|
||||
return 1;
|
||||
}
|
||||
char *file_path = malloc(strlen(path) + 10);
|
||||
if (tanabata->sasahyou_mod != tanabata->sasahyou.modified_ts) {
|
||||
strcpy(file_path, path);
|
||||
if (sasahyou_dump(&tanabata->sasahyou, strcat(file_path, "/sasahyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
tanabata->sasahyou_mod = tanabata->sasahyou.modified_ts;
|
||||
}
|
||||
if (tanabata->sappyou_mod != tanabata->sappyou.modified_ts) {
|
||||
strcpy(file_path, path);
|
||||
if (sappyou_dump(&tanabata->sappyou, strcat(file_path, "/sappyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
tanabata->sappyou_mod = tanabata->sappyou.modified_ts;
|
||||
}
|
||||
if (tanabata->shoppyou_mod != tanabata->shoppyou.modified_ts) {
|
||||
strcpy(file_path, path);
|
||||
if (shoppyou_dump(&tanabata->shoppyou, strcat(file_path, "/shoppyou")) != 0) {
|
||||
return 1;
|
||||
}
|
||||
tanabata->shoppyou_mod = tanabata->shoppyou.modified_ts;
|
||||
size_t pathlen = strlen(path);
|
||||
char *file_path = malloc(pathlen + 10);
|
||||
strcpy(file_path, path);
|
||||
if (tanabata->sasahyou_mod != tanabata->sasahyou.modified_ts &&
|
||||
sasahyou_dump(&tanabata->sasahyou, strcpy(file_path + pathlen, "/sasahyou")) != 0 ||
|
||||
tanabata->sappyou_mod != tanabata->sappyou.modified_ts &&
|
||||
sappyou_dump(&tanabata->sappyou, strcpy(file_path + pathlen, "/sappyou")) != 0 ||
|
||||
tanabata->shoppyou_mod != tanabata->shoppyou.modified_ts &&
|
||||
shoppyou_dump(&tanabata->shoppyou, strcpy(file_path + pathlen, "/shoppyou")) != 0) {
|
||||
free(file_path);
|
||||
return 1;
|
||||
}
|
||||
free(file_path);
|
||||
tanabata->sasahyou_mod = tanabata->sasahyou.modified_ts;
|
||||
tanabata->sappyou_mod = tanabata->sappyou.modified_ts;
|
||||
tanabata->shoppyou_mod = tanabata->shoppyou.modified_ts;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -8,26 +8,17 @@ int tanabata_kazari_add(Tanabata *tanabata, uint64_t sasa_id, uint64_t tanzaku_i
|
||||
tanabata->shoppyou.size == -1 && tanabata->shoppyou.hole_cnt == 0) {
|
||||
return 1;
|
||||
}
|
||||
Kazari *current_kazari = tanabata->shoppyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) {
|
||||
Kazari *current_kazari = tanabata->shoppyou.database + tanabata->shoppyou.size - 1;
|
||||
for (; current_kazari >= tanabata->shoppyou.database; current_kazari--) {
|
||||
if (current_kazari->sasa_id == sasa_id && current_kazari->tanzaku_id == tanzaku_id) {
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
if (kazari_add(&tanabata->shoppyou, sasa_id, tanzaku_id) == 0) {
|
||||
tanabata->shoppyou_mod = 1;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
return kazari_add(&tanabata->shoppyou, sasa_id, tanzaku_id);
|
||||
}
|
||||
|
||||
int tanabata_kazari_rem(Tanabata *tanabata, uint64_t sasa_id, uint64_t tanzaku_id) {
|
||||
if (kazari_rem(&tanabata->shoppyou, sasa_id, tanzaku_id) == 0) {
|
||||
tanabata->shoppyou_mod = 1;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
return kazari_rem(&tanabata->shoppyou, sasa_id, tanzaku_id);
|
||||
}
|
||||
|
||||
Tanzaku *tanabata_tanzaku_get_by_sasa(Tanabata *tanabata, uint64_t sasa_id) {
|
||||
@ -36,17 +27,18 @@ Tanzaku *tanabata_tanzaku_get_by_sasa(Tanabata *tanabata, uint64_t sasa_id) {
|
||||
}
|
||||
Tanzaku *tanzaku_list = NULL;
|
||||
uint64_t tanzaku_count = 0;
|
||||
Tanzaku temp;
|
||||
Kazari *current_kazari = tanabata->shoppyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) {
|
||||
if (current_kazari->sasa_id == sasa_id && current_kazari->tanzaku_id != HOLE_ID) {
|
||||
for (uint64_t i = 0; i < tanabata->shoppyou.size; i++, current_kazari++) {
|
||||
if (current_kazari->sasa_id == sasa_id &&
|
||||
(temp = tanabata_tanzaku_get(tanabata, current_kazari->tanzaku_id)).id != HOLE_ID) {
|
||||
tanzaku_count++;
|
||||
tanzaku_list = realloc(tanzaku_list, tanzaku_count * sizeof(Tanzaku));
|
||||
tanzaku_list[tanzaku_count - 1] = tanabata_tanzaku_get_by_id(tanabata, current_kazari->tanzaku_id);
|
||||
tanzaku_list = reallocarray(tanzaku_list, tanzaku_count, sizeof(Tanzaku));
|
||||
tanzaku_list[tanzaku_count - 1] = temp;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
if (tanzaku_list != NULL) {
|
||||
tanzaku_list = realloc(tanzaku_list, (tanzaku_count + 1) * sizeof(Tanzaku));
|
||||
tanzaku_list = reallocarray(tanzaku_list, (tanzaku_count + 1), sizeof(Tanzaku));
|
||||
tanzaku_list[tanzaku_count] = HOLE_TANZAKU;
|
||||
}
|
||||
return tanzaku_list;
|
||||
@ -58,17 +50,18 @@ Sasa *tanabata_sasa_get_by_tanzaku(Tanabata *tanabata, uint64_t tanzaku_id) {
|
||||
}
|
||||
Sasa *sasa_list = NULL;
|
||||
uint64_t sasa_count = 0;
|
||||
Sasa temp;
|
||||
Kazari *current_kazari = tanabata->shoppyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) {
|
||||
if (current_kazari->tanzaku_id == tanzaku_id && current_kazari->sasa_id != HOLE_ID) {
|
||||
for (uint64_t i = 0; i < tanabata->shoppyou.size; i++, current_kazari++) {
|
||||
if (current_kazari->tanzaku_id == tanzaku_id &&
|
||||
(temp = tanabata_sasa_get(tanabata, current_kazari->sasa_id)).id != HOLE_ID) {
|
||||
sasa_count++;
|
||||
sasa_list = realloc(sasa_list, sasa_count * sizeof(Sasa));
|
||||
sasa_list[sasa_count - 1] = tanabata_sasa_get_by_id(tanabata, current_kazari->sasa_id);
|
||||
sasa_list = reallocarray(sasa_list, sasa_count, sizeof(Sasa));
|
||||
sasa_list[sasa_count - 1] = temp;
|
||||
}
|
||||
current_kazari++;
|
||||
}
|
||||
if (sasa_list != NULL) {
|
||||
sasa_list = realloc(sasa_list, (sasa_count + 1) * sizeof(Sasa));
|
||||
sasa_list = reallocarray(sasa_list, (sasa_count + 1), sizeof(Sasa));
|
||||
sasa_list[sasa_count] = HOLE_SASA;
|
||||
}
|
||||
return sasa_list;
|
||||
|
||||
@ -1,27 +1,11 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "../core/core_func.h"
|
||||
#include "../../include/tanabata.h"
|
||||
|
||||
int tanabata_sasa_add(Tanabata *tanabata, const char *path) {
|
||||
if (path == NULL || tanabata->sasahyou.size == -1 && tanabata->sasahyou.hole_cnt == 0) {
|
||||
return 1;
|
||||
}
|
||||
Sasa *current_sasa = tanabata->sasahyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->sasahyou.size; i++) {
|
||||
if (current_sasa->id != HOLE_ID && strcmp(current_sasa->path, path) == 0) {
|
||||
return 1;
|
||||
}
|
||||
current_sasa++;
|
||||
}
|
||||
return sasa_add(&tanabata->sasahyou, path);
|
||||
}
|
||||
|
||||
int tanabata_sasa_rem_by_id(Tanabata *tanabata, uint64_t sasa_id) {
|
||||
if (sasa_id == HOLE_ID || sasa_id >= tanabata->sasahyou.size) {
|
||||
return 1;
|
||||
}
|
||||
int tanabata_sasa_rem(Tanabata *tanabata, uint64_t sasa_id) {
|
||||
if (sasa_rem(&tanabata->sasahyou, sasa_id) == 0 &&
|
||||
kazari_rem_by_sasa(&tanabata->shoppyou, sasa_id) == 0) {
|
||||
return 0;
|
||||
@ -33,7 +17,7 @@ int tanabata_sasa_upd(Tanabata *tanabata, uint64_t sasa_id, const char *path) {
|
||||
return sasa_upd(&tanabata->sasahyou, sasa_id, path);
|
||||
}
|
||||
|
||||
Sasa tanabata_sasa_get_by_id(Tanabata *tanabata, uint64_t sasa_id) {
|
||||
Sasa tanabata_sasa_get(Tanabata *tanabata, uint64_t sasa_id) {
|
||||
if (sasa_id == HOLE_ID || sasa_id >= tanabata->sasahyou.size) {
|
||||
return HOLE_SASA;
|
||||
}
|
||||
|
||||
@ -1,26 +1,11 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "../core/core_func.h"
|
||||
#include "../../include/tanabata.h"
|
||||
|
||||
int tanabata_tanzaku_add(Tanabata *tanabata, const char *name, const char *description) {
|
||||
if (name == NULL || description == NULL || tanabata->sappyou.size == -1 && tanabata->sappyou.hole_cnt == 0) {
|
||||
return 1;
|
||||
}
|
||||
Tanzaku *current_tanzaku = tanabata->sappyou.database;
|
||||
for (uint64_t i = 0; i < tanabata->sappyou.size; i++) {
|
||||
if (current_tanzaku->id != HOLE_ID && strcmp(current_tanzaku->name, name) == 0) {
|
||||
return 1;
|
||||
}
|
||||
current_tanzaku++;
|
||||
}
|
||||
return tanzaku_add(&tanabata->sappyou, name, description);
|
||||
}
|
||||
|
||||
int tanabata_tanzaku_rem_by_id(Tanabata *tanabata, uint64_t tanzaku_id) {
|
||||
if (tanzaku_id == HOLE_ID || tanzaku_id >= tanabata->sappyou.size || tanzaku_id == 0) {
|
||||
return 1;
|
||||
}
|
||||
int tanabata_tanzaku_rem(Tanabata *tanabata, uint64_t tanzaku_id) {
|
||||
if (tanzaku_rem(&tanabata->sappyou, tanzaku_id) == 0 &&
|
||||
kazari_rem_by_tanzaku(&tanabata->shoppyou, tanzaku_id) == 0) {
|
||||
return 0;
|
||||
@ -32,7 +17,7 @@ int tanabata_tanzaku_upd(Tanabata *tanabata, uint64_t tanzaku_id, const char *na
|
||||
return tanzaku_upd(&tanabata->sappyou, tanzaku_id, name, description);
|
||||
}
|
||||
|
||||
Tanzaku tanabata_tanzaku_get_by_id(Tanabata *tanabata, uint64_t tanzaku_id) {
|
||||
Tanzaku tanabata_tanzaku_get(Tanabata *tanabata, uint64_t tanzaku_id) {
|
||||
if (tanzaku_id == HOLE_ID || tanzaku_id >= tanabata->sappyou.size) {
|
||||
return HOLE_TANZAKU;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user