Commit 0a3ef990 authored by Pekka Paalanen's avatar Pekka Paalanen Committed by Daniel Stone

xwm: dump_property() to use FILE internally

Write the output of dump_property() out in one log call. When multiple
processes (weston and Xwayland) are writing to the same file, this will
keep the property dump uninterrupted by Xwayland debug prints.

This is also preparation for more development in the same direction.
Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pq@iki.fi>
Signed-off-by: 's avatarManiraj Devadoss <Maniraj.Devadoss@in.bosch.com>
Reviewed-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Daniel Stone's avatarDaniel Stone <daniels@collabora.com>
parent d3630ed4
......@@ -410,20 +410,14 @@ dump_cardinal_array_elem(FILE *fp, unsigned format,
}
static void
dump_cardinal_array(xcb_get_property_reply_t *reply)
dump_cardinal_array(FILE *fp, xcb_get_property_reply_t *reply)
{
unsigned i = 0;
FILE *fp;
void *arr;
char *str = NULL;
size_t size = 0;
assert(reply->type == XCB_ATOM_CARDINAL);
fp = open_memstream(&str, &size);
if (!fp)
return;
arr = xcb_get_property_value(reply);
fprintf(fp, "[");
......@@ -432,10 +426,6 @@ dump_cardinal_array(xcb_get_property_reply_t *reply)
arr, reply->value_len, i);
fprintf(fp, "]");
if (fclose(fp) != 0)
return;
wm_log_continue("%s\n", str);
free(str);
}
......@@ -449,22 +439,29 @@ dump_property(struct weston_wm *wm,
xcb_window_t *window_value;
int width, len;
uint32_t i;
FILE *fp;
char *logstr;
size_t logsize;
width = wm_log_continue("%s: ", get_atom_name(wm->conn, property));
if (reply == NULL) {
wm_log_continue("(no reply)\n");
fp = open_memstream(&logstr, &logsize);
if (!fp)
return;
width = fprintf(fp, "%s: ", get_atom_name(wm->conn, property));
if (reply == NULL) {
fprintf(fp, "(no reply)\n");
goto out;
}
width += wm_log_continue("%s/%d, length %d (value_len %d): ",
get_atom_name(wm->conn, reply->type),
reply->format,
xcb_get_property_value_length(reply),
reply->value_len);
width += fprintf(fp, "%s/%d, length %d (value_len %d): ",
get_atom_name(wm->conn, reply->type),
reply->format,
xcb_get_property_value_length(reply),
reply->value_len);
if (reply->type == wm->atom.incr) {
incr_value = xcb_get_property_value(reply);
wm_log_continue("%d\n", *incr_value);
fprintf(fp, "%d\n", *incr_value);
} else if (reply->type == wm->atom.utf8_string ||
reply->type == wm->atom.string) {
text_value = xcb_get_property_value(reply);
......@@ -472,29 +469,34 @@ dump_property(struct weston_wm *wm,
len = 40;
else
len = reply->value_len;
wm_log_continue("\"%.*s\"\n", len, text_value);
fprintf(fp, "\"%.*s\"\n", len, text_value);
} else if (reply->type == XCB_ATOM_ATOM) {
atom_value = xcb_get_property_value(reply);
for (i = 0; i < reply->value_len; i++) {
name = get_atom_name(wm->conn, atom_value[i]);
if (width + strlen(name) + 2 > 78) {
wm_log_continue("\n ");
fprintf(fp, "\n ");
width = 4;
} else if (i > 0) {
width += wm_log_continue(", ");
width += fprintf(fp, ", ");
}
width += wm_log_continue("%s", name);
width += fprintf(fp, "%s", name);
}
wm_log_continue("\n");
fprintf(fp, "\n");
} else if (reply->type == XCB_ATOM_CARDINAL) {
dump_cardinal_array(reply);
dump_cardinal_array(fp, reply);
} else if (reply->type == XCB_ATOM_WINDOW && reply->format == 32) {
window_value = xcb_get_property_value(reply);
wm_log_continue("win %u\n", *window_value);
fprintf(fp, "win %u\n", *window_value);
} else {
wm_log_continue("huh?\n");
fprintf(fp, "huh?\n");
}
out:
if (fclose(fp) == 0)
wm_log_continue("%s", logstr);
free(logstr);
}
static void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment