fs-utils.c (1659B)
1 #include "fs-utils.h" 2 3 #include <limits.h> 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <string.h> 7 #include <sys/stat.h> 8 #include <unistd.h> 9 10 char *get_repo_dir(void) { 11 const char *home = getenv("HOME"); 12 if (!home) { 13 fprintf(stderr, "Error: HOME environment variable not set\n"); 14 return NULL; 15 } 16 size_t len = strlen(home) + strlen(REPO_DIR_DEFAULT) + 1; 17 char *path = malloc(len); 18 if (!path) { 19 fprintf(stderr, "Error: out of memory\n"); 20 return NULL; 21 } 22 snprintf(path, len, "%s%s", home, REPO_DIR_DEFAULT); 23 return path; 24 } 25 26 char *get_cache_dir(void) { 27 const char *home = getenv("HOME"); 28 if (!home) { 29 fprintf(stderr, "Error: HOME environment variable not set\n"); 30 return NULL; 31 } 32 size_t len = strlen(home) + strlen(CACHE_DIR_DEFAULT) + 1; 33 char *path = malloc(len); 34 if (!path) { 35 fprintf(stderr, "Error: out of memory\n"); 36 return NULL; 37 } 38 snprintf(path, len, "%s%s", home, CACHE_DIR_DEFAULT); 39 return path; 40 } 41 42 int mkdir_recursive(const char *path) { 43 char tmp[PATH_MAX]; 44 char *p = NULL; 45 size_t len; 46 47 snprintf(tmp, sizeof(tmp), "%s", path); 48 len = strlen(tmp); 49 if (tmp[len - 1] == '/') { 50 tmp[len - 1] = '\0'; 51 } 52 53 for (p = tmp + 1; *p; p++) { 54 if (*p == '/') { 55 *p = '\0'; 56 mkdir(tmp, 0755); 57 *p = '/'; 58 } 59 } 60 return mkdir(tmp, 0755); 61 } 62 63 char *trim_whitespace(char *str) { 64 while (*str == ' ' || *str == '\t' || *str == '\n' || *str == '\r') str++; 65 if (*str == '\0') return str; 66 char *end = str + strlen(str) - 1; 67 while (end > str && (*end == ' ' || *end == '\t' || *end == '\n' || *end == '\r')) { 68 *end = '\0'; 69 end--; 70 } 71 return str; 72 }