diff options
| author | dacctal <donotcontactmevia@email.invalid> | 2026-08-17 13:31:42 +0000 |
|---|---|---|
| committer | dacctal <donotcontactmevia@email.invalid> | 2026-08-17 13:31:42 +0000 |
| commit | 7db56ed3f9d1fcb8b6780b7c30ad93904625a0a3 (patch) | |
| tree | 91c6e60d239c89ce29ea23b1dd9b8fcf66ce16d7 /src/files.c | |
| parent | 536b651f4086fe01d0bd1f743f54ef650524b122 (diff) | |
fundamentals are working and beautiful
Diffstat (limited to 'src/files.c')
| -rw-r--r-- | src/files.c | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/src/files.c b/src/files.c index 5eaa459..67a327a 100644 --- a/src/files.c +++ b/src/files.c @@ -4,8 +4,7 @@ Copyright (C) 2026 dacctal This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or + it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -18,9 +17,18 @@ */ +#define _XOPEN_SOURCE 500 +#include <stdio.h> +#include <ftw.h> +#include <unistd.h> + #include <stdbool.h> #include <sys/stat.h> +#include "log.h" +#include "state.h" +#include "str.h" + bool file_exists(const char *path) { struct stat buffer; return (stat(path, &buffer) == 0); @@ -30,4 +38,42 @@ bool is_directory(const char *path) { struct stat statbuf; if (stat(path, &statbuf) != 0) return false; return S_ISDIR(statbuf.st_mode); -}
\ No newline at end of file +} + +bool file_write(str *content, str *path) { + FILE *fileptr = fopen(path->data, "a"); + str_write_to_file(content, fileptr); + fclose(fileptr); + if (!file_exists(path->data)) { +// if (!flags.quiet) log_error( +// "could not write file: '%.*s'", str_fmt(path)); + return false; + } + return true; +} + +str file_read(str *path) { + if (!file_exists(path->data)) { +// if (!flags.quiet) log_error( +// "could not open file: '%.*s'", str_fmt(path)); + return str_new(); + } + FILE *fileptr = fopen(path->data, "r"); + str content = str_read_entire_file(fileptr); + fclose(fileptr); + return content; +} + +static int unlink_cb(const char *fpath, const struct stat *sb, +int typeflag, struct FTW *ftwbuf) { + (void)sb; + (void)typeflag; + (void)ftwbuf; + int rv = remove(fpath); + if (rv) perror(fpath); + return rv; +} + +bool rmrf(str *path) { + return nftw(path->data, unlink_cb, 64, FTW_DEPTH | FTW_PHYS) == 0; +} |
