From a73b97101f58defc0a76c90f2e788c6531618087 Mon Sep 17 00:00:00 2001 From: synt-xerror <169557594+synt-xerror@users.noreply.github.com> Date: Sat, 14 Feb 2026 20:49:52 -0300 Subject: [PATCH] Simplified the get_dir function, and now we have directories and files ready :) --- task.c | 27 ++++++++++++++++---- toybox.c | 77 ++++++++++++++++++++++++-------------------------------- toybox.h | 3 ++- 3 files changed, 57 insertions(+), 50 deletions(-) diff --git a/task.c b/task.c index d906048..7845cf9 100644 --- a/task.c +++ b/task.c @@ -1,5 +1,6 @@ #include #include +#include #include "toybox.h" // IDEAS @@ -7,14 +8,30 @@ // - Sincronização via ADB // - Organização por prioridade // - Data limite - + +// --- Global values - Don't use it, them is just for easy edits --- + +// directories (begin with nothing) +char* DATA_DIR = ".local/share/task-cli"; +char* CONFIG_DIR = ".config/task-cli"; + +// files +char* TASK_FILE = "task.txt"; + + int main() { - const char* TASK_DIR = get_dir(home(), ".local/share", "task"); + char* DEF_DATA_DIR = get_dir(home(), DATA_DIR); + char* DEF_CONFIG_DIR = get_dir(home(), CONFIG_DIR); - printf("[DEBUG]: Tentando imprimir...\n"); - printf("%s", TASK_DIR); + char* DEF_TASK_FILE = get_file(DEF_DATA_DIR, TASK_FILE); + + printf("DEF_DATA_DIR: %s\n", DEF_DATA_DIR); + printf("DEF_CONFIG_DIR: %s\n", DEF_CONFIG_DIR); + printf("DEF_TASK_FILE: %s\n", DEF_TASK_FILE); - free(TASK_DIR); + free(DEF_DATA_DIR); + free(DEF_CONFIG_DIR); + free(DEF_TASK_FILE); return 0; } diff --git a/toybox.c b/toybox.c index 345d10b..6f06f8f 100644 --- a/toybox.c +++ b/toybox.c @@ -21,61 +21,50 @@ char* home() } // DIR_NAME deve ser o nome do diretório, não o caminho (ex: task) -// DIR_ROOT é o fallback caso a XDG_VAR não exista -// Caso o diretório não estiver na home, use NULL como primeiro argumento // Se HOME = NULL, a função assume que a pasta que quer está fora da pasta /home/usuário // Importante: essa função retorna um char*. Para abrir o diretório retornado, você deve usar // a função opendir() com o valor retornado de get_dir() -char* get_dir(char* HOME, char* DIR_ROOT, char* DIR_NAME) { +char* get_dir(const char* HOME, const char* DIR_NAME) { if (DIR_NAME[0] == '~') { - perror("get_dir function doesn't expand '~'!"); + perror("get_dir doesn't expand '~'"); return NULL; - } else if (DIR_NAME[0] == '/') { - perror("get_dir DIR_NAME (3rd argumment) can't begin with '/'!"); + } + if (DIR_NAME[0] == '/') { + perror("DIR_NAME can't begin with '/'"); return NULL; } - char *DIR_FINAL; + const char *prefix = HOME ? HOME : ""; - // se não tiver home, assume estar na raíz - if (HOME) { - int size = strlen(home()) + 1 + strlen(DIR_ROOT) + 1 + strlen(DIR_NAME); - DIR_FINAL = malloc(size); - DIR_FINAL[0] = '\0'; - - strcat(DIR_FINAL, HOME); - strcat(DIR_FINAL, "/"); - strcat(DIR_FINAL, DIR_ROOT); - strcat(DIR_FINAL, "/"); - strcat(DIR_FINAL, DIR_NAME); - } else { - int size = 1 + strlen(DIR_ROOT) + 1 + strlen(DIR_NAME) + 1; - DIR_FINAL = malloc(size); - DIR_FINAL[0] = '\0'; - - strcat(DIR_FINAL, "/"); - strcat(DIR_FINAL, DIR_ROOT); - strcat(DIR_FINAL, "/"); - strcat(DIR_FINAL, DIR_NAME); + int size = strlen(prefix) + 1 + strlen(DIR_NAME) + 1; + char *DIR_FINAL = malloc(size); + if (!DIR_FINAL) { + perror("malloc failed"); + return NULL; } - - if (!DIR_FINAL) { - fprintf(stderr, "Return of %s in get_dir is NULL!", - DIR_FINAL); - return NULL; - } else { - const DIR *dir_exist = opendir(DIR_FINAL); - if (!dir_exist) { - const int status = mkdir(DIR_FINAL, 0755); - if (status != 0) { - fprintf(stderr, "'%s' doesn't exist and cannot be created!", - DIR_FINAL); - return NULL; - } + sprintf(DIR_FINAL, "%s/%s", prefix, DIR_NAME); + + DIR *dir = opendir(DIR_FINAL); + if (!dir) { + if (mkdir(DIR_FINAL, 0755) != 0) { + fprintf(stderr, "'%s' cannot be created\n", DIR_FINAL); + free(DIR_FINAL); + return NULL; } - - return DIR_FINAL; + } else { + closedir(dir); } -} + + return DIR_FINAL; +} + +char* get_file(char* ROOT, char* FILE_NAME) { + char* FINAL_FILE; + + FINAL_FILE = malloc(strlen(ROOT) + strlen(FILE_NAME) + 1); + sprintf(FINAL_FILE, "%s/%s", ROOT, FILE_NAME); + + return FINAL_FILE; +} diff --git a/toybox.h b/toybox.h index d3585bc..1cd5f6b 100644 --- a/toybox.h +++ b/toybox.h @@ -2,6 +2,7 @@ #define TOYBOX_H char* home(); -char* get_dir(char* HOME, char* DIR_ROOT, char* DIR_NAME); +char* get_dir(const char* HOME, const char* DIR_NAME); +char* get_file(char* ROOT, char* FILE_NAME); #endif