R_API int r_sys_rmkdir(const char *dir) { int ret = R_TRUE; const char slash = R_SYS_DIR[0]; char *path = strdup (dir), *ptr = path; if (*ptr==slash) ptr++; #if __WINDOWS__ { char *p = strstr (ptr, ":\\"); if (p) { ptr = p + 2; } } #endif while ((ptr = strchr (ptr, slash))) { *ptr = 0; if (!r_sys_mkdir (path) && r_sys_mkdir_failed ()) { eprintf ("r_sys_rmkdir: fail '%s' of '%s'\n", path, dir); free (path); return R_FALSE; } *ptr = slash; ptr++; } if (!r_sys_mkdir (path) && r_sys_mkdir_failed ()) ret = R_FALSE; free (path); return ret; }
R_API bool r_sys_mkdirp(const char *dir) { bool ret = true; char slash = R_SYS_DIR[0]; char *path = strdup (dir), *ptr = path; if (*ptr == slash) ptr++; #if __WINDOWS__ && !defined(__CYGWIN__) { char *p = strstr (ptr, ":\\"); if (p) ptr = p + 2; } #endif for (;;) { // find next slash for (; *ptr; ptr++) { if (*ptr == '/' || *ptr == '\\') { slash = *ptr; break; } } if (!*ptr) break; *ptr = 0; if (!r_sys_mkdir (path) && r_sys_mkdir_failed ()) { eprintf ("r_sys_mkdirp: fail '%s' of '%s'\n", path, dir); free (path); return false; } *ptr = slash; ptr++; } if (!r_sys_mkdir (path) && r_sys_mkdir_failed ()) ret = false; free (path); return ret; }
static int r_core_project_init() { int ret; char *str = r_str_home (".radare2"); if (str && (ret = r_sys_mkdir (str))) { if (!ret) { free (str); str = r_str_home (".radare2/plugins"); ret = r_sys_mkdir (str); if (ret) eprintf ("Cannot create ~/.radare2/plugins\n"); } } str = r_str_home (".radare2/rdb"); ret = r_sys_mkdir (str); free (str); return ret; }
static inline int r_sys_mkdirp(char *dir) { int ret = 1; const char slash = DIRSEP; char *path = dir; char *ptr = path; if (*ptr == slash) { ptr++; } #if __WINDOWS__ char *p = strstr (ptr, ":\\"); if (p) { ptr = p + 2; } #endif while ((ptr = strchr (ptr, slash))) { *ptr = 0; if (!r_sys_mkdir (path) && r_sys_mkdir_failed ()) { eprintf ("r_sys_mkdirp: fail '%s' of '%s'\n", path, dir); *ptr = slash; return 0; } *ptr = slash; ptr++; } return ret; }
R_API int r_io_create (RIO *io, const char *file, int mode, int type) { if (io->plugin && io->plugin->create) return io->plugin->create (io, file, mode, type); if (type == 'd'|| type == 1) return r_sys_mkdir (file); return r_sandbox_creat (file, mode)? R_FALSE: R_TRUE; }
R_API int r_sys_rmkdir(const char *dir) { int ret = R_TRUE; char *path = strdup (dir), *ptr = path; // XXX: Wrong for w32 (/).. and no errno ? if (*ptr=='/') ptr++; while ((ptr = strchr (ptr, '/'))) { *ptr = 0; if (!r_sys_mkdir (path) && r_sys_mkdir_failed ()) { eprintf ("r_sys_rmkdir: fail %s\n", dir); free (path); return R_FALSE; } *ptr = '/'; ptr++; } if (!r_sys_mkdir (path) && r_sys_mkdir_failed ()) ret = R_FALSE; free (path); return ret; }
R_API int r_sys_mkdirp(const char *dir) { int ret = R_TRUE; char slash = R_SYS_DIR[0]; char *path = strdup (dir), *ptr = path; if (*ptr==slash) ptr++; #if __WINDOWS__ { char *p = strstr (ptr, ":\\"); if (p) { ptr = p + 2; } } #endif for (;;) { // find next slash for (; *ptr; ptr++) { if (*ptr == '/' || *ptr == '\\') { slash = *ptr; break; } } if (!*ptr) break; *ptr = 0; if (!r_sys_mkdir (path) && r_sys_mkdir_failed ()) { eprintf ("r_sys_mkdirp: fail '%s' of '%s'\n", path, dir); free (path); return R_FALSE; } *ptr = slash; ptr++; } if (!r_sys_mkdir (path) && r_sys_mkdir_failed ()) ret = R_FALSE; free (path); return ret; }
// TODO: move into util.c ? static inline int r_sys_rmkdir(char *dir) { char *ptr = dir; if (*ptr==DIRSEP) ptr++; while ((ptr = strchr (ptr, DIRSEP))) { *ptr = 0; if (!r_sys_mkdir (dir) && r_sys_mkdir_failed ()) { eprintf ("r_sys_rmkdir: fail %s\n", dir); *ptr = DIRSEP; return 0; } *ptr = DIRSEP; ptr++; } return 1; }