The manual page states that if no upper range limit has been specified,
no higher atoms will be printed. This is not true for

$ xlsatoms -range 0-

This prints the first 100 atoms, even though it already encountered an
invalid one at 0. The reason is that say_batch works as a batch, i.e.
retrieves 100 atoms at a time. If one of them is invalid, the rest is
still printed.

With this adjustment, xlsatoms behaves as stated in manual page.

Signed-off-by: Tobias Stoeckmann <tob...@stoeckmann.org>
---
 xlsatoms.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/xlsatoms.c b/xlsatoms.c
index 2bb5b47..5bed0cc 100644
--- a/xlsatoms.c
+++ b/xlsatoms.c
@@ -248,13 +248,15 @@ say_batch(xcb_connection_t *c, const char *format, 
xcb_get_atom_name_cookie_t *c
        xcb_get_atom_name_reply_t *r;
        r = xcb_get_atom_name_reply(c, cookie[i], &e);
        if (r) {
-           /* We could just use %.*s in 'format', but we want to be compatible
-              with legacy command line usage */
-           snprintf(atom_name, sizeof(atom_name), "%.*s",
-               r->name_len, xcb_get_atom_name_name(r));
-
-           printf (format, i + low, atom_name);
-           putchar ('\n');
+           if (!done) {
+               /* We could just use %.*s in 'format', but we want to be 
compatible
+                  with legacy command line usage */
+               snprintf(atom_name, sizeof(atom_name), "%.*s",
+                   r->name_len, xcb_get_atom_name_name(r));
+
+               printf (format, i + low, atom_name);
+               putchar ('\n');
+           }
            free(r);
        }
        if (e) {
-- 
2.18.0

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to