]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journal: move qrcode printing code to src/shared/
authorLennart Poettering <lennart@poettering.net>
Mon, 17 Aug 2020 13:59:00 +0000 (15:59 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 25 Aug 2020 15:58:02 +0000 (17:58 +0200)
That way we can make use of it in homctl, too.

meson.build
src/journal/journal-qrcode.c
src/shared/meson.build
src/shared/qrcode-util.c [new file with mode: 0644]
src/shared/qrcode-util.h [new file with mode: 0644]

index a42fbc1d6dce0b6bf50bede5378bf842bda7061c..cd2b02488b373fa24b0f33dc1072a2b7e6495f62 100644 (file)
@@ -2196,7 +2196,8 @@ if conf.get('ENABLE_HOMED') == 1
                                 libcrypt,
                                 libopenssl,
                                 libp11kit,
-                                libfido2],
+                                libfido2,
+                                libdl],
                 install_rpath : rootlibexecdir,
                 install : true,
                 install_dir : rootbindir)
index 8c8360853ebf9848a2b3abe682cd9beadfc608c0..e8a76553162dbe3501823923da01846183eeb750 100644 (file)
 #include "journal-qrcode.h"
 #include "locale-util.h"
 #include "macro.h"
+#include "qrcode-util.h"
 #include "terminal-util.h"
 
-#define ANSI_WHITE_ON_BLACK "\033[40;37;1m"
-
-static void print_border(FILE *output, unsigned width) {
-        unsigned x, y;
-
-        /* Four rows of border */
-        for (y = 0; y < 4; y += 2) {
-                fputs(ANSI_WHITE_ON_BLACK, output);
-
-                for (x = 0; x < 4 + width + 4; x++)
-                        fputs("\342\226\210", output);
-
-                fputs(ANSI_NORMAL "\n", output);
-        }
-}
-
 int print_qr_code(
                 FILE *output,
                 const char *prefix_text,
@@ -47,7 +32,6 @@ int print_qr_code(
         _cleanup_free_ char *url = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         size_t url_size = 0;
-        unsigned x, y;
         QRcode* qr;
         int r;
 
@@ -106,40 +90,7 @@ int print_qr_code(
         if (prefix_text)
                 fputs(prefix_text, output);
 
-        print_border(output, qr->width);
-
-        for (y = 0; y < (unsigned) qr->width; y += 2) {
-                const uint8_t *row1, *row2;
-
-                row1 = qr->data + qr->width * y;
-                row2 = row1 + qr->width;
-
-                fputs(ANSI_WHITE_ON_BLACK, output);
-                for (x = 0; x < 4; x++)
-                        fputs("\342\226\210", output);
-
-                for (x = 0; x < (unsigned) qr->width; x ++) {
-                        bool a, b;
-
-                        a = row1[x] & 1;
-                        b = (y+1) < (unsigned) qr->width ? (row2[x] & 1) : false;
-
-                        if (a && b)
-                                fputc(' ', output);
-                        else if (a)
-                                fputs("\342\226\204", output);
-                        else if (b)
-                                fputs("\342\226\200", output);
-                        else
-                                fputs("\342\226\210", output);
-                }
-
-                for (x = 0; x < 4; x++)
-                        fputs("\342\226\210", output);
-                fputs(ANSI_NORMAL "\n", output);
-        }
-
-        print_border(output, qr->width);
+        write_qrcode(output, qr);
 
         sym_QRcode_free(qr);
         return 0;
index 57f36af252e290df66df25ca0dff9deca7233664..38762f020ee3c7d8ddd1cc01dd0a35ab4d48c817 100644 (file)
@@ -304,6 +304,13 @@ if conf.get('HAVE_PAM') == 1
 '''.split())
 endif
 
+if conf.get('HAVE_QRENCODE') == 1
+        shared_sources += files('''
+        qrcode-util.c
+        qrcode-util.h
+'''.split())
+endif
+
 generate_ip_protocol_list = find_program('generate-ip-protocol-list.sh')
 ip_protocol_list_txt = custom_target(
         'ip-protocol-list.txt',
diff --git a/src/shared/qrcode-util.c b/src/shared/qrcode-util.c
new file mode 100644 (file)
index 0000000..a545daa
--- /dev/null
@@ -0,0 +1,63 @@
+#include "qrcode-util.h"
+#include "terminal-util.h"
+
+#define ANSI_WHITE_ON_BLACK "\033[40;37;1m"
+
+static void print_border(FILE *output, unsigned width) {
+        unsigned x, y;
+
+        /* Four rows of border */
+        for (y = 0; y < 4; y += 2) {
+                fputs(ANSI_WHITE_ON_BLACK, output);
+
+                for (x = 0; x < 4 + width + 4; x++)
+                        fputs("\342\226\210", output);
+
+                fputs(ANSI_NORMAL "\n", output);
+        }
+}
+
+void write_qrcode(FILE *output, QRcode *qr) {
+        unsigned x, y;
+
+        assert(qr);
+
+        if (!output)
+                output = stdout;
+
+        print_border(output, qr->width);
+
+        for (y = 0; y < (unsigned) qr->width; y += 2) {
+                const uint8_t *row1, *row2;
+
+                row1 = qr->data + qr->width * y;
+                row2 = row1 + qr->width;
+
+                fputs(ANSI_WHITE_ON_BLACK, output);
+                for (x = 0; x < 4; x++)
+                        fputs("\342\226\210", output);
+
+                for (x = 0; x < (unsigned) qr->width; x ++) {
+                        bool a, b;
+
+                        a = row1[x] & 1;
+                        b = (y+1) < (unsigned) qr->width ? (row2[x] & 1) : false;
+
+                        if (a && b)
+                                fputc(' ', output);
+                        else if (a)
+                                fputs("\342\226\204", output);
+                        else if (b)
+                                fputs("\342\226\200", output);
+                        else
+                                fputs("\342\226\210", output);
+                }
+
+                for (x = 0; x < 4; x++)
+                        fputs("\342\226\210", output);
+                fputs(ANSI_NORMAL "\n", output);
+        }
+
+        print_border(output, qr->width);
+        fflush(output);
+}
diff --git a/src/shared/qrcode-util.h b/src/shared/qrcode-util.h
new file mode 100644 (file)
index 0000000..9a21ffd
--- /dev/null
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#if HAVE_QRENCODE
+#include <qrencode.h>
+#include <stdio.h>
+
+void write_qrcode(FILE *output, QRcode *qr);
+#endif