From 717583038d0c7742316f9615c7ffe79dbcbcc65b Mon Sep 17 00:00:00 2001 From: synt-xerror <169557594+synt-xerror@users.noreply.github.com> Date: Fri, 13 Feb 2026 09:50:38 -0300 Subject: [PATCH] first commit, i'm proud of myself --- .gitignore | 2 ++ Makefile | 1 + task.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 task.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..628e4c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +task.o +task diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f53f471 --- /dev/null +++ b/Makefile @@ -0,0 +1 @@ +gcc task.c $(pkg-config --cflags --libs glib-2.0) -o task diff --git a/task.c b/task.c new file mode 100644 index 0000000..383ced9 --- /dev/null +++ b/task.c @@ -0,0 +1,98 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +// IDEAS +// - Organização das tarefas por lista +// - Sincronização via ADB +// - Organização por prioridade +// - Data limite + +char* home() +{ + struct passwd *u; + u = getpwuid(getuid()); + + if (!u) { + perror("invalid return of getpwuid() function.\n"); + return NULL; + } + + return u->pw_dir; +} + +// 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) { + if (DIR_NAME[0] == '~') { + perror("get_dir function doesn't expand '~'!"); + return NULL; + } else if (DIR_NAME[0] == '/') { + perror("get_dir DIR_NAME (3rd argumment) can't begin with '/'!"); + return NULL; + } + + char *DIR_FINAL; + + // 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); + } + + + 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; + } + } + + return DIR_FINAL; + } +} + +int main() +{ + const char* TASK_DIR = get_dir(home(), ".local/share", "task"); + + printf("[DEBUG]: Tentando imprimir...\n"); + printf("%s", TASK_DIR); + + free(TASK_DIR); + return 0; +}