mirror of
https://github.com/labwc/labwc.git
synced 2026-06-13 14:33:18 -04:00
ipc: add sscanf return checks and clean up formatting
This commit is contained in:
parent
fa8d198082
commit
523fa92a09
2 changed files with 33 additions and 19 deletions
|
|
@ -187,9 +187,12 @@ print_json(const char *data, bool pretty)
|
|||
return;
|
||||
}
|
||||
|
||||
int flags = JSON_C_TO_STRING_NOSLASHESCAPE
|
||||
| (pretty ? (JSON_C_TO_STRING_PRETTY | JSON_C_TO_STRING_SPACED)
|
||||
: JSON_C_TO_STRING_PLAIN);
|
||||
int flags = JSON_C_TO_STRING_NOSLASHESCAPE;
|
||||
if (pretty) {
|
||||
flags |= JSON_C_TO_STRING_PRETTY | JSON_C_TO_STRING_SPACED;
|
||||
} else {
|
||||
flags |= JSON_C_TO_STRING_PLAIN;
|
||||
}
|
||||
|
||||
printf("%s\n", json_object_to_json_string_ext(obj, flags));
|
||||
json_object_put(obj);
|
||||
|
|
@ -217,7 +220,7 @@ check_command_success(const char *data)
|
|||
/* Print error to stderr */
|
||||
struct json_object *err = NULL;
|
||||
if (json_object_object_get_ex(item,
|
||||
"error", &err)) {
|
||||
"error", &err)) {
|
||||
fprintf(stderr, "Error: %s\n",
|
||||
json_object_get_string(
|
||||
err));
|
||||
|
|
@ -374,7 +377,7 @@ main(int argc, char *argv[])
|
|||
while (1) {
|
||||
resp_payload = NULL;
|
||||
if (!ipc_recv(fd, &resp_type, &resp_payload,
|
||||
&resp_len)) {
|
||||
&resp_len)) {
|
||||
break;
|
||||
}
|
||||
if (!quiet && resp_payload) {
|
||||
|
|
|
|||
39
src/ipc.c
39
src/ipc.c
|
|
@ -55,14 +55,14 @@
|
|||
|
||||
/* ===================================================================
|
||||
* Section 1: Protocol & Client Management
|
||||
* =================================================================== */
|
||||
* ===================================================================
|
||||
*/
|
||||
|
||||
static int ipc_socket_fd = -1;
|
||||
static char *ipc_socket_path;
|
||||
static struct wl_event_source *ipc_event_source;
|
||||
static struct wl_list ipc_clients;
|
||||
|
||||
|
||||
static void ipc_client_disconnect(struct ipc_client *client);
|
||||
static void ipc_handle_message(struct ipc_client *client, uint32_t type,
|
||||
const char *payload, uint32_t len);
|
||||
|
|
@ -317,7 +317,8 @@ ipc_finish(void)
|
|||
|
||||
/* ===================================================================
|
||||
* Section 2: JSON Builders
|
||||
* =================================================================== */
|
||||
* ===================================================================
|
||||
*/
|
||||
|
||||
static struct json_object *
|
||||
ipc_json_position(struct wlr_box box)
|
||||
|
|
@ -756,7 +757,9 @@ ipc_json_get_version(void)
|
|||
/* Parse version string X.Y.Z */
|
||||
const char *ver = LABWC_VERSION;
|
||||
int major = 0, minor = 0, patch = 0;
|
||||
sscanf(ver, "%d.%d.%d", &major, &minor, &patch);
|
||||
if (sscanf(ver, "%d.%d.%d", &major, &minor, &patch) < 3) {
|
||||
wlr_log(WLR_ERROR, "IPC: failed to parse version: %s", ver);
|
||||
}
|
||||
|
||||
json_object_object_add(obj, "major", json_object_new_int(major));
|
||||
json_object_object_add(obj, "minor", json_object_new_int(minor));
|
||||
|
|
@ -864,8 +867,8 @@ ipc_json_input_device(struct input *input)
|
|||
const char *active_name =
|
||||
xkb_keymap_layout_get_name(keymap, active);
|
||||
json_object_object_add(obj, "xkb_active_layout_name",
|
||||
json_object_new_string(active_name ? active_name
|
||||
: ""));
|
||||
json_object_new_string(
|
||||
active_name ? active_name : ""));
|
||||
json_object_object_add(obj, "xkb_active_layout_index",
|
||||
json_object_new_int(active));
|
||||
|
||||
|
|
@ -874,8 +877,8 @@ ipc_json_input_device(struct input *input)
|
|||
const char *name =
|
||||
xkb_keymap_layout_get_name(keymap, i);
|
||||
json_object_array_add(layouts,
|
||||
json_object_new_string(name ? name
|
||||
: ""));
|
||||
json_object_new_string(
|
||||
name ? name : ""));
|
||||
}
|
||||
json_object_object_add(obj, "xkb_layout_names",
|
||||
layouts);
|
||||
|
|
@ -932,7 +935,8 @@ ipc_json_get_seats(void)
|
|||
|
||||
/* ===================================================================
|
||||
* Section 3: Sway-Compatible Command Parser
|
||||
* =================================================================== */
|
||||
* ===================================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
* Helper to create an action, add a single string arg, execute it via
|
||||
|
|
@ -1251,7 +1255,9 @@ execute_single_command(const char *cmd)
|
|||
return cmd_result(false, "No focused window");
|
||||
}
|
||||
int x = 0, y = 0;
|
||||
sscanf(arg + 9, "%d %d", &x, &y);
|
||||
if (sscanf(arg + 9, "%d %d", &x, &y) < 2) {
|
||||
return cmd_result(false, "Invalid position arguments");
|
||||
}
|
||||
struct action *a = action_create("MoveTo");
|
||||
if (a) {
|
||||
action_arg_add_int(a, "x", x);
|
||||
|
|
@ -1358,7 +1364,9 @@ execute_single_command(const char *cmd)
|
|||
/* resize set W H */
|
||||
if (!strncmp(arg, "set ", 4)) {
|
||||
int w = 0, h = 0;
|
||||
sscanf(arg + 4, "%d %d", &w, &h);
|
||||
if (sscanf(arg + 4, "%d %d", &w, &h) < 2) {
|
||||
return cmd_result(false, "Invalid resize arguments");
|
||||
}
|
||||
struct action *a = action_create("ResizeTo");
|
||||
if (a) {
|
||||
action_arg_add_int(a, "width", w);
|
||||
|
|
@ -1467,7 +1475,8 @@ ipc_cmd_run(const char *payload)
|
|||
|
||||
/* ===================================================================
|
||||
* Section 3b: SUBSCRIBE handler
|
||||
* =================================================================== */
|
||||
* ===================================================================
|
||||
*/
|
||||
|
||||
static struct json_object *
|
||||
ipc_cmd_subscribe(struct ipc_client *client, const char *payload)
|
||||
|
|
@ -1512,7 +1521,8 @@ ipc_cmd_subscribe(struct ipc_client *client, const char *payload)
|
|||
|
||||
/* ===================================================================
|
||||
* Message dispatch
|
||||
* =================================================================== */
|
||||
* ===================================================================
|
||||
*/
|
||||
|
||||
static void
|
||||
ipc_handle_message(struct ipc_client *client, uint32_t type,
|
||||
|
|
@ -1604,7 +1614,8 @@ ipc_handle_message(struct ipc_client *client, uint32_t type,
|
|||
|
||||
/* ===================================================================
|
||||
* Section 4: Event Emitters
|
||||
* =================================================================== */
|
||||
* ===================================================================
|
||||
*/
|
||||
|
||||
static void
|
||||
ipc_broadcast_event(uint32_t event_type, uint32_t sub_bit,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue