]> git.mdlowis.com Git - proto/labwc.git/commitdiff
treewide: properly clear the buffer
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Sat, 16 Mar 2024 18:03:06 +0000 (19:03 +0100)
committerJohan Malm <johanmalm@users.noreply.github.com>
Thu, 18 Apr 2024 06:00:23 +0000 (07:00 +0100)
Before this patch, the OSD would repeat the last buffer
content in case the new buffer content would be empty.

This was mostly happening for the `title` OSD field that is intended
to be empty when it matches the app_id / WM_CLASS of the application.
Due to only buffer.len being reset but its internal allocations being
untouched, buffer.buf would still carry the old data.

This patch fixes it by also overwriting the first byte in the buffer
allocation with '\0' via the new `buf_clear()` function.

Do the same for buf_expand_shell_variables() although that one should
have been fine before as it always writes new data to the buffer.

src/common/buf.c
src/osd.c

index f6667418f9cbccd3706b077bf92e17b0976785fc..f6bde97f38fda3d9da415212c85c6fddb2bbb3f0 100644 (file)
@@ -52,7 +52,7 @@ buf_expand_shell_variables(struct buf *s)
        for (int i = 0 ; i < s->len ; i++) {
                if (s->buf[i] == '$' && isvalid(s->buf[i+1])) {
                        /* expand environment variable */
-                       environment_variable.len = 0;
+                       buf_clear(&environment_variable);
                        buf_add(&environment_variable, s->buf + i + 1);
                        char *p = environment_variable.buf;
                        while (isvalid(*p)) {
index 69feb4c82a25342e80a8f6b175747375c69810ab..ca53cec8846f065a416157e6e9c32dd7d78654c6 100644 (file)
--- a/src/osd.c
+++ b/src/osd.c
@@ -286,7 +286,7 @@ render_osd(struct server *server, cairo_t *cairo, int w, int h,
                int nr_fields = wl_list_length(&rc.window_switcher.fields);
                struct window_switcher_field *field;
                wl_list_for_each(field, &rc.window_switcher.fields, link) {
-                       buf.len = 0;
+                       buf_clear(&buf);
                        cairo_move_to(cairo, x, y
                                + theme->osd_window_switcher_item_padding_y
                                + theme->osd_window_switcher_item_active_border_width);