diff options
Diffstat (limited to 'src/files.c')
| -rw-r--r-- | src/files.c | 93 |
1 files changed, 45 insertions, 48 deletions
diff --git a/src/files.c b/src/files.c index 5805d22..6842d63 100644 --- a/src/files.c +++ b/src/files.c @@ -6,7 +6,7 @@ const char *get_filename_ext(const char *filename) { const char *dot = strrchr(filename, '.'); - if(!dot || dot == filename) return ""; + if (!dot || dot == filename) return ""; return dot + 1; } @@ -15,75 +15,72 @@ void cpdir(const char *path, const char *dest) { struct dirent *dirp_ent; struct stat dest_st; - stat(dest, &dest_st); - if (dest_st.st_mode && dest_st.st_mode == S_IFDIR) { + stat(path, &dest_st); + if ((dest_st.st_mode & S_IFDIR) != 0) { mkdir(dest, dest_st.st_mode); } while ((dirp_ent = readdir(dirp))) { if (dirp_ent->d_name[0] == '.' && (strlen(dirp_ent->d_name) == 1 || - (strlen(dirp_ent->d_name) == 2 && - dirp_ent->d_name[1] == '.')) - ) continue; + (strlen(dirp_ent->d_name) == 2 && + dirp_ent->d_name[1] == '.') + ) + ) + continue; char rfile_line[1024]; struct stat st; - char *filename = malloc(sizeof(path)+sizeof(dirp_ent->d_name)+2); + char *filename = malloc(sizeof(path) + sizeof(dirp_ent->d_name) + 2); snprintf( - filename, - sizeof(path)+sizeof(dirp_ent->d_name)+2, - "%s/%s", - path, dirp_ent->d_name - ); - printf("FILENAME: %s\n", filename); + filename, + sizeof(path) + sizeof(dirp_ent->d_name) + 2, + "%s/%s", + path, + dirp_ent->d_name + ); stat(filename, &st); if (st.st_mode) { - char *newfile = malloc(sizeof(dest)+sizeof(dirp_ent->d_name)+2); + char *newfile = malloc(sizeof(dest) + sizeof(dirp_ent->d_name) + 2); snprintf( - newfile, - sizeof(dest)+sizeof(dirp_ent->d_name)+2, - "%s/%s", - dest, dirp_ent->d_name + newfile, + sizeof(dest) + sizeof(dirp_ent->d_name) + 2, + "%s/%s", + dest, + dirp_ent->d_name ); - if (st.st_mode == S_IFDIR) { - printf("DIRECTORY\n"); - printf("NEWDIR: %s\n", newfile); + if ((st.st_mode & S_IFDIR) != 0) { mkdir(newfile, st.st_mode); cpdir(filename, newfile); continue; } FILE *rfile = fopen(dirp_ent->d_name, "r"); FILE *wfile = fopen(newfile, "w+"); - if (!rfile || !wfile) { continue; } - size_t ret = fread( - rfile_line, - //sizeof(*rfile_line), - //sizeof(rfile_line)/sizeof(rfile_line[0]), - 1, - 1024, - rfile - ); - if (ret != sizeof(rfile_line)/sizeof(rfile_line[0]) && ferror(rfile)) { - fprintf(stderr, "file read failed: %zu\n", ret); + if (!rfile || !wfile) { continue; } - size_t write = fwrite( - rfile_line, - //sizeof(rfile_line[0]), - 1, - ret, - wfile - ); - if (write != sizeof(rfile_line)/sizeof(rfile_line[0])) { - fprintf(stderr, "file write failed: %zu\n", ret); - continue; - } - if (feof(rfile)) { - fclose(rfile); - fclose(wfile); - continue; + while (1) { + size_t ret = fread(rfile_line, 1, 1024, rfile); + if (ret != sizeof(rfile_line) / sizeof(rfile_line[0]) && ferror(rfile)) { + fprintf(stderr, "file read failed: %zu\n", ret); + break; + } + if (feof(rfile)) { + fclose(rfile); + fclose(wfile); + break; + } + size_t write = fwrite(rfile_line, 1, ret, wfile); + if (write != sizeof(rfile_line) / sizeof(rfile_line[0])) { + fprintf(stderr, "file write failed: %zu\n", ret); + break; + } + free(newfile); + if (feof(rfile)) { + fclose(rfile); + fclose(wfile); + break; + } } - free(newfile); } free(filename); } |
