summaryrefslogtreecommitdiff
path: root/src/defs.h
diff options
context:
space:
mode:
authorEugene Syromyatnikov <evgsyr@gmail.com>2022-01-19 19:01:31 +0100
committerEugene Syromyatnikov <evgsyr@gmail.com>2022-01-19 20:04:54 +0100
commit773d04f6faad54a2c85f8f552c9f4ea7ae354a92 (patch)
treec178e4d3550a7fb15baea1bc8fe0a4870f2e7f5b /src/defs.h
parent32254e759ec4b870a6074da111a08ce5f55b015e (diff)
downloadstrace-773d04f6faad54a2c85f8f552c9f4ea7ae354a92.tar.gz
util: add ability to override xflag setting via string_quote style
* src/defs.h (QUOTE_OVERWRITE_HEXSTR, QUOTE_HEXSTR_SHIFT, QUOTE_HEXSTR_MASK, QUOTE_HEXSTR_NONE, QUOTE_HEXSTR_ALL, QUOTE_HEXSTR_NON_ASCII, QUOTE_HEXSTR_NON_ASCII_CHARS): New macro constants. (QUOTE_FORCE_HEX): Re-define to (QUOTE_OVERWRITE_HEXSTR | QUOTE_HEXSTR_ALL). * src/util.c (string_quote) <xstyle>: New local variable. (string_quote): Use xstyle instead of xflag/style checks for hexadecimal character printing checks.
Diffstat (limited to 'src/defs.h')
-rw-r--r--src/defs.h22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/defs.h b/src/defs.h
index 66e2c385d..a99d8daf8 100644
--- a/src/defs.h
+++ b/src/defs.h
@@ -833,9 +833,29 @@ str_strip_prefix_len(const char *str, const char *prefix, size_t prefix_len)
/** Print ellipsis if the last character is not '\0' */
# define QUOTE_EXPECT_TRAILING_0 0x10
/** Print string in hex (using '\xHH' notation). */
-# define QUOTE_FORCE_HEX 0x20
+# define QUOTE_FORCE_HEX (QUOTE_OVERWRITE_HEXSTR | QUOTE_HEXSTR_ALL)
/** Enclose the string in C comment syntax. */
# define QUOTE_EMIT_COMMENT 0x40
+/** Override xflag setting with one of QUOTE_HEXSTR_[NA]* styles */
+# define QUOTE_OVERWRITE_HEXSTR 0x80
+
+/*
+ * bits 8..9 (mask 0x300) are used for supplying the respective hexstr setting
+ * if QUOTE_OVERWRITE_HEXSTR is set.
+ */
+# define QUOTE_HEXSTR_SHIFT 8
+/**
+ * Mask to be applied to a quoting style to extract the xflag overriding style
+ * part.
+ */
+# define QUOTE_HEXSTR_MASK (0x3 << QUOTE_HEXSTR_SHIFT)
+static_assert((NUM_HEXSTR_OPTS - 1) <= (QUOTE_HEXSTR_MASK >> QUOTE_HEXSTR_SHIFT),
+ "xflag options do not fit into QUOTE_HEXSTR_MASK");
+
+# define QUOTE_HEXSTR_NONE (HEXSTR_NONE << QUOTE_HEXSTR_SHIFT)
+# define QUOTE_HEXSTR_ALL (HEXSTR_ALL << QUOTE_HEXSTR_SHIFT)
+# define QUOTE_HEXSTR_NON_ASCII (HEXSTR_NON_ASCII << QUOTE_HEXSTR_SHIFT)
+# define QUOTE_HEXSTR_NON_ASCII_CHARS (HEXSTR_NON_ASCII_CHARS << QUOTE_HEXSTR_SHIFT)
extern int string_quote(const char *, char *, unsigned int, unsigned int,
const char *escape_chars);