return strcmp (astr, bstr);
}
+static gint
+get_errno_from_g_file_error (gint error)
+{
+ switch (error) {
+#ifdef EACCESS
+ case G_FILE_ERROR_ACCES:
+ error = EACCES;
+ break;
+#endif
+#ifdef ENAMETOOLONG
+ case G_FILE_ERROR_NAMETOOLONG:
+ error = ENAMETOOLONG;
+ break;
+#endif
+#ifdef ENOENT
+ case G_FILE_ERROR_NOENT:
+ error = ENOENT;
+ break;
+#endif
+#ifdef ENOTDIR
+ case G_FILE_ERROR_NOTDIR:
+ error = ENOTDIR;
+ break;
+#endif
+#ifdef ENXIO
+ case G_FILE_ERROR_NXIO:
+ error = ENXIO;
+ break;
+#endif
+#ifdef ENODEV
+ case G_FILE_ERROR_NODEV:
+ error = ENODEV;
+ break;
+#endif
+#ifdef EROFS
+ case G_FILE_ERROR_ROFS:
+ error = EROFS;
+ break;
+#endif
+#ifdef ETXTBSY
+ case G_FILE_ERROR_TXTBSY:
+ error = ETXTBSY;
+ break;
+#endif
+#ifdef EFAULT
+ case G_FILE_ERROR_FAULT:
+ error = EFAULT;
+ break;
+#endif
+#ifdef ELOOP
+ case G_FILE_ERROR_LOOP:
+ error = ELOOP;
+ break;
+#endif
+#ifdef ENOSPC
+ case G_FILE_ERROR_NOSPC:
+ error = ENOSPC;
+ break;
+#endif
+#ifdef ENOMEM
+ case G_FILE_ERROR_NOMEM:
+ error = ENOMEM;
+ break;
+#endif
+#ifdef EMFILE
+ case G_FILE_ERROR_MFILE:
+ error = EMFILE;
+ break;
+#endif
+#ifdef ENFILE
+ case G_FILE_ERROR_NFILE:
+ error = ENFILE;
+ break;
+#endif
+#ifdef EBADF
+ case G_FILE_ERROR_BADF:
+ error = EBADF;
+ break;
+#endif
+#ifdef EINVAL
+ case G_FILE_ERROR_INVAL:
+ error = EINVAL;
+ break;
+#endif
+#ifdef EPIPE
+ case G_FILE_ERROR_PIPE:
+ error = EPIPE;
+ break;
+#endif
+#ifdef EAGAIN
+ case G_FILE_ERROR_AGAIN:
+ error = EAGAIN;
+ break;
+#endif
+#ifdef EINTR
+ case G_FILE_ERROR_INTR:
+ error = EINTR;
+ break;
+#endif
+#ifdef EWIO
+ case G_FILE_ERROR_IO:
+ error = EIO;
+ break;
+#endif
+#ifdef EPERM
+ case G_FILE_ERROR_PERM:
+ error = EPERM;
+ break;
+#endif
+ case G_FILE_ERROR_FAILED:
+ error = ERROR_INVALID_PARAMETER;
+ break;
+ }
+
+ return error;
+}
+
/* scandir using glib */
static gint
mono_io_scandir (const gchar *dirname, const gchar *pattern, gchar ***namelist)
if (dir == NULL) {
/* g_dir_open returns ENOENT on directories on which we don't
* have read/x permission */
- if (error->code == ENOENT && g_file_test (dirname, G_FILE_TEST_IS_DIR))
- error->code = EPERM;
- errno = error->code;
+ gint errnum = get_errno_from_g_file_error (error->code);
g_error_free (error);
+ if (errnum == ENOENT && g_file_test (dirname, G_FILE_TEST_IS_DIR))
+ errnum = EACCES;
+
+ errno = errnum;
return -1;
}
*/
result = mono_io_scandir (dir_part, entry_part, &find_handle->namelist);
- g_free (utf8_pattern);
- g_free (entry_part);
if (result < 0) {
#ifdef DEBUG
#ifdef DEBUG
g_message (G_GNUC_PRETTY_FUNCTION ": scandir error: %s", g_strerror (errnum));
#endif
+ g_free (utf8_pattern);
+ g_free (entry_part);
g_free (dir_part);
unref = TRUE;
goto cleanup;
}
+
+ g_free (utf8_pattern);
+ g_free (entry_part);
#ifdef DEBUG
g_message (G_GNUC_PRETTY_FUNCTION ": Got %d matches", result);