dep

Package manager for embedded C libraries
git clone git://git.finwo.net/app/dep
Log | Files | Refs | README | LICENSE

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 }