#include "file.h" #include "e.h" #include #include #include #include #include #include error_t touch (char *path, char *format, ...) { error_t err = { 0 }; err.null = true; FILE *fp = fopen (path, "w"); if (!fp) { err.null = false; err.status = errno; err.src = strerror (errno); return err; } else { va_list args; va_start (args, format); vfprintf (fp, format, args); va_end (args); } fclose (fp); return err; } error_t dir (char *format, ...) { error_t err = { 0 }; err.null = true; // success by default va_list args; va_start (args, format); char path[1024]; vsnprintf (path, sizeof (path), format, args); va_end (args); if (mkdir (path, 0777) < 0) { err.null = false; err.status = errno; err.src = strerror (errno); } return err; } error_t take (const char *dirname) { error_t err = dir ("%s", dirname); if (!err.null) { return err; } if (chdir (dirname) != 0) { err.null = false; err.status = errno; err.src = strerror (errno); return err; } return err; }