diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2012-07-13 01:07:41 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2012-07-13 01:07:41 +0200 |
commit | ba961854ddec8a8efcffab44540c33cc7dffebfa (patch) | |
tree | 4438f3218e86cf5620affd2b4850e90890f0e3da /src/shared/logs-show.c | |
parent | 3a419b98485e347413f723f46ceb38dcf2c94688 (diff) |
journalctl: show any printable Unicode character
This makes sure we are OK in outputting all valid, non-control UTF-8
characters, instead of just printable 7bit ASCII.
Diffstat (limited to 'src/shared/logs-show.c')
-rw-r--r-- | src/shared/logs-show.c | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c index 540b5a2a2c..e1119224e2 100644 --- a/src/shared/logs-show.c +++ b/src/shared/logs-show.c @@ -28,19 +28,10 @@ #include "logs-show.h" #include "log.h" #include "util.h" +#include "utf8.h" #define PRINT_THRESHOLD 128 -static bool contains_unprintable(const void *p, size_t l) { - const char *j; - - for (j = p; j < (const char *) p + l; j++) - if (*j < ' ' || *j >= 127) - return true; - - return false; -} - static int parse_field(const void *data, size_t length, const char *field, char **target, size_t *target_size) { size_t fl, nl; void *buf; @@ -80,7 +71,7 @@ static bool shall_print(bool show_all, char *p, size_t l) { if (l > PRINT_THRESHOLD) return false; - if (contains_unprintable(p, l)) + if (!utf8_is_printable_n(p, l)) return false; return true; @@ -226,7 +217,7 @@ static int output_short(sd_journal *j, unsigned line, unsigned n_columns, bool s if (show_all) printf(": %.*s\n", (int) message_len, message); - else if (contains_unprintable(message, message_len)) { + else if (!utf8_is_printable_n(message, message_len)) { char bytes[FORMAT_BYTES_MAX]; printf(": [%s blob data]\n", format_bytes(bytes, sizeof(bytes), message_len)); } else if (message_len + n < n_columns) @@ -298,7 +289,7 @@ static int output_verbose(sd_journal *j, unsigned line, unsigned n_columns, bool SD_JOURNAL_FOREACH_DATA(j, data, length) { if (!show_all && (length > PRINT_THRESHOLD || - contains_unprintable(data, length))) { + !utf8_is_printable_n(data, length))) { const char *c; char bytes[FORMAT_BYTES_MAX]; @@ -367,7 +358,7 @@ static int output_export(sd_journal *j, unsigned line, unsigned n_columns, bool memcmp(data, "_BOOT_ID=", 9) == 0) continue; - if (contains_unprintable(data, length)) { + if (!utf8_is_printable_n(data, length)) { const char *c; uint64_t le64; @@ -394,8 +385,7 @@ static int output_export(sd_journal *j, unsigned line, unsigned n_columns, bool } static void json_escape(const char* p, size_t l) { - - if (contains_unprintable(p, l)) { + if (!utf8_is_printable_n(p, l)) { bool not_first = false; fputs("[ ", stdout); |