diff -ruwN glib-2.87.0/fuzzing/fuzz_resolver.c source/fuzzing/fuzz_resolver.c --- glib-2.87.0/fuzzing/fuzz_resolver.c 2025-11-03 19:42:10.000000000 +0700 +++ source/fuzzing/fuzz_resolver.c 2026-02-19 13:53:45.717898735 +0700 @@ -29,7 +29,7 @@ gint rrtype) { /* g_resolver_records_from_res_query() is only available on Unix */ -#ifdef G_OS_UNIX +#if defined(G_OS_UNIX) && !defined(__redox__) GList *record_list = NULL; /* Data too long? */ diff -ruwN glib-2.87.0/gio/gcredentialsprivate.h source/gio/gcredentialsprivate.h --- glib-2.87.0/gio/gcredentialsprivate.h 2025-11-03 19:42:10.000000000 +0700 +++ source/gio/gcredentialsprivate.h 2026-02-19 13:53:45.717995965 +0700 @@ -104,7 +104,7 @@ */ #undef G_CREDENTIALS_HAS_PID -#ifdef __linux__ +#if defined(__linux__) || defined(__redox__) #define G_CREDENTIALS_SUPPORTED 1 #define G_CREDENTIALS_USE_LINUX_UCRED 1 #define G_CREDENTIALS_NATIVE_TYPE G_CREDENTIALS_TYPE_LINUX_UCRED diff -ruwN glib-2.87.0/gio/glocalfile.c source/gio/glocalfile.c --- glib-2.87.0/gio/glocalfile.c 2025-11-03 19:42:10.000000000 +0700 +++ source/gio/glocalfile.c 2026-02-19 13:53:45.718204283 +0700 @@ -47,6 +47,10 @@ #include #endif +#if defined(__redox__) +#undef AT_FDCWD +#endif + #ifndef O_BINARY #define O_BINARY 0 #endif diff -ruwN glib-2.87.0/gio/gnetworking.h.in source/gio/gnetworking.h.in --- glib-2.87.0/gio/gnetworking.h.in 2025-11-03 19:42:10.000000000 +0700 +++ source/gio/gnetworking.h.in 2026-02-19 13:53:45.718380100 +0700 @@ -40,13 +40,17 @@ #include #include #include +#if !defined(__redox__) #include +#endif #include #include #include #include +#if !defined(__redox__) #include +#endif @NAMESER_COMPAT_INCLUDE@ #ifndef __GI_SCANNER__ diff -ruwN glib-2.87.0/gio/gsocket.c source/gio/gsocket.c --- glib-2.87.0/gio/gsocket.c 2025-11-03 19:42:10.000000000 +0700 +++ source/gio/gsocket.c 2026-03-05 11:29:00.807439664 +0700 @@ -3133,7 +3133,8 @@ { int errsv = get_socket_errno (); - if (errsv == EINTR) + // TODO: uds connect() in redox is blocking + if (errsv == EINTR || errsv == EAGAIN) continue; #ifndef G_OS_WIN32 diff -ruwN glib-2.87.0/gio/gthreadedresolver.c source/gio/gthreadedresolver.c --- glib-2.87.0/gio/gthreadedresolver.c 2025-11-03 05:42:10.000000000 -0700 +++ source/gio/gthreadedresolver.c 2026-01-15 18:35:07.059664185 -0700 @@ -698,7 +698,7 @@ } -#if defined(G_OS_UNIX) +#if defined(G_OS_UNIX) && !defined(__redox__) #if defined __BIONIC__ && !defined BIND_4_COMPAT /* Copy from bionic/libc/private/arpa_nameser_compat.h @@ -1393,7 +1393,11 @@ { GList *records; -#if defined(G_OS_UNIX) +#if defined(__redox__) + g_set_error (error, G_RESOLVER_ERROR, G_RESOLVER_ERROR_INTERNAL, + _("No support for resolving ā€œ%sā€ on redox"), rrname); + return NULL; +#elif defined(G_OS_UNIX) gint len = 512; gint herr; GByteArray *answer; diff -ruwN glib-2.87.0/gio/gunixconnection.c source/gio/gunixconnection.c --- glib-2.87.0/gio/gunixconnection.c 2025-11-03 05:42:10.000000000 -0700 +++ source/gio/gunixconnection.c 2026-01-15 18:35:07.059895298 -0700 @@ -496,7 +496,7 @@ GSocket *socket; gint n; gssize num_bytes_read; -#ifdef __linux__ +#if defined(__linux__) || defined(__redox__) gboolean turn_off_so_passcreds; #endif @@ -512,7 +512,7 @@ * already. We also need to turn it off when we're done. See * #617483 for more discussion. */ -#ifdef __linux__ +#if defined(__linux__) || defined(__redox__) { gint opt_val; @@ -626,7 +626,7 @@ out: -#ifdef __linux__ +#if defined(__linux__) || defined(__redox__) if (turn_off_so_passcreds) { if (!g_socket_set_option (socket, diff -ruwN glib-2.87.0/gio/gunixmounts.c source/gio/gunixmounts.c --- glib-2.87.0/gio/gunixmounts.c 2025-11-03 05:42:10.000000000 -0700 +++ source/gio/gunixmounts.c 2026-01-15 18:35:07.060167680 -0700 @@ -1114,7 +1114,7 @@ } /* QNX {{{2 */ -#elif defined (HAVE_QNX) +#elif defined (HAVE_QNX) || defined(__redox__) static char * get_mtab_monitor_file (void) @@ -1758,6 +1758,28 @@ return NULL; } +#elif defined(__redox__) + +static GUnixMountPoint ** +_g_unix_mount_points_get_from_file (const char *table_path, + uint64_t *time_read_out, + size_t *n_points_out) +{ + /* Not supported on Redox. */ + if (time_read_out != NULL) + *time_read_out = 0; + if (n_points_out != NULL) + *n_points_out = 0; + return NULL; +} + +static GList * +_g_get_unix_mount_points (void) +{ + /* Not supported on Redox. */ + return NULL; +} + /* Common code {{{2 */ #else #error No g_get_mount_table() implementation for system diff -ruwN glib-2.87.0/gio/meson.build source/gio/meson.build --- glib-2.87.0/gio/meson.build 2025-11-03 19:42:10.000000000 +0700 +++ source/gio/meson.build 2026-02-19 13:53:45.718994535 +0700 @@ -18,7 +18,7 @@ gnetworking_h_nameser_compat_include = '' -if host_system not in ['windows', 'android'] +if host_system not in ['windows', 'android', 'redox'] # Don't check for C_IN on Android since it does not define it in public # headers, we define it ourselves wherever necessary if not cc.compiles('''#include @@ -39,7 +39,7 @@ network_libs = [ ] network_args = [ ] -if host_system != 'windows' +if host_system not in ['windows', 'redox'] # res_query() res_query_test = '''#include int main (int argc, char ** argv) { diff -ruwN glib-2.87.0/gio/tests/gdbus-server-auth.c source/gio/tests/gdbus-server-auth.c --- glib-2.87.0/gio/tests/gdbus-server-auth.c 2025-11-03 19:42:10.000000000 +0700 +++ source/gio/tests/gdbus-server-auth.c 2026-02-19 13:53:45.719091042 +0700 @@ -243,7 +243,7 @@ } else /* We should prefer EXTERNAL whenever it is allowed. */ { -#ifdef __linux__ +#if defined(__linux__) || defined(__redox__) /* We know that both GDBus and libdbus support full credentials-passing * on Linux. */ g_assert_cmpint (uid, ==, getuid ()); diff -ruwN glib-2.87.0/glib/glib-unix.c source/glib/glib-unix.c --- glib-2.87.0/glib/glib-unix.c 2025-11-03 19:42:10.000000000 +0700 +++ source/glib/glib-unix.c 2026-02-19 13:53:45.719219012 +0700 @@ -74,6 +74,10 @@ #include #endif /* defined (__FreeBSD__ )*/ +#if defined(__redox__) +#include +#endif + G_STATIC_ASSERT (sizeof (ssize_t) == GLIB_SIZEOF_SSIZE_T); G_STATIC_ASSERT (G_ALIGNOF (gssize) == G_ALIGNOF (ssize_t)); G_STATIC_ASSERT (G_SIGNEDNESS_OF (ssize_t) == 1); @@ -1004,6 +1008,20 @@ g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOSYS, "g_unix_fd_query_path() not supported on HURD"); return NULL; +#elif defined(__redox__) + char file_path[PATH_MAX] = {0}; + + if (redox_fpath (fd, file_path, PATH_MAX) < 0) + { + int errsv = errno; + + g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errsv), + "Error querying file information for FD %d: %s", + fd, g_strerror (errsv)); + return NULL; + } + + return g_strdup (file_path); #else #error "g_unix_fd_query_path() not supported on this platform" #endif diff -ruwN glib-2.87.0/glib/gstrfuncs.c source/glib/gstrfuncs.c --- glib-2.87.0/glib/gstrfuncs.c 2025-11-03 19:42:10.000000000 +0700 +++ source/glib/gstrfuncs.c 2026-02-19 13:53:45.719384853 +0700 @@ -707,7 +707,7 @@ gchar *fail_pos; gdouble val; -#ifndef __BIONIC__ +#if !defined(__BIONIC__) && !defined(__redox__) struct lconv *locale_data; #endif const char *decimal_point; @@ -720,7 +720,7 @@ fail_pos = NULL; -#ifndef __BIONIC__ +#if !defined(__BIONIC__) && !defined(__redox__) locale_data = localeconv (); decimal_point = locale_data->decimal_point; decimal_point_len = strlen (decimal_point); @@ -931,7 +931,7 @@ return buffer; #else -#ifndef __BIONIC__ +#if !defined(__BIONIC__) && !defined(__redox__) struct lconv *locale_data; #endif const char *decimal_point; @@ -964,7 +964,7 @@ _g_snprintf (buffer, buf_len, format, d); -#ifndef __BIONIC__ +#if !defined(__BIONIC__) && !defined(__redox__) locale_data = localeconv (); decimal_point = locale_data->decimal_point; decimal_point_len = strlen (decimal_point);