summaryrefslogtreecommitdiff
path: root/dev-libs/sway/files/sway-0.15.0-json-c-fixes.patch
blob: 1e43eda62e81fc04643e619de7d2302803762854 (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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
From c6e12368a531dd4bbb0778c9a1dd5d3fb935c197 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82@fedoraproject.org>
Date: Thu, 14 Dec 2017 01:30:54 +0100
Subject: [PATCH 1/3] Lift restriction on json-c <= 0.12.1

---
 CMakeLists.txt | 2 +-
 README.de.md   | 2 +-
 README.el.md   | 2 +-
 README.fr.md   | 2 +-
 README.it.md   | 2 +-
 README.ja.md   | 2 +-
 README.md      | 2 +-
 README.pt.md   | 2 +-
 README.ru.md   | 2 +-
 README.uk.md   | 2 +-
 10 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index dc521570..bd12b191 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -59,7 +59,7 @@ if (LD_LIBRARY_PATH)
 	add_definitions(-D_LD_LIBRARY_PATH="${LD_LIBRARY_PATH}")
 endif()
 
-find_package(JsonC 0.12.1 REQUIRED)
+find_package(JsonC REQUIRED)
 find_package(PCRE REQUIRED)
 find_package(WLC REQUIRED)
 find_package(Wayland REQUIRED)
diff --git a/README.de.md b/README.de.md
index 701cc34f..293ffe70 100644
--- a/README.de.md
+++ b/README.de.md
@@ -60,7 +60,7 @@ Abhängigkeiten:
 * libcap
 * asciidoc
 * pcre
-* json-c <= 0.12.1
+* json-c
 * pango
 * cairo
 * gdk-pixbuf2 *
diff --git a/README.el.md b/README.el.md
index df39364f..eba97b9c 100644
--- a/README.el.md
+++ b/README.el.md
@@ -53,7 +53,7 @@ To username μου στο Freenode είναι kon14 και θα με βρείτ
 * libcap
 * asciidoc
 * pcre
-* json-c <= 0.12.1
+* json-c
 * pango
 * cairo
 * gdk-pixbuf2 *
diff --git a/README.fr.md b/README.fr.md
index 47b6c410..a4ff7cb9 100644
--- a/README.fr.md
+++ b/README.fr.md
@@ -55,7 +55,7 @@ Installez les dépendances :
 * libcap
 * asciidoc
 * pcre
-* json-c <= 0.12.1
+* json-c
 * pango
 * cairo
 * gdk-pixbuf2 *
diff --git a/README.it.md b/README.it.md
index f5e0d8e2..ded441c3 100644
--- a/README.it.md
+++ b/README.it.md
@@ -56,7 +56,7 @@ Installa queste dipendenze:
 * libcap
 * asciidoc
 * pcre
-* json-c <= 0.12.1
+* json-c
 * pango
 * cairo
 * gdk-pixbuf2 *
diff --git a/README.ja.md b/README.ja.md
index 2e8f9bfb..94b4ce9d 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -46,7 +46,7 @@ Swayは沢山のディストリビューションで提供されています。"
 * libcap
 * asciidoc
 * pcre
-* json-c <= 0.12.1
+* json-c
 * pango
 * cairo
 * gdk-pixbuf2 *
diff --git a/README.md b/README.md
index 29e8a674..eeca9f88 100644
--- a/README.md
+++ b/README.md
@@ -61,7 +61,7 @@ Install dependencies:
 * libcap
 * asciidoc
 * pcre
-* json-c <= 0.12.1
+* json-c
 * pango
 * cairo
 * gdk-pixbuf2 *
diff --git a/README.pt.md b/README.pt.md
index b5ca132f..e35849ec 100644
--- a/README.pt.md
+++ b/README.pt.md
@@ -62,7 +62,7 @@ Antes de iniciar a compilação, instale as dependências:
 * libcap
 * asciidoc
 * pcre
-* json-c <= 0.12.1
+* json-c
 * pango
 * cairo
 * gdk-pixbuf2 *
diff --git a/README.ru.md b/README.ru.md
index 4035b0fc..1551caa0 100644
--- a/README.ru.md
+++ b/README.ru.md
@@ -55,7 +55,7 @@ Sway доступен во многих дистрибутивах и наход
 * libcap
 * asciidoc
 * pcre
-* json-c <= 0.12.1
+* json-c
 * pango
 * cairo
 * gdk-pixbuf2 *
diff --git a/README.uk.md b/README.uk.md
index 2e107afc..c8520e4b 100644
--- a/README.uk.md
+++ b/README.uk.md
@@ -62,7 +62,7 @@ Sway доступний у багатьох дистрибутивах Linux (а
 * libcap
 * asciidoc
 * pcre
-* json-c <= 0.12.1
+* json-c
 * pango
 * cairo
 * gdk-pixbuf2 *

From 8272a9bae0d288b479c517dde3e831ea3889dc7f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82@fedoraproject.org>
Date: Thu, 14 Dec 2017 16:44:18 +0100
Subject: [PATCH 2/3] ipc-server: Acquire ownership of referenced json_object
 properly

When adding a referenced json_object with an unknown lifetime to
another json_object, it must be done with a wrapped call to
json_object_get() to acquire the ownership of that json_object.
---
 sway/ipc-server.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/sway/ipc-server.c b/sway/ipc-server.c
index b560b930..80f4e5d0 100644
--- a/sway/ipc-server.c
+++ b/sway/ipc-server.c
@@ -1126,7 +1126,8 @@ static void ipc_event_binding(json_object *sb_obj) {
 	sway_log(L_DEBUG, "Sending binding::run event");
 	json_object *obj = json_object_new_object();
 	json_object_object_add(obj, "change", json_object_new_string("run"));
-	json_object_object_add(obj, "binding", sb_obj);
+	// sb_obj gets owned by the temporary json_object, too.
+	json_object_object_add(obj, "binding", json_object_get(sb_obj));
 
 	const char *json_string = json_object_to_json_string(obj);
 	ipc_send_event(json_string, IPC_EVENT_BINDING);

From 02da9c4e7cafb36083566e511cc7913d8922aaa6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82@fedoraproject.org>
Date: Thu, 14 Dec 2017 17:14:47 +0100
Subject: [PATCH 3/3] Adaptions for API change in json-c v0.13

---
 include/sway_json_helper.h | 16 ++++++++++++++++
 include/swaygrab/json.h    |  2 +-
 sway/ipc-server.c          |  4 ++--
 swaybar/status_line.c      |  5 ++---
 swaygrab/json.c            |  9 ++++-----
 swaylock/main.c            |  4 ++--
 swaymsg/main.c             |  4 ++--
 7 files changed, 29 insertions(+), 15 deletions(-)
 create mode 100644 include/sway_json_helper.h

diff --git a/include/sway_json_helper.h b/include/sway_json_helper.h
new file mode 100644
index 00000000..66f9cff1
--- /dev/null
+++ b/include/sway_json_helper.h
@@ -0,0 +1,16 @@
+#ifndef _SWAY_JSON_HELPER_H
+#define _SWAY_JSON_HELPER_H
+
+#include <json-c/json.h>
+
+// Macros for checking a specific version.
+#define JSON_C_VERSION_013 (13 << 8)
+
+// json-c v0.13 uses size_t for array_list_length().
+#if defined(JSON_C_VERSION_NUM) && JSON_C_VERSION_NUM >= JSON_C_VERSION_013
+typedef size_t json_ar_len_t;
+#else
+typedef int json_ar_len_t;
+#endif
+
+#endif // _SWAY_JSON_HELPER_H
diff --git a/include/swaygrab/json.h b/include/swaygrab/json.h
index c1093ef1..c0bd8587 100644
--- a/include/swaygrab/json.h
+++ b/include/swaygrab/json.h
@@ -1,4 +1,4 @@
-#include <json-c/json.h>
+#include "sway_json_helper.h"
 #include "wlc/wlc.h"
 
 void init_json_tree(int socketfd);
diff --git a/sway/ipc-server.c b/sway/ipc-server.c
index 80f4e5d0..e10445cf 100644
--- a/sway/ipc-server.c
+++ b/sway/ipc-server.c
@@ -15,7 +15,6 @@
 #include <stdlib.h>
 #include <sys/ioctl.h>
 #include <fcntl.h>
-#include <json-c/json.h>
 #include <list.h>
 #include <libinput.h>
 #ifdef __linux__
@@ -25,6 +24,7 @@ struct ucred {
 	gid_t gid;
 };
 #endif
+#include "sway_json_helper.h"
 #include "sway/ipc-json.h"
 #include "sway/ipc-server.h"
 #include "sway/security.h"
@@ -724,7 +724,7 @@ void ipc_client_handle_command(struct ipc_client *client) {
 		}
 
 		// parse requested event types
-		for (int i = 0; i < json_object_array_length(request); i++) {
+		for (json_ar_len_t i = 0; i < json_object_array_length(request); i++) {
 			const char *event_type = json_object_get_string(json_object_array_get_idx(request, i));
 			if (strcmp(event_type, "workspace") == 0) {
 				client->subscribed_events |= event_mask(IPC_EVENT_WORKSPACE);
diff --git a/swaybar/status_line.c b/swaybar/status_line.c
index 87e90caf..e3cc0bf4 100644
--- a/swaybar/status_line.c
+++ b/swaybar/status_line.c
@@ -2,8 +2,8 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <json-c/json.h>
 
+#include "sway_json_helper.h"
 #include "swaybar/config.h"
 #include "swaybar/status_line.h"
 #include "log.h"
@@ -70,8 +70,7 @@ static void parse_json(struct bar *bar, const char *text) {
 
 	bar->status->block_line = create_list();
 
-	int i;
-	for (i = 0; i < json_object_array_length(results); ++i) {
+	for (json_ar_len_t i = 0; i < json_object_array_length(results); ++i) {
 		json_object *full_text, *short_text, *color, *min_width, *align, *urgent;
 		json_object *name, *instance, *separator, *separator_block_width;
 		json_object *background, *border, *border_top, *border_bottom;
diff --git a/swaygrab/json.c b/swaygrab/json.c
index 286085c3..f0e8fa90 100644
--- a/swaygrab/json.c
+++ b/swaygrab/json.c
@@ -50,8 +50,7 @@ static json_object *get_focused_container_r(json_object *c) {
 	} else {
 		json_object *nodes, *node, *child;
 		json_object_object_get_ex(c, "nodes", &nodes);
-		int i;
-		for (i = 0; i < json_object_array_length(nodes); i++) {
+		for (json_ar_len_t i = 0; i < json_object_array_length(nodes); i++) {
 			node = json_object_array_get_idx(nodes, i);
 
 			if ((child = get_focused_container_r(node))) {
@@ -60,7 +59,7 @@ static json_object *get_focused_container_r(json_object *c) {
 		}
 
 		json_object_object_get_ex(c, "floating_nodes", &nodes);
-		for (i = 0; i < json_object_array_length(nodes); i++) {
+		for (json_ar_len_t i = 0; i < json_object_array_length(nodes); i++) {
 			node = json_object_array_get_idx(nodes, i);
 
 			if ((child = get_focused_container_r(node))) {
@@ -83,7 +82,7 @@ char *get_focused_output() {
 	if (!outputs) {
 		sway_abort("Unabled to get focused output. No nodes in tree.");
 	}
-	for (int i = 0; i < json_object_array_length(outputs); i++) {
+	for (json_ar_len_t i = 0; i < json_object_array_length(outputs); i++) {
 		output = json_object_array_get_idx(outputs, i);
 
 		if (get_focused_container_r(output)) {
@@ -131,7 +130,7 @@ json_object *get_output_container(const char *output) {
 	json_object *outputs, *json_output, *name;
 	json_object_object_get_ex(tree, "nodes", &outputs);
 
-	for (int i = 0; i < json_object_array_length(outputs); i++) {
+	for (json_ar_len_t i = 0; i < json_object_array_length(outputs); i++) {
 		json_output = json_object_array_get_idx(outputs, i);
 		json_object_object_get_ex(json_output, "name", &name);
 
diff --git a/swaylock/main.c b/swaylock/main.c
index c2615951..7b7dd601 100644
--- a/swaylock/main.c
+++ b/swaylock/main.c
@@ -3,7 +3,6 @@
 #include <xkbcommon/xkbcommon.h>
 #include <xkbcommon/xkbcommon-names.h>
 #include <security/pam_appl.h>
-#include <json-c/json.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -13,6 +12,7 @@
 #include <signal.h>
 #include <stdbool.h>
 #include <unistd.h>
+#include "sway_json_helper.h"
 #include "client/window.h"
 #include "client/registry.h"
 #include "client/cairo.h"
@@ -584,7 +584,7 @@ int main(int argc, char **argv) {
 
 		for (i = 0; i < registry->outputs->length; ++i) {
 			if (displays_paths[i * 2] != NULL) {
-				for (int j = 0;; ++j) {
+				for (json_ar_len_t j = 0;; ++j) {
 					if (j >= json_object_array_length(json_outputs)) {
 						sway_log(L_ERROR, "%s is not an extant output", displays_paths[i * 2]);
 						exit(EXIT_FAILURE);
diff --git a/swaymsg/main.c b/swaymsg/main.c
index 2f9cfb14..0ee7c76f 100644
--- a/swaymsg/main.c
+++ b/swaymsg/main.c
@@ -9,7 +9,7 @@
 #include <sys/socket.h>
 #include <ctype.h>
 #include <unistd.h>
-#include <json-c/json.h>
+#include "sway_json_helper.h"
 #include "stringop.h"
 #include "ipc-client.h"
 #include "readline.h"
@@ -149,7 +149,7 @@ static void pretty_print_version(json_object *v) {
 static void pretty_print_clipboard(json_object *v) {
 	if (success(v, true)) {
 		if (json_object_is_type(v, json_type_array)) {
-			for (int i = 0; i < json_object_array_length(v); ++i) {
+			for (json_ar_len_t i = 0; i < json_object_array_length(v); ++i) {
 				json_object *o = json_object_array_get_idx(v, i);
 				printf("%s\n", json_object_get_string(o));
 			}