]> git.zerfleddert.de Git - rsbs2/blobdiff - src/filesystem.c
make sure i2c rxbuf does not overrun
[rsbs2] / src / filesystem.c
index d6446796e7e33918ed1ca531ffe09dcbb6e2a1a5..ef26de4fb3c30d5fde0c8efab5cc1eca23333f35 100644 (file)
@@ -161,16 +161,17 @@ void list_files(unsigned char *fw, int len)
 
 void mkdir_p(char *dir)
 {
-       char *copy, *parent;
+       char *parent;
 
        if ((dir == NULL) || (!strcmp(dir, ".")))
                return;
 
-       if ((copy = strdup(dir)) == NULL) {
+       parent = strdup(dirname(dir));
+       if (parent == NULL) {
                perror("strdup");
                exit(1);
        }
-       parent = dirname(copy);
+
        mkdir_p(parent);
 
        errno = 0;
@@ -181,7 +182,7 @@ void mkdir_p(char *dir)
                        exit(1);
                }
        }
-       free(copy);
+       free(parent);
 }
 
 void write_file(char *fname, unsigned char *buf, int len)
@@ -195,8 +196,13 @@ void write_file(char *fname, unsigned char *buf, int len)
                perror("strdup");
                exit(1);
        }
-       dirn = dirname(filename_c);
+       dirn = strdup(dirname(filename_c));
+       if (dirn == NULL) {
+               perror("strdup");
+               exit(1);
+       }
        mkdir_p(dirn);
+       free(dirn);
        free(filename_c);
 
        if ((fd = open(fname, O_WRONLY|O_CREAT, 0644)) == -1) {
Impressum, Datenschutz