mirror of
https://github.com/swaywm/sway.git
synced 2026-03-30 11:10:59 -04:00
Adaptions for API change in json-c v0.13
Lift restriction on json-c <= 0.12.1 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.
This commit is contained in:
parent
d0bd0ed598
commit
c08c805ecd
17 changed files with 41 additions and 26 deletions
|
|
@ -48,7 +48,7 @@ if (LD_LIBRARY_PATH)
|
||||||
add_definitions(-D_LD_LIBRARY_PATH="${LD_LIBRARY_PATH}")
|
add_definitions(-D_LD_LIBRARY_PATH="${LD_LIBRARY_PATH}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(JsonC 0.12.1 REQUIRED)
|
find_package(JsonC REQUIRED)
|
||||||
find_package(PCRE REQUIRED)
|
find_package(PCRE REQUIRED)
|
||||||
find_package(WLC REQUIRED)
|
find_package(WLC REQUIRED)
|
||||||
find_package(Wayland REQUIRED)
|
find_package(Wayland REQUIRED)
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ Abhängigkeiten:
|
||||||
* libcap
|
* libcap
|
||||||
* asciidoc
|
* asciidoc
|
||||||
* pcre
|
* pcre
|
||||||
* json-c <= 0.12.1
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
* gdk-pixbuf2 *
|
* gdk-pixbuf2 *
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ To username μου στο Freenode είναι kon14 και θα με βρείτ
|
||||||
* libcap
|
* libcap
|
||||||
* asciidoc
|
* asciidoc
|
||||||
* pcre
|
* pcre
|
||||||
* json-c <= 0.12.1
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
* gdk-pixbuf2 *
|
* gdk-pixbuf2 *
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ Installez les dépendances :
|
||||||
* libcap
|
* libcap
|
||||||
* asciidoc
|
* asciidoc
|
||||||
* pcre
|
* pcre
|
||||||
* json-c <= 0.12.1
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
* gdk-pixbuf2 *
|
* gdk-pixbuf2 *
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ Installa queste dipendenze:
|
||||||
* libcap
|
* libcap
|
||||||
* asciidoc
|
* asciidoc
|
||||||
* pcre
|
* pcre
|
||||||
* json-c <= 0.12.1
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
* gdk-pixbuf2 *
|
* gdk-pixbuf2 *
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ Swayは沢山のディストリビューションで提供されています。"
|
||||||
* libcap
|
* libcap
|
||||||
* asciidoc
|
* asciidoc
|
||||||
* pcre
|
* pcre
|
||||||
* json-c <= 0.12.1
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
* gdk-pixbuf2 *
|
* gdk-pixbuf2 *
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ Install dependencies:
|
||||||
* libcap
|
* libcap
|
||||||
* asciidoc
|
* asciidoc
|
||||||
* pcre
|
* pcre
|
||||||
* json-c <= 0.12.1
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
* gdk-pixbuf2 *
|
* gdk-pixbuf2 *
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ Antes de iniciar a compilação, instale as dependências:
|
||||||
* libcap
|
* libcap
|
||||||
* asciidoc
|
* asciidoc
|
||||||
* pcre
|
* pcre
|
||||||
* json-c <= 0.12.1
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
* gdk-pixbuf2 *
|
* gdk-pixbuf2 *
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ Sway доступен во многих дистрибутивах и наход
|
||||||
* libcap
|
* libcap
|
||||||
* asciidoc
|
* asciidoc
|
||||||
* pcre
|
* pcre
|
||||||
* json-c <= 0.12.1
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
* gdk-pixbuf2 *
|
* gdk-pixbuf2 *
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ Sway доступний у багатьох дистрибутивах Linux (а
|
||||||
* libcap
|
* libcap
|
||||||
* asciidoc
|
* asciidoc
|
||||||
* pcre
|
* pcre
|
||||||
* json-c <= 0.12.1
|
* json-c
|
||||||
* pango
|
* pango
|
||||||
* cairo
|
* cairo
|
||||||
* gdk-pixbuf2 *
|
* gdk-pixbuf2 *
|
||||||
|
|
|
||||||
16
include/sway_json_helper.h
Normal file
16
include/sway_json_helper.h
Normal file
|
|
@ -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
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include <json-c/json.h>
|
#include "sway_json_helper.h"
|
||||||
#include "wlc/wlc.h"
|
#include "wlc/wlc.h"
|
||||||
|
|
||||||
void init_json_tree(int socketfd);
|
void init_json_tree(int socketfd);
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <json-c/json.h>
|
|
||||||
#include <list.h>
|
#include <list.h>
|
||||||
#include <libinput.h>
|
#include <libinput.h>
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
|
|
@ -25,6 +24,7 @@ struct ucred {
|
||||||
gid_t gid;
|
gid_t gid;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
#include "sway_json_helper.h"
|
||||||
#include "sway/ipc-json.h"
|
#include "sway/ipc-json.h"
|
||||||
#include "sway/ipc-server.h"
|
#include "sway/ipc-server.h"
|
||||||
#include "sway/security.h"
|
#include "sway/security.h"
|
||||||
|
|
@ -724,7 +724,7 @@ void ipc_client_handle_command(struct ipc_client *client) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse requested event types
|
// 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));
|
const char *event_type = json_object_get_string(json_object_array_get_idx(request, i));
|
||||||
if (strcmp(event_type, "workspace") == 0) {
|
if (strcmp(event_type, "workspace") == 0) {
|
||||||
client->subscribed_events |= event_mask(IPC_EVENT_WORKSPACE);
|
client->subscribed_events |= event_mask(IPC_EVENT_WORKSPACE);
|
||||||
|
|
@ -1126,7 +1126,8 @@ static void ipc_event_binding(json_object *sb_obj) {
|
||||||
sway_log(L_DEBUG, "Sending binding::run event");
|
sway_log(L_DEBUG, "Sending binding::run event");
|
||||||
json_object *obj = json_object_new_object();
|
json_object *obj = json_object_new_object();
|
||||||
json_object_object_add(obj, "change", json_object_new_string("run"));
|
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);
|
const char *json_string = json_object_to_json_string(obj);
|
||||||
ipc_send_event(json_string, IPC_EVENT_BINDING);
|
ipc_send_event(json_string, IPC_EVENT_BINDING);
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <json-c/json.h>
|
|
||||||
|
|
||||||
|
#include "sway_json_helper.h"
|
||||||
#include "swaybar/config.h"
|
#include "swaybar/config.h"
|
||||||
#include "swaybar/status_line.h"
|
#include "swaybar/status_line.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
@ -70,8 +70,7 @@ static void parse_json(struct bar *bar, const char *text) {
|
||||||
|
|
||||||
bar->status->block_line = create_list();
|
bar->status->block_line = create_list();
|
||||||
|
|
||||||
int i;
|
for (json_ar_len_t i = 0; i < json_object_array_length(results); ++i) {
|
||||||
for (i = 0; i < json_object_array_length(results); ++i) {
|
|
||||||
json_object *full_text, *short_text, *color, *min_width, *align, *urgent;
|
json_object *full_text, *short_text, *color, *min_width, *align, *urgent;
|
||||||
json_object *name, *instance, *separator, *separator_block_width;
|
json_object *name, *instance, *separator, *separator_block_width;
|
||||||
json_object *background, *border, *border_top, *border_bottom;
|
json_object *background, *border, *border_top, *border_bottom;
|
||||||
|
|
|
||||||
|
|
@ -50,8 +50,7 @@ static json_object *get_focused_container_r(json_object *c) {
|
||||||
} else {
|
} else {
|
||||||
json_object *nodes, *node, *child;
|
json_object *nodes, *node, *child;
|
||||||
json_object_object_get_ex(c, "nodes", &nodes);
|
json_object_object_get_ex(c, "nodes", &nodes);
|
||||||
int i;
|
for (json_ar_len_t i = 0; i < json_object_array_length(nodes); i++) {
|
||||||
for (i = 0; i < json_object_array_length(nodes); i++) {
|
|
||||||
node = json_object_array_get_idx(nodes, i);
|
node = json_object_array_get_idx(nodes, i);
|
||||||
|
|
||||||
if ((child = get_focused_container_r(node))) {
|
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);
|
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);
|
node = json_object_array_get_idx(nodes, i);
|
||||||
|
|
||||||
if ((child = get_focused_container_r(node))) {
|
if ((child = get_focused_container_r(node))) {
|
||||||
|
|
@ -83,7 +82,7 @@ char *get_focused_output() {
|
||||||
if (!outputs) {
|
if (!outputs) {
|
||||||
sway_abort("Unabled to get focused output. No nodes in tree.");
|
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);
|
output = json_object_array_get_idx(outputs, i);
|
||||||
|
|
||||||
if (get_focused_container_r(output)) {
|
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 *outputs, *json_output, *name;
|
||||||
json_object_object_get_ex(tree, "nodes", &outputs);
|
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_output = json_object_array_get_idx(outputs, i);
|
||||||
json_object_object_get_ex(json_output, "name", &name);
|
json_object_object_get_ex(json_output, "name", &name);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
#include <xkbcommon/xkbcommon.h>
|
#include <xkbcommon/xkbcommon.h>
|
||||||
#include <xkbcommon/xkbcommon-names.h>
|
#include <xkbcommon/xkbcommon-names.h>
|
||||||
#include <security/pam_appl.h>
|
#include <security/pam_appl.h>
|
||||||
#include <json-c/json.h>
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
@ -14,6 +13,7 @@
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include "sway_json_helper.h"
|
||||||
#include "client/window.h"
|
#include "client/window.h"
|
||||||
#include "client/registry.h"
|
#include "client/registry.h"
|
||||||
#include "client/cairo.h"
|
#include "client/cairo.h"
|
||||||
|
|
@ -583,7 +583,7 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
for (i = 0; i < registry->outputs->length; ++i) {
|
for (i = 0; i < registry->outputs->length; ++i) {
|
||||||
if (displays_paths[i * 2] != NULL) {
|
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)) {
|
if (j >= json_object_array_length(json_outputs)) {
|
||||||
sway_log(L_ERROR, "%s is not an extant output", displays_paths[i * 2]);
|
sway_log(L_ERROR, "%s is not an extant output", displays_paths[i * 2]);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <json-c/json.h>
|
#include "sway_json_helper.h"
|
||||||
#include "stringop.h"
|
#include "stringop.h"
|
||||||
#include "ipc-client.h"
|
#include "ipc-client.h"
|
||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
|
|
@ -149,7 +149,7 @@ static void pretty_print_version(json_object *v) {
|
||||||
static void pretty_print_clipboard(json_object *v) {
|
static void pretty_print_clipboard(json_object *v) {
|
||||||
if (success(v, true)) {
|
if (success(v, true)) {
|
||||||
if (json_object_is_type(v, json_type_array)) {
|
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);
|
json_object *o = json_object_array_get_idx(v, i);
|
||||||
printf("%s\n", json_object_get_string(o));
|
printf("%s\n", json_object_get_string(o));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue