From 7db56ed3f9d1fcb8b6780b7c30ad93904625a0a3 Mon Sep 17 00:00:00 2001 From: dacctal Date: Mon, 17 Aug 2026 13:31:42 +0000 Subject: fundamentals are working and beautiful --- src/files.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) (limited to 'src/files.c') 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 +#include +#include + #include #include +#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; +} -- cgit v1.2.3