Files
haikuports/dev-libs/glib/patches/glib2-2.78.0.patchset
2023-10-11 05:57:21 +00:00

452 lines
13 KiB
Plaintext

From 28e826ce18531fa9a97e69702706d2b93c06ed3c Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Sat, 29 Jul 2017 12:13:00 +0200
Subject: g_dbus_message_print: use B_PRIiDEV on Haiku
because Haiku doesn't define major() and minor()
diff --git a/gio/gdbusmessage.c b/gio/gdbusmessage.c
index adddb31..c257eba 100644
--- a/gio/gdbusmessage.c
+++ b/gio/gdbusmessage.c
@@ -37,8 +37,12 @@
#elif MAJOR_IN_TYPES
#include <sys/types.h>
#else
+#ifdef __HAIKU__
+#include <SupportDefs.h>
+#else
#define MAJOR_MINOR_NOT_FOUND 1
#endif
+#endif
#include "gdbusutils.h"
#include "gdbusmessage.h"
@@ -3707,8 +3711,14 @@ g_dbus_message_print (GDBusMessage *message,
if (fstat (fds[n], &statbuf) == 0)
{
#ifndef MAJOR_MINOR_NOT_FOUND
+#ifdef __HAIKU__
+ g_string_append_printf (fs, "%s" "dev=%" B_PRIiDEV, fs->len > 0 ? "," : "",
+ statbuf.st_dev);
+#else
+
g_string_append_printf (fs, "%s" "dev=%d:%d", fs->len > 0 ? "," : "",
(gint) major (statbuf.st_dev), (gint) minor (statbuf.st_dev));
+#endif
#endif
g_string_append_printf (fs, "%s" "mode=0%o", fs->len > 0 ? "," : "",
(guint) statbuf.st_mode);
@@ -3719,9 +3729,14 @@ g_dbus_message_print (GDBusMessage *message,
g_string_append_printf (fs, "%s" "gid=%u", fs->len > 0 ? "," : "",
(guint) statbuf.st_gid);
#ifndef MAJOR_MINOR_NOT_FOUND
+#ifdef __HAIKU__
+ g_string_append_printf (fs, "%s" "rdev=%" B_PRIiDEV, fs->len > 0 ? "," : "",
+ statbuf.st_rdev);
+#else
g_string_append_printf (fs, "%s" "rdev=%d:%d", fs->len > 0 ? "," : "",
(gint) major (statbuf.st_rdev), (gint) minor (statbuf.st_rdev));
#endif
+#endif
g_string_append_printf (fs, "%s" "size=%" G_GUINT64_FORMAT, fs->len > 0 ? "," : "",
(guint64) statbuf.st_size);
g_string_append_printf (fs, "%s" "atime=%" G_GUINT64_FORMAT, fs->len > 0 ? "," : "",
--
2.37.3
From b0c2d3ef2fcf06c75e200b280f8977918af427f0 Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Mon, 23 Aug 2021 19:31:38 +0000
Subject: gunixmounts.c: Add Haiku support
diff --git a/gio/gunixmounts.c b/gio/gunixmounts.c
index 1cfd25d..cb820e9 100644
--- a/gio/gunixmounts.c
+++ b/gio/gunixmounts.c
@@ -69,6 +69,9 @@ extern char* hasmntopt(const struct mntent* mnt, const char* opt);
#endif
#include <sys/mount.h>
#endif
+#ifdef __HAIKU__
+#include <kernel/fs_info.h>
+#endif
#ifndef O_BINARY
#define O_BINARY 0
@@ -969,6 +972,49 @@ _g_get_unix_mounts (void)
return return_list;
}
+/* Haiku {{{2 */
+#elif defined(__HAIKU__)
+
+static const char *
+get_mtab_monitor_file (void)
+{
+ return NULL;
+}
+
+static GList *
+_g_get_unix_mounts (void)
+{
+ int32 pos = 0;
+ GList* return_list = NULL;
+ struct fs_info info;
+ GUnixMountEntry* mount_entry;
+
+ while (1)
+ {
+ dev_t dev = next_dev (&pos);
+ if (dev < 0)
+ break;
+
+ if (fs_stat_dev (dev, &info) < 0)
+ continue;
+
+ mount_entry = g_new0 (GUnixMountEntry, 1);
+
+ mount_entry->mount_path = g_strdup (info.volume_name);
+ mount_entry->device_path = g_strdup (info.device_name);
+ mount_entry->filesystem_type = g_strdup (info.fsh_name);
+
+ mount_entry->is_read_only = (info.flags & B_FS_IS_READONLY) ? TRUE : FALSE;
+ mount_entry->is_system_internal = (info.flags & B_FS_IS_REMOVABLE) ? FALSE : TRUE;
+
+ return_list = g_list_prepend (return_list, mount_entry);
+ }
+
+ return_list = g_list_reverse (return_list);
+
+ return return_list;
+}
+
/* QNX {{{2 */
#elif defined (HAVE_QNX)
@@ -1502,16 +1548,8 @@ _g_get_unix_mount_points (void)
return g_list_reverse (return_list);
}
-/* Interix {{{2 */
-#elif defined(__INTERIX)
-static GList *
-_g_get_unix_mount_points (void)
-{
- return _g_get_unix_mounts ();
-}
-
-/* QNX {{{2 */
-#elif defined (HAVE_QNX)
+/* Interix, QNX, Haiku {{{2 */
+#elif defined (__INTERIX) || defined (HAVE_QNX) || defined (__HAIKU__)
static GList *
_g_get_unix_mount_points (void)
{
--
2.37.3
From 5b2ea998682fd35351b4b0fcf51658133320f654 Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Sat, 29 Jul 2017 12:32:14 +0200
Subject: glib/gutils.c: on Haiku define load_user_special_dirs()
use find_directory() from SupportDefs.h
diff --git a/glib/gutils.c b/glib/gutils.c
index 362c55a..c951c7a 100644
--- a/glib/gutils.c
+++ b/glib/gutils.c
@@ -78,6 +78,10 @@
#include "gwin32.h"
#endif
+#if defined(__HAIKU__)
+#include <FindDirectory.h>
+#include <fs_info.h>
+#endif
/**
* SECTION:misc_utils
@@ -1872,6 +1876,13 @@ g_build_user_data_dir (void)
#ifdef G_OS_WIN32
else
data_dir = get_special_folder (&FOLDERID_LocalAppData);
+#elif defined(__HAIKU__)
+ else {
+ char path[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH];
+ dev_t volume = dev_for_path("/boot");
+ if (find_directory(B_USER_NONPACKAGED_DATA_DIRECTORY, volume, false, path, sizeof(path)) == B_OK)
+ data_dir = g_strdup(path);
+ }
#endif
if (!data_dir || !data_dir[0])
{
@@ -1936,6 +1947,13 @@ g_build_user_config_dir (void)
#ifdef G_OS_WIN32
else
config_dir = get_special_folder (&FOLDERID_LocalAppData);
+#elif defined(__HAIKU__)
+ else {
+ char path[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH];
+ dev_t volume = dev_for_path("/boot");
+ if (find_directory(B_USER_SETTINGS_DIRECTORY, volume, false, path, sizeof(path)) == B_OK)
+ config_dir = g_strdup(path);
+ }
#endif
if (!config_dir || !config_dir[0])
{
@@ -1999,6 +2017,13 @@ g_build_user_cache_dir (void)
#ifdef G_OS_WIN32
else
cache_dir = get_special_folder (&FOLDERID_InternetCache);
+#elif defined(__HAIKU__)
+ else {
+ char path[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH];
+ dev_t volume = dev_for_path("/boot");
+ if (find_directory(B_USER_CACHE_DIRECTORY, volume, false, path, sizeof(path)) == B_OK)
+ cache_dir = g_strdup(path);
+ }
#endif
if (!cache_dir || !cache_dir[0])
{
@@ -2200,6 +2225,35 @@ load_user_special_dirs (void)
load_user_special_dirs_macos (g_user_special_dirs);
}
+#elif defined(__HAIKU__)
+static void
+load_user_special_dirs (void)
+{
+ char path[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH];
+
+ dev_t volume = dev_for_path("/boot");
+ if (find_directory(B_DESKTOP_DIRECTORY, volume, false, path, sizeof(path))
+ == B_OK) {
+ g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] = g_strdup(path);
+ g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = g_strdup(path);
+ } else {
+ g_user_special_dirs[G_USER_DIRECTORY_DOCUMENTS] = NULL;
+ g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] = NULL;
+ }
+
+ if (find_directory(B_USER_DIRECTORY, volume, false, path, sizeof(path))
+ == B_OK) {
+ g_user_special_dirs[G_USER_DIRECTORY_DOCUMENTS] = g_strdup(path);
+ } else
+ g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = NULL;
+
+ g_user_special_dirs[G_USER_DIRECTORY_MUSIC] = NULL;
+ g_user_special_dirs[G_USER_DIRECTORY_PICTURES] = NULL;
+ g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] = NULL;
+ g_user_special_dirs[G_USER_DIRECTORY_TEMPLATES] = NULL;
+ g_user_special_dirs[G_USER_DIRECTORY_VIDEOS] = NULL;
+}
+
#elif defined(G_OS_WIN32)
static void
@@ -2695,7 +2749,16 @@ g_build_system_data_dirs (void)
*/
#ifndef G_OS_WIN32
if (!data_dirs || !data_dirs[0])
+#if defined(__HAIKU__)
+ {
+ char path[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH];
+ dev_t volume = dev_for_path("/boot");
+ if (find_directory(B_SYSTEM_DATA_DIRECTORY, volume, false, path, sizeof(path)) == B_OK)
+ data_dirs = g_strdup(path);
+ }
+#else
data_dirs = "/usr/local/share/:/usr/share/";
+#endif
data_dir_vector = g_strsplit (data_dirs, G_SEARCHPATH_SEPARATOR_S, 0);
#else
@@ -2790,6 +2853,20 @@ g_build_system_config_dirs (void)
g_free (special_conf_dirs);
}
+#elif defined(__HAIKU__)
+ if (conf_dirs)
+ {
+ conf_dir_vector = g_strsplit (conf_dirs, G_SEARCHPATH_SEPARATOR_S, 0);
+ }
+ else
+ {
+ char path[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH];
+ dev_t volume = dev_for_path("/boot");
+ if (find_directory(B_SYSTEM_SETTINGS_DIRECTORY, volume, false, path, sizeof(path)) == B_OK)
+ conf_dir_vector = g_strsplit (path, G_SEARCHPATH_SEPARATOR_S, 0);
+ else
+ conf_dir_vector = g_strsplit ("", G_SEARCHPATH_SEPARATOR_S, 0);
+ }
#else
if (!conf_dirs || !conf_dirs[0])
conf_dirs = "/etc/xdg";
--
2.37.3
From 613744f2353cd7f08c1c61bc2051561fb2b0584b Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Sat, 23 Nov 2019 20:10:10 +0100
Subject: Haiku patch for x86
diff --git a/glib/tests/mapping.c b/glib/tests/mapping.c
index ea3495c..94bdaf1 100644
--- a/glib/tests/mapping.c
+++ b/glib/tests/mapping.c
@@ -193,6 +193,10 @@ test_private (void)
g_test_message ("test_private: ok");
}
+#ifdef __HAIKU__
+#include <SupportDefs.h>
+#endif
+
static void
test_child_private (void)
{
@@ -225,7 +229,12 @@ test_child_private (void)
signal (SIGUSR1, handle_usr1);
#endif
+#ifdef __HAIKU__
+ g_snprintf (pid, sizeof(pid), B_PRId32, getpid ());
+#else
g_snprintf (pid, sizeof(pid), "%d", getpid ());
+#endif
+
child_argv[0] = local_argv[0];
child_argv[1] = "mapchild";
child_argv[2] = pid;
--
2.37.3
From 842c55aafe88ffff563a1ebe8dafc6fada11e596 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Tue, 17 Aug 2021 08:29:48 +0000
Subject: Fix network detection
diff --git a/gio/meson.build b/gio/meson.build
index 9239e3c..7b837c4 100644
--- a/gio/meson.build
+++ b/gio/meson.build
@@ -26,6 +26,7 @@ if host_system not in ['windows', 'android']
int qclass = C_IN;''',
name : 'C_IN in public headers (no arpa/nameser_compat.h needed)')
if cc.compiles('''#include <sys/types.h>
+ #include <stdint.h>
#include <arpa/nameser.h>
#include <arpa/nameser_compat.h>
int qclass = C_IN;''',
@@ -46,6 +47,7 @@ if host_system != 'windows'
return res_query("test", 0, 0, (void *)0, 0);
}'''
res_query_test_full = '''#include <sys/types.h>
+ #include <stdint.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
''' + res_query_test
@@ -59,6 +61,9 @@ if host_system != 'windows'
elif cc.links(res_query_test, args : '-lsocket', name : 'res_query() in -lsocket')
network_libs += [ cc.find_library('socket') ]
network_args += [ '-lsocket' ]
+ elif cc.links(res_query_test, args : '-lnetwork', name : 'res_query() in -lnetwork')
+ network_libs += [ cc.find_library('network') ]
+ network_args += [ '-lnetwork' ]
else
error('Could not find res_query()')
endif
--
2.37.3
From 1d5dfbaf3b4fcba12c43f63895f90f8f4688d701 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Thu, 5 Jan 2023 18:31:01 +1000
Subject: Use find_directory for xdgmime
diff --git a/gio/xdgmime/xdgmime.c b/gio/xdgmime/xdgmime.c
index c3c1162..c48d390 100644
--- a/gio/xdgmime/xdgmime.c
+++ b/gio/xdgmime/xdgmime.c
@@ -45,6 +45,11 @@
#include <unistd.h>
#include <assert.h>
+#if defined(__HAIKU__)
+#include <FindDirectory.h>
+#include <fs_info.h>
+#endif
+
#ifndef S_ISREG
#define S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG)
#endif
@@ -239,6 +244,23 @@ xdg_init_dirs (void)
assert (xdg_dirs == NULL);
+#ifdef __HAIKU__
+ current_dir = 0;
+ xdg_dirs = calloc (2, sizeof (char *));
+
+ char path[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH];
+ dev_t volume = dev_for_path("/boot");
+ if (find_directory(B_SYSTEM_DATA_DIRECTORY, volume, false, path, sizeof(path)) == B_OK)
+ {
+ xdg_data_dirs = strdup(path);
+ strcat (xdg_data_dirs, "/mime/");
+ }
+ else
+ {
+ xdg_data_dirs = strdup("/system/data/mime/");
+ }
+ xdg_dirs[current_dir++] = xdg_data_dirs;
+#else
xdg_data_home = getenv ("XDG_DATA_HOME");
home = getenv ("HOME");
xdg_data_dirs = getenv ("XDG_DATA_DIRS");
@@ -311,7 +333,7 @@ xdg_init_dirs (void)
ptr = end_ptr;
}
-
+#endif
/* NULL terminator */
xdg_dirs[current_dir] = NULL;
--
2.37.3
From d8408d9bc8aee8ba6a7b8f0e8ca673c1ec54eae1 Mon Sep 17 00:00:00 2001
From: Begasus <begasus@gmail.com>
Date: Mon, 9 Oct 2023 11:43:56 +0200
Subject: Haiku doesn't have sys/ptrace.h
diff --git a/gio/tests/gsubprocess-testprog.c b/gio/tests/gsubprocess-testprog.c
index 610b8f3..84edc59 100644
--- a/gio/tests/gsubprocess-testprog.c
+++ b/gio/tests/gsubprocess-testprog.c
@@ -5,6 +5,7 @@
#include <errno.h>
#ifdef G_OS_UNIX
#include <unistd.h>
+#elif !defined(__HAIKU__)
#include <sys/ptrace.h>
#else
#include <io.h>
--
2.37.3