summaryrefslogtreecommitdiff
blob: bbb28573072bce5c6fdf8723793782b4c21a5bb3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
Program.launch will first attempt to open files using libgio and then fallback
to gnome-vfs.  gio_launch uses g_file_new_for_path which fails when passed a
URI.  If swt was built with USE="-gnome" then the fallback fails as well,
making it appear that a package has a dependency on swt[gnome] when it does
not.

Caused by: java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
        no swt-gnome-gtk-3740 in java.library.path
        no swt-gnome-gtk in java.library.path
        Can't load library: /home/xxx/.swt/lib/linux/x86_64/libswt-gnome-gtk-3740.so
        Can't load library: /home/xxx/.swt/lib/linux/x86_64/libswt-gnome-gtk.so

Use g_file_new_for_commandline_arg instead.

https://bugs.gentoo.org/424151


--- a/os.c
+++ b/os.c
@@ -3059,6 +3059,30 @@ fail:
 }
 #endif
 
+#ifndef NO__1g_1file_1new_1for_1commandline_1arg
+JNIEXPORT jintLong JNICALL OS_NATIVE(_1g_1file_1new_1for_1commandline_1arg)
+	(JNIEnv *env, jclass that, jbyteArray arg0)
+{
+	jbyte *lparg0=NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, _1g_1file_1new_1for_1commandline_1arg_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL)) == NULL) goto fail;
+/*
+	rc = (jintLong)g_file_new_for_commandline_arg(lparg0);
+*/
+	{
+		LOAD_FUNCTION(fp, g_file_new_for_commandline_arg)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)(jbyte *))fp)(lparg0);
+		}
+	}
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, _1g_1file_1new_1for_1commandline_1arg_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO__1g_1file_1new_1for_1path
 JNIEXPORT jintLong JNICALL OS_NATIVE(_1g_1file_1new_1for_1path)
 	(JNIEnv *env, jclass that, jbyteArray arg0)
--- a/os_custom.h
+++ b/os_custom.h
@@ -280,6 +280,7 @@
 #define g_file_icon_get_file_LIB LIB_GIO
 #define g_file_info_get_content_type_LIB LIB_GIO
 #define g_file_info_get_modification_time_LIB LIB_GIO
+#define g_file_new_for_commandline_arg_LIB LIB_GIO
 #define g_file_new_for_path_LIB LIB_GIO
 #define g_file_new_for_uri_LIB LIB_GIO
 #define g_file_read_LIB LIB_GIO
--- a/os_stats.c
+++ b/os_stats.c
@@ -18,8 +18,8 @@
 
 #ifdef NATIVE_STATS
 
-int OS_nativeFunctionCount = 1396;
-int OS_nativeFunctionCallCount[1396];
+int OS_nativeFunctionCount = 1397;
+int OS_nativeFunctionCallCount[1397];
 char * OS_nativeFunctionNames[] = {
 #ifndef JNI64
 	"Call__IIII",
@@ -250,6 +250,7 @@ char * OS_nativeFunctionNames[] = {
 	"_1g_1file_1icon_1get_1file",
 	"_1g_1file_1info_1get_1content_1type",
 	"_1g_1file_1info_1get_1modification_1time",
+	"_1g_1file_1new_1for_1commandline_1arg",
 	"_1g_1file_1new_1for_1path",
 	"_1g_1file_1new_1for_1uri",
 	"_1g_1file_1query_1info",
--- a/os_stats.h
+++ b/os_stats.h
@@ -258,6 +258,7 @@ typedef enum {
 	_1g_1file_1icon_1get_1file_FUNC,
 	_1g_1file_1info_1get_1content_1type_FUNC,
 	_1g_1file_1info_1get_1modification_1time_FUNC,
+	_1g_1file_1new_1for_1commandline_1arg_FUNC,
 	_1g_1file_1new_1for_1path_FUNC,
 	_1g_1file_1new_1for_1uri_FUNC,
 	_1g_1file_1query_1info_FUNC,
--- a/src/org/eclipse/swt/internal/gtk/OS.java
+++ b/src/org/eclipse/swt/internal/gtk/OS.java
@@ -2113,6 +2113,16 @@ public static final long /*int*/ g_file_new_for_path(byte[] fileName) {
 	}
 }
 /** @method flags=dynamic */
+public static final native long /*int*/ _g_file_new_for_commandline_arg(byte[] fileName);
+public static final long /*int*/ g_file_new_for_commandline_arg(byte[] fileName) {
+	lock.lock();
+	try {
+		return _g_file_new_for_commandline_arg(fileName);
+	} finally {
+		lock.unlock();
+	}
+}
+/** @method flags=dynamic */
 public static final native long /*int*/ _g_file_new_for_uri(byte[] fileName);
 public static final long /*int*/ g_file_new_for_uri(byte[] fileName) {
 	lock.lock();
--- a/src/org/eclipse/swt/program/Program.java
+++ b/src/org/eclipse/swt/program/Program.java
@@ -954,7 +954,7 @@ static boolean gio_isExecutable(String fileName) {
 static boolean gio_launch(String fileName) {
 	boolean result = false;
 	byte[] fileNameBuffer = Converter.wcsToMbcs (null, fileName, true);
-	long /*int*/ file = OS.g_file_new_for_path (fileNameBuffer);
+	long /*int*/ file = OS.g_file_new_for_commandline_arg (fileNameBuffer);
 	if (file != 0) {
 		long /*int*/ uri = OS.g_file_get_uri (file);
 		if (uri != 0) {