static int __io_posix_open(const char *file, int perm, int mode) { int fd; if (r_str_startswith (file, "file://")) { file += strlen ("file://"); } if (r_file_is_directory (file)) { return -1; } #if __WINDOWS__ // probably unnecessary to have this ifdef nowadays windows is posix enough if (perm & R_PERM_W) { fd = r_sandbox_open (file, O_BINARY | O_RDWR, 0); if (fd == -1 && perm & R_PERM_CREAT) { r_sandbox_creat (file, 0644); fd = r_sandbox_open (file, O_BINARY | O_RDWR | O_CREAT, 0); } } else { fd = r_sandbox_open (file, O_BINARY, 0); } #else const int posixFlags = (perm & R_PERM_W) ? (perm & R_PERM_CREAT) ? (O_RDWR | O_CREAT) : O_RDWR : O_RDONLY; fd = r_sandbox_open (file, posixFlags, mode); #endif return fd; }
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; }
static int __io_posix_open (RIO *io, const char *file, int flags, int mode) { int fd; #if __WINDOWS__ if (flags & R_IO_WRITE) { fd = r_sandbox_open (file, O_BINARY | 1, 0); if (fd == -1) r_sandbox_creat (file, O_BINARY); fd = r_sandbox_open (file, O_BINARY | 1, 0); } else fd = r_sandbox_open (file, O_BINARY, 0); #else fd = r_sandbox_open (file, (flags&R_IO_WRITE)? (O_RDWR|O_CREAT): O_RDONLY, mode); #endif return fd; }
static int __io_posix_open (const char *file, int flags, int mode) { int fd; if (r_file_is_directory (file)) return -1; #if __WINDOWS__ if (flags & R_IO_WRITE) { fd = r_sandbox_open (file, O_BINARY | O_RDWR, 0); if (fd == -1) { r_sandbox_creat (file, 0644); fd = r_sandbox_open (file, O_BINARY | O_RDWR, 0); } } else fd = r_sandbox_open (file, O_BINARY, 0); #else fd = r_sandbox_open (file, (flags&R_IO_WRITE)? (O_RDWR|O_CREAT): O_RDONLY, mode); #endif return fd; }