diff --git a/gio/tests/error.c b/gio/tests/error.c
new file mode 100644
index 000000000..133c2d777
--- /dev/null
+++ b/gio/tests/error.c
@@ -0,0 +1,788 @@
+/* Unit tests for gioerror
+ * GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2022 Marco Trevisan
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, see .
+ *
+ * Author: Marco Trevisan
+ */
+
+#include "config.h"
+#include
+
+#include
+
+#ifdef G_OS_WIN32
+#include
+#endif
+
+/* We are testing some deprecated APIs here */
+#ifndef GLIB_DISABLE_DEPRECATION_WARNINGS
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+#endif
+
+static void
+test_error_from_errno (void)
+{
+ g_assert_cmpint (g_io_error_from_errno (-1), ==, G_IO_ERROR_FAILED);
+
+#ifdef EEXIST
+ g_assert_cmpint (g_io_error_from_errno (EEXIST), ==,
+ G_IO_ERROR_EXISTS);
+#endif
+
+#ifdef EISDIR
+ g_assert_cmpint (g_io_error_from_errno (EISDIR), ==,
+ G_IO_ERROR_IS_DIRECTORY);
+#endif
+
+#ifdef EACCES
+ g_assert_cmpint (g_io_error_from_errno (EACCES), ==,
+ G_IO_ERROR_PERMISSION_DENIED);
+#endif
+
+#ifdef ENAMETOOLONG
+ g_assert_cmpint (g_io_error_from_errno (ENAMETOOLONG), ==,
+ G_IO_ERROR_FILENAME_TOO_LONG);
+#endif
+
+#ifdef ENOENT
+ g_assert_cmpint (g_io_error_from_errno (ENOENT), ==,
+ G_IO_ERROR_NOT_FOUND);
+#endif
+
+#ifdef ENOTDIR
+ g_assert_cmpint (g_io_error_from_errno (ENOTDIR), ==,
+ G_IO_ERROR_NOT_DIRECTORY);
+#endif
+
+#ifdef ENXIO
+ g_assert_cmpint (g_io_error_from_errno (ENXIO), ==,
+ G_IO_ERROR_NOT_REGULAR_FILE);
+#endif
+
+#ifdef EROFS
+ g_assert_cmpint (g_io_error_from_errno (EROFS), ==,
+ G_IO_ERROR_READ_ONLY);
+#endif
+
+#ifdef ELOOP
+ g_assert_cmpint (g_io_error_from_errno (ELOOP), ==,
+ G_IO_ERROR_TOO_MANY_LINKS);
+#endif
+
+#ifdef ENOSPC
+ g_assert_cmpint (g_io_error_from_errno (ENOSPC), ==,
+ G_IO_ERROR_NO_SPACE);
+#endif
+
+#ifdef ENOMEM
+ g_assert_cmpint (g_io_error_from_errno (ENOMEM), ==,
+ G_IO_ERROR_NO_SPACE);
+#endif
+
+#ifdef EINVAL
+ g_assert_cmpint (g_io_error_from_errno (EINVAL), ==,
+ G_IO_ERROR_INVALID_ARGUMENT);
+#endif
+
+#ifdef EPERM
+ g_assert_cmpint (g_io_error_from_errno (EPERM), ==,
+ G_IO_ERROR_PERMISSION_DENIED);
+#endif
+
+#ifdef ECANCELED
+ g_assert_cmpint (g_io_error_from_errno (ECANCELED), ==,
+ G_IO_ERROR_CANCELLED);
+#endif
+
+#ifdef ENOTEMPTY
+ g_assert_cmpint (g_io_error_from_errno (ENOTEMPTY), ==,
+ G_IO_ERROR_NOT_EMPTY);
+#endif
+
+#ifdef ENOTSUP
+ g_assert_cmpint (g_io_error_from_errno (ENOTSUP), ==,
+ G_IO_ERROR_NOT_SUPPORTED);
+#endif
+
+#ifdef EOPNOTSUPP
+ g_assert_cmpint (g_io_error_from_errno (EOPNOTSUPP), ==,
+ G_IO_ERROR_NOT_SUPPORTED);
+#endif
+
+#ifdef EPROTONOSUPPORT
+ g_assert_cmpint (g_io_error_from_errno (EPROTONOSUPPORT), ==,
+ G_IO_ERROR_NOT_SUPPORTED);
+#endif
+
+#ifdef ESOCKTNOSUPPORT
+ g_assert_cmpint (g_io_error_from_errno (ESOCKTNOSUPPORT), ==,
+ G_IO_ERROR_NOT_SUPPORTED);
+#endif
+
+#ifdef EPFNOSUPPORT
+ g_assert_cmpint (g_io_error_from_errno (EPFNOSUPPORT), ==,
+ G_IO_ERROR_NOT_SUPPORTED);
+#endif
+
+#ifdef EAFNOSUPPORT
+ g_assert_cmpint (g_io_error_from_errno (EAFNOSUPPORT), ==,
+ G_IO_ERROR_NOT_SUPPORTED);
+#endif
+
+#ifdef ETIMEDOUT
+ g_assert_cmpint (g_io_error_from_errno (ETIMEDOUT), ==,
+ G_IO_ERROR_TIMED_OUT);
+#endif
+
+#ifdef EBUSY
+ g_assert_cmpint (g_io_error_from_errno (EBUSY), ==,
+ G_IO_ERROR_BUSY);
+#endif
+
+#ifdef EWOULDBLOCK
+ g_assert_cmpint (g_io_error_from_errno (EWOULDBLOCK), ==,
+ G_IO_ERROR_WOULD_BLOCK);
+#endif
+
+#ifdef EAGAIN
+ g_assert_cmpint (g_io_error_from_errno (EAGAIN), ==,
+ G_IO_ERROR_WOULD_BLOCK);
+#endif
+
+#ifdef EMFILE
+ g_assert_cmpint (g_io_error_from_errno (EMFILE), ==,
+ G_IO_ERROR_TOO_MANY_OPEN_FILES);
+#endif
+
+#ifdef EADDRINUSE
+ g_assert_cmpint (g_io_error_from_errno (EADDRINUSE), ==,
+ G_IO_ERROR_ADDRESS_IN_USE);
+#endif
+
+#ifdef EHOSTUNREACH
+ g_assert_cmpint (g_io_error_from_errno (EHOSTUNREACH), ==,
+ G_IO_ERROR_HOST_UNREACHABLE);
+#endif
+
+#ifdef ENETUNREACH
+ g_assert_cmpint (g_io_error_from_errno (ENETUNREACH), ==,
+ G_IO_ERROR_NETWORK_UNREACHABLE);
+#endif
+
+#ifdef ECONNREFUSED
+ g_assert_cmpint (g_io_error_from_errno (ECONNREFUSED), ==,
+ G_IO_ERROR_CONNECTION_REFUSED);
+#endif
+
+#ifdef EPIPE
+ g_assert_cmpint (g_io_error_from_errno (EPIPE), ==,
+ G_IO_ERROR_BROKEN_PIPE);
+#endif
+
+#ifdef ECONNRESET
+ g_assert_cmpint (g_io_error_from_errno (ECONNRESET), ==,
+ G_IO_ERROR_CONNECTION_CLOSED);
+#endif
+
+#ifdef ENOTCONN
+ g_assert_cmpint (g_io_error_from_errno (ENOTCONN), ==,
+ G_IO_ERROR_NOT_CONNECTED);
+#endif
+
+#ifdef EMSGSIZE
+ g_assert_cmpint (g_io_error_from_errno (EMSGSIZE), ==,
+ G_IO_ERROR_MESSAGE_TOO_LARGE);
+#endif
+
+#ifdef ENOTSOCK
+ g_assert_cmpint (g_io_error_from_errno (ENOTSOCK), ==,
+ G_IO_ERROR_INVALID_ARGUMENT);
+#endif
+
+#ifdef ESRCH
+ g_assert_cmpint (g_io_error_from_errno (ESRCH), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EINTR
+ g_assert_cmpint (g_io_error_from_errno (EINTR), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EIO
+ g_assert_cmpint (g_io_error_from_errno (EIO), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef E2BIG
+ g_assert_cmpint (g_io_error_from_errno (E2BIG), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOEXEC
+ g_assert_cmpint (g_io_error_from_errno (ENOEXEC), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EBADF
+ g_assert_cmpint (g_io_error_from_errno (EBADF), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ECHILD
+ g_assert_cmpint (g_io_error_from_errno (ECHILD), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EFAULT
+ g_assert_cmpint (g_io_error_from_errno (EFAULT), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOTBLK
+ g_assert_cmpint (g_io_error_from_errno (ENOTBLK), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EXDEV
+ g_assert_cmpint (g_io_error_from_errno (EXDEV), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENODEV
+ g_assert_cmpint (g_io_error_from_errno (ENODEV), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENFILE
+ g_assert_cmpint (g_io_error_from_errno (ENFILE), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOTTY
+ g_assert_cmpint (g_io_error_from_errno (ENOTTY), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ETXTBSY
+ g_assert_cmpint (g_io_error_from_errno (ETXTBSY), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EFBIG
+ g_assert_cmpint (g_io_error_from_errno (EFBIG), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ESPIPE
+ g_assert_cmpint (g_io_error_from_errno (ESPIPE), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EDOM
+ g_assert_cmpint (g_io_error_from_errno (EDOM), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ERANGE
+ g_assert_cmpint (g_io_error_from_errno (ERANGE), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EDEADLK
+ g_assert_cmpuint (g_io_error_from_errno (EDEADLK), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOLCK
+ g_assert_cmpuint (g_io_error_from_errno (ENOLCK), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOSYS
+ g_assert_cmpuint (g_io_error_from_errno (ENOSYS), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOMSG
+ g_assert_cmpuint (g_io_error_from_errno (ENOMSG), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EIDRM
+ g_assert_cmpuint (g_io_error_from_errno (EIDRM), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ECHRNG
+ g_assert_cmpuint (g_io_error_from_errno (ECHRNG), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EL2NSYNC
+ g_assert_cmpuint (g_io_error_from_errno (EL2NSYNC), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EL3HLT
+ g_assert_cmpuint (g_io_error_from_errno (EL3HLT), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EL3RST
+ g_assert_cmpuint (g_io_error_from_errno (EL3RST), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ELNRNG
+ g_assert_cmpuint (g_io_error_from_errno (ELNRNG), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EUNATCH
+ g_assert_cmpuint (g_io_error_from_errno (EUNATCH), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOCSI
+ g_assert_cmpuint (g_io_error_from_errno (ENOCSI), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EL2HLT
+ g_assert_cmpuint (g_io_error_from_errno (EL2HLT), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EBADE
+ g_assert_cmpuint (g_io_error_from_errno (EBADE), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EBADR
+ g_assert_cmpuint (g_io_error_from_errno (EBADR), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EXFULL
+ g_assert_cmpuint (g_io_error_from_errno (EXFULL), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOANO
+ g_assert_cmpuint (g_io_error_from_errno (ENOANO), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EBADRQC
+ g_assert_cmpuint (g_io_error_from_errno (EBADRQC), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EBADSLT
+ g_assert_cmpuint (g_io_error_from_errno (EBADSLT), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EDEADLOCK
+ g_assert_cmpuint (g_io_error_from_errno (EDEADLOCK), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EBFONT
+ g_assert_cmpuint (g_io_error_from_errno (EBFONT), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOSTR
+ g_assert_cmpuint (g_io_error_from_errno (ENOSTR), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENODATA
+ g_assert_cmpuint (g_io_error_from_errno (ENODATA), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ETIME
+ g_assert_cmpuint (g_io_error_from_errno (ETIME), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOSR
+ g_assert_cmpuint (g_io_error_from_errno (ENOSR), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENONET
+ g_assert_cmpuint (g_io_error_from_errno (ENONET), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOPKG
+ g_assert_cmpuint (g_io_error_from_errno (ENOPKG), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EREMOTE
+ g_assert_cmpuint (g_io_error_from_errno (EREMOTE), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOLINK
+ g_assert_cmpuint (g_io_error_from_errno (ENOLINK), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EADV
+ g_assert_cmpuint (g_io_error_from_errno (EADV), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ESRMNT
+ g_assert_cmpuint (g_io_error_from_errno (ESRMNT), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ECOMM
+ g_assert_cmpuint (g_io_error_from_errno (ECOMM), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EPROTO
+ g_assert_cmpuint (g_io_error_from_errno (EPROTO), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EMULTIHOP
+ g_assert_cmpuint (g_io_error_from_errno (EMULTIHOP), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EDOTDOT
+ g_assert_cmpuint (g_io_error_from_errno (EDOTDOT), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EBADMSG
+ g_assert_cmpuint (g_io_error_from_errno (EBADMSG), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EOVERFLOW
+ g_assert_cmpuint (g_io_error_from_errno (EOVERFLOW), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOTUNIQ
+ g_assert_cmpuint (g_io_error_from_errno (ENOTUNIQ), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EBADFD
+ g_assert_cmpuint (g_io_error_from_errno (EBADFD), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EREMCHG
+ g_assert_cmpuint (g_io_error_from_errno (EREMCHG), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ELIBACC
+ g_assert_cmpuint (g_io_error_from_errno (ELIBACC), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ELIBBAD
+ g_assert_cmpuint (g_io_error_from_errno (ELIBBAD), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ELIBSCN
+ g_assert_cmpuint (g_io_error_from_errno (ELIBSCN), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ELIBMAX
+ g_assert_cmpuint (g_io_error_from_errno (ELIBMAX), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ELIBEXEC
+ g_assert_cmpuint (g_io_error_from_errno (ELIBEXEC), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EILSEQ
+ g_assert_cmpuint (g_io_error_from_errno (EILSEQ), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ERESTART
+ g_assert_cmpuint (g_io_error_from_errno (ERESTART), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ESTRPIPE
+ g_assert_cmpuint (g_io_error_from_errno (ESTRPIPE), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EUSERS
+ g_assert_cmpuint (g_io_error_from_errno (EUSERS), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EDESTADDRREQ
+ g_assert_cmpuint (g_io_error_from_errno (EDESTADDRREQ), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EPROTOTYPE
+ g_assert_cmpuint (g_io_error_from_errno (EPROTOTYPE), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOPROTOOPT
+ g_assert_cmpuint (g_io_error_from_errno (ENOPROTOOPT), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EADDRNOTAVAIL
+ g_assert_cmpuint (g_io_error_from_errno (EADDRNOTAVAIL), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENETDOWN
+ g_assert_cmpuint (g_io_error_from_errno (ENETDOWN), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ECONNABORTED
+ g_assert_cmpuint (g_io_error_from_errno (ECONNABORTED), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOBUFS
+ g_assert_cmpuint (g_io_error_from_errno (ENOBUFS), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EISCONN
+ g_assert_cmpuint (g_io_error_from_errno (EISCONN), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ESHUTDOWN
+ g_assert_cmpuint (g_io_error_from_errno (ESHUTDOWN), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ETOOMANYREFS
+ g_assert_cmpuint (g_io_error_from_errno (ETOOMANYREFS), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EHOSTDOWN
+ g_assert_cmpuint (g_io_error_from_errno (EHOSTDOWN), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EALREADY
+ g_assert_cmpuint (g_io_error_from_errno (EALREADY), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EINPROGRESS
+ g_assert_cmpuint (g_io_error_from_errno (EINPROGRESS), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ESTALE
+ g_assert_cmpuint (g_io_error_from_errno (ESTALE), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EUCLEAN
+ g_assert_cmpuint (g_io_error_from_errno (EUCLEAN), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOTNAM
+ g_assert_cmpuint (g_io_error_from_errno (ENOTNAM), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENAVAIL
+ g_assert_cmpuint (g_io_error_from_errno (ENAVAIL), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EISNAM
+ g_assert_cmpuint (g_io_error_from_errno (EISNAM), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EREMOTEIO
+ g_assert_cmpuint (g_io_error_from_errno (EREMOTEIO), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EDQUOT
+ g_assert_cmpuint (g_io_error_from_errno (EDQUOT), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOMEDIUM
+ g_assert_cmpuint (g_io_error_from_errno (ENOMEDIUM), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EMEDIUMTYPE
+ g_assert_cmpuint (g_io_error_from_errno (EMEDIUMTYPE), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOKEY
+ g_assert_cmpuint (g_io_error_from_errno (ENOKEY), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EKEYEXPIRED
+ g_assert_cmpuint (g_io_error_from_errno (EKEYEXPIRED), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EKEYREVOKED
+ g_assert_cmpuint (g_io_error_from_errno (EKEYREVOKED), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EKEYREJECTED
+ g_assert_cmpuint (g_io_error_from_errno (EKEYREJECTED), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EOWNERDEAD
+ g_assert_cmpuint (g_io_error_from_errno (EOWNERDEAD), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ENOTRECOVERABLE
+ g_assert_cmpuint (g_io_error_from_errno (ENOTRECOVERABLE), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef ERFKILL
+ g_assert_cmpuint (g_io_error_from_errno (ERFKILL), ==,
+ G_IO_ERROR_FAILED);
+#endif
+
+#ifdef EHWPOISON
+ g_assert_cmpuint (g_io_error_from_errno (EHWPOISON), ==,
+ G_IO_ERROR_FAILED);
+#endif
+}
+
+static void
+test_error_from_win32_error (void)
+{
+#ifdef G_OS_WIN32
+ g_assert_cmpint (g_io_error_from_win32_error (-1), ==, G_IO_ERROR_FAILED);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAEADDRINUSE), ==,
+ G_IO_ERROR_ADDRESS_IN_USE);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAEWOULDBLOCK), ==,
+ G_IO_ERROR_WOULD_BLOCK);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAEACCES), ==,
+ G_IO_ERROR_PERMISSION_DENIED);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSA_INVALID_HANDLE), ==,
+ G_IO_ERROR_INVALID_ARGUMENT);
+ g_assert_cmpint (g_io_error_from_win32_error (WSA_INVALID_PARAMETER), ==,
+ G_IO_ERROR_INVALID_ARGUMENT);
+ g_assert_cmpint (g_io_error_from_win32_error (WSAEINVAL), ==,
+ G_IO_ERROR_INVALID_ARGUMENT);
+ g_assert_cmpint (g_io_error_from_win32_error (WSAEBADF), ==,
+ G_IO_ERROR_INVALID_ARGUMENT);
+ g_assert_cmpint (g_io_error_from_win32_error (WSAENOTSOCK), ==,
+ G_IO_ERROR_INVALID_ARGUMENT);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAEPROTONOSUPPORT), ==,
+ G_IO_ERROR_NOT_SUPPORTED);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAECANCELLED), ==,
+ G_IO_ERROR_CANCELLED);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAESOCKTNOSUPPORT), ==,
+ G_IO_ERROR_NOT_SUPPORTED);
+ g_assert_cmpint (g_io_error_from_win32_error (WSAEOPNOTSUPP), ==,
+ G_IO_ERROR_NOT_SUPPORTED);
+ g_assert_cmpint (g_io_error_from_win32_error (WSAEPFNOSUPPORT), ==,
+ G_IO_ERROR_NOT_SUPPORTED);
+ g_assert_cmpint (g_io_error_from_win32_error (WSAEAFNOSUPPORT), ==,
+ G_IO_ERROR_NOT_SUPPORTED);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAECONNRESET), ==,
+ G_IO_ERROR_CONNECTION_CLOSED);
+ g_assert_cmpint (g_io_error_from_win32_error (WSAENETRESET), ==,
+ G_IO_ERROR_CONNECTION_CLOSED);
+ g_assert_cmpint (g_io_error_from_win32_error (WSAESHUTDOWN), ==,
+ G_IO_ERROR_CONNECTION_CLOSED);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAEHOSTUNREACH), ==,
+ G_IO_ERROR_HOST_UNREACHABLE);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAENETUNREACH), ==,
+ G_IO_ERROR_NETWORK_UNREACHABLE);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAECONNREFUSED), ==,
+ G_IO_ERROR_CONNECTION_REFUSED);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAETIMEDOUT), ==,
+ G_IO_ERROR_TIMED_OUT);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAENOTCONN), ==,
+ G_IO_ERROR_NOT_CONNECTED);
+ g_assert_cmpint (g_io_error_from_win32_error (ERROR_PIPE_LISTENING), ==,
+ G_IO_ERROR_NOT_CONNECTED);
+
+ g_assert_cmpint (g_io_error_from_win32_error (WSAEMSGSIZE), ==,
+ G_IO_ERROR_MESSAGE_TOO_LARGE);
+#else
+ g_test_skip ("Windows error codes can only be checked on Windows");
+#endif /* G_OS_WIN32 */
+}
+
+
+int
+main (int argc,
+ char *argv[])
+{
+ g_setenv ("LC_ALL", "C", TRUE);
+ g_test_init (&argc, &argv, G_TEST_OPTION_ISOLATE_DIRS, NULL);
+
+ g_test_add_func ("/error/from-errno", test_error_from_errno);
+ g_test_add_func ("/error/from-win32-error", test_error_from_win32_error);
+
+ return g_test_run ();
+}
diff --git a/gio/tests/meson.build b/gio/tests/meson.build
index b90c3e5c6..ce102a658 100644
--- a/gio/tests/meson.build
+++ b/gio/tests/meson.build
@@ -63,6 +63,7 @@ gio_tests = {
},
'data-input-stream' : {},
'data-output-stream' : {},
+ 'error': {},
'fileattributematcher' : {},
'filter-streams' : {},
'giomodule' : {