summaryrefslogtreecommitdiff
path: root/src/basic
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-05-05 12:41:25 +0200
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-05-05 13:59:23 +0200
commitb19f211698f2359464bd46c69a45390b6579b705 (patch)
tree1f34b780978c5a8b0d46ab6e93bd82627850f674 /src/basic
parentd12ccbc30252935b13bc2d4da51b55b096154afb (diff)
downloadsystemd-b19f211698f2359464bd46c69a45390b6579b705.tar.gz
basic/escape: flagsify xescape_full()
Diffstat (limited to 'src/basic')
-rw-r--r--src/basic/escape.c15
-rw-r--r--src/basic/escape.h10
-rw-r--r--src/basic/process-util.c2
3 files changed, 16 insertions, 11 deletions
diff --git a/src/basic/escape.c b/src/basic/escape.c
index 45899b6b7c..f579f15d87 100644
--- a/src/basic/escape.c
+++ b/src/basic/escape.c
@@ -360,13 +360,13 @@ int cunescape_length_with_prefix(const char *s, size_t length, const char *prefi
return t - r;
}
-char* xescape_full(const char *s, const char *bad, size_t console_width, bool eight_bits) {
+char* xescape_full(const char *s, const char *bad, size_t console_width, XEscapeFlags flags) {
char *ans, *t, *prev, *prev2;
const char *f;
/* Escapes all chars in bad, in addition to \ and all special chars, in \xFF style escaping. May be
- * reversed with cunescape(). If eight_bits is true, characters >= 127 are let through unchanged.
- * This corresponds to non-ASCII printable characters in pre-unicode encodings.
+ * reversed with cunescape(). If XESCAPE_8_BIT is specified, characters >= 127 are let through
+ * unchanged. This corresponds to non-ASCII printable characters in pre-unicode encodings.
*
* If console_width is reached, output is truncated and "..." is appended. */
@@ -388,7 +388,8 @@ char* xescape_full(const char *s, const char *bad, size_t console_width, bool ei
return ans;
}
- if ((unsigned char) *f < ' ' || (!eight_bits && (unsigned char) *f >= 127) ||
+ if ((unsigned char) *f < ' ' ||
+ (!FLAGS_SET(flags, XESCAPE_8_BIT) && (unsigned char) *f >= 127) ||
*f == '\\' || strchr(bad, *f)) {
if ((size_t) (t - ans) + 4 > console_width)
break;
@@ -427,9 +428,9 @@ char* xescape_full(const char *s, const char *bad, size_t console_width, bool ei
return ans;
}
-char* escape_non_printable_full(const char *str, size_t console_width, bool eight_bit) {
- if (eight_bit)
- return xescape_full(str, "", console_width, true);
+char* escape_non_printable_full(const char *str, size_t console_width, XEscapeFlags flags) {
+ if (FLAGS_SET(flags, XESCAPE_8_BIT))
+ return xescape_full(str, "", console_width, flags);
else
return utf8_escape_non_printable_full(str, console_width);
}
diff --git a/src/basic/escape.h b/src/basic/escape.h
index 3cb107ae90..945e7dc82c 100644
--- a/src/basic/escape.h
+++ b/src/basic/escape.h
@@ -54,12 +54,16 @@ static inline int cunescape(const char *s, UnescapeFlags flags, char **ret) {
}
int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit, bool accept_nul);
-char* xescape_full(const char *s, const char *bad, size_t console_width, bool eight_bits);
+typedef enum XEscapeFlags {
+ XESCAPE_8_BIT = 1 << 0,
+} XEscapeFlags;
+
+char* xescape_full(const char *s, const char *bad, size_t console_width, XEscapeFlags flags);
static inline char* xescape(const char *s, const char *bad) {
- return xescape_full(s, bad, SIZE_MAX, false);
+ return xescape_full(s, bad, SIZE_MAX, 0);
}
char* octescape(const char *s, size_t len);
-char* escape_non_printable_full(const char *str, size_t console_width, bool eight_bit);
+char* escape_non_printable_full(const char *str, size_t console_width, XEscapeFlags flags);
char* shell_escape(const char *s, const char *bad);
char* shell_maybe_quote(const char *s, ShellEscapeFlags flags);
diff --git a/src/basic/process-util.c b/src/basic/process-util.c
index 902265ac21..d7afc4fe5a 100644
--- a/src/basic/process-util.c
+++ b/src/basic/process-util.c
@@ -175,7 +175,7 @@ int get_process_cmdline(pid_t pid, size_t max_columns, ProcessCmdlineFlags flags
bool eight_bit = (flags & PROCESS_CMDLINE_USE_LOCALE) && !is_locale_utf8();
- ans = escape_non_printable_full(t, max_columns, eight_bit);
+ ans = escape_non_printable_full(t, max_columns, eight_bit * XESCAPE_8_BIT);
if (!ans)
return -ENOMEM;