int _wapi_open (const char *pathname, int flags, mode_t mode) { int fd; gchar *located_filename; if (flags & O_CREAT) { located_filename = mono_portability_find_file (pathname, FALSE); if (located_filename == NULL) { fd = open (pathname, flags, mode); } else { fd = open (located_filename, flags, mode); g_free (located_filename); } } else { fd = open (pathname, flags, mode); if (fd == -1 && (errno == ENOENT || errno == ENOTDIR) && IS_PORTABILITY_SET) { int saved_errno = errno; located_filename = mono_portability_find_file (pathname, TRUE); if (located_filename == NULL) { errno = saved_errno; return (-1); } fd = open (located_filename, flags, mode); g_free (located_filename); } } return(fd); }
int _wapi_rename (const char *oldpath, const char *newpath) { int ret; gchar *located_newpath = mono_portability_find_file (newpath, FALSE); if (located_newpath == NULL) { ret = rename (oldpath, newpath); } else { ret = rename (oldpath, located_newpath); if (ret == -1 && (errno == EISDIR || errno == ENAMETOOLONG || errno == ENOENT || errno == ENOTDIR || errno == EXDEV) && IS_PORTABILITY_SET) { int saved_errno = errno; gchar *located_oldpath = mono_portability_find_file (oldpath, TRUE); if (located_oldpath == NULL) { g_free (located_oldpath); g_free (located_newpath); errno = saved_errno; return(-1); } ret = rename (located_oldpath, located_newpath); g_free (located_oldpath); } g_free (located_newpath); } return(ret); }
GDir *_wapi_g_dir_open (const gchar *path, guint flags, GError **error) { GDir *ret; ret = g_dir_open (path, flags, error); if (ret == NULL && ((*error)->code == G_FILE_ERROR_NOENT || (*error)->code == G_FILE_ERROR_NOTDIR || (*error)->code == G_FILE_ERROR_NAMETOOLONG) && IS_PORTABILITY_SET) { gchar *located_filename = mono_portability_find_file (path, TRUE); GError *tmp_error = NULL; if (located_filename == NULL) { return(NULL); } ret = g_dir_open (located_filename, flags, &tmp_error); g_free (located_filename); if (tmp_error == NULL) { g_clear_error (error); } } return(ret); }
int _wapi_mkdir (const char *pathname, mode_t mode) { int ret; gchar *located_filename = mono_portability_find_file (pathname, FALSE); if (located_filename == NULL) { ret = mkdir (pathname, mode); } else { ret = mkdir (located_filename, mode); g_free (located_filename); } return(ret); }
int ves_icall_System_IO_InotifyWatcher_AddWatch (int fd, MonoString *name, gint32 mask) { MonoError error; char *str, *path; int retval; if (name == NULL) return -1; str = mono_string_to_utf8_checked (name, &error); if (mono_error_set_pending_exception (&error)) return -1; path = mono_portability_find_file (str, TRUE); if (!path) path = str; retval = inotify_add_watch (fd, path, mask); if (retval < 0) { switch (errno) { case EACCES: errno = ERROR_ACCESS_DENIED; break; case EBADF: errno = ERROR_INVALID_HANDLE; break; case EFAULT: errno = ERROR_INVALID_ACCESS; break; case EINVAL: errno = ERROR_INVALID_DATA; break; case ENOMEM: errno = ERROR_NOT_ENOUGH_MEMORY; break; case ENOSPC: errno = ERROR_TOO_MANY_OPEN_FILES; break; default: errno = ERROR_GEN_FAILURE; break; } mono_marshal_set_last_error (); } if (path != str) g_free (path); g_free (str); return retval; }
int _wapi_chmod (const char *pathname, mode_t mode) { int ret; ret = chmod (pathname, mode); if (ret == -1 && (errno == ENOENT || errno == ENOTDIR) && IS_PORTABILITY_SET) { int saved_errno = errno; gchar *located_filename = mono_portability_find_file (pathname, TRUE); if (located_filename == NULL) { errno = saved_errno; return(-1); } ret = chmod (located_filename, mode); g_free (located_filename); } return(ret); }
int _wapi_chdir (const char *path) { int ret; ret = chdir (path); if (ret == -1 && (errno == ENOENT || errno == ENOTDIR || errno == ENAMETOOLONG) && IS_PORTABILITY_SET) { int saved_errno = errno; gchar *located_filename = mono_portability_find_file (path, TRUE); if (located_filename == NULL) { errno = saved_errno; return(-1); } ret = chdir (located_filename); g_free (located_filename); } return(ret); }
int _wapi_lstat (const char *path, struct stat *buf) { int ret; ret = lstat (path, buf); if (ret == -1 && (errno == ENOENT || errno == ENOTDIR) && IS_PORTABILITY_SET) { int saved_errno = errno; gchar *located_filename = mono_portability_find_file (path, TRUE); if (located_filename == NULL) { errno = saved_errno; return(-1); } ret = lstat (located_filename, buf); g_free (located_filename); } return(ret); }
int _wapi_utime (const char *filename, const struct utimbuf *buf) { int ret; ret = utime (filename, buf); if (ret == -1 && errno == ENOENT && IS_PORTABILITY_SET) { int saved_errno = errno; gchar *located_filename = mono_portability_find_file (filename, TRUE); if (located_filename == NULL) { errno = saved_errno; return(-1); } ret = utime (located_filename, buf); g_free (located_filename); } return(ret); }