#include #include #include #include #include static int remove_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf) { int rv = 2; if (S_ISDIR(sb->st_mode)) { rv = rmdir(fpath); } else { rv = remove(fpath); } printf("lol %s\n", fpath); return rv; } int utilfuzz_rmrf(char *path) { return nftw(path, remove_cb, 64, FTW_DEPTH | FTW_PHYS); } char *globalto; size_t globallen = 0; #define CP_NAME_MAX_SIZE 512 #define CP_BUF_SIZE 4096 static int cp_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf) { char newname[CP_NAME_MAX_SIZE]; char buf[CP_BUF_SIZE]; int rv = 2; snprintf(newname, CP_NAME_MAX_SIZE-1, "%s%s", globalto, fpath+globallen); if (FTW_D == typeflag) { rv = mkdir(newname, sb->st_mode); } else { int fdin = open(fpath, O_RDONLY); int fdout = open(newname, O_WRONLY|O_CREAT, sb->st_mode); int nb = read(fdin, buf, CP_BUF_SIZE); while (nb > 0) { write(fdout, buf, nb); nb = read(fdin, buf, CP_BUF_SIZE); } rv = 0; } return rv; } int utilfuzz_cpr(char *pathfrom, char *pathto) { globalto = pathto; globallen = strlen(pathfrom); return nftw(pathfrom, cp_cb, 64, FTW_PHYS); }