summaryrefslogtreecommitdiff
path: root/conf/cf-lex.l
diff options
context:
space:
mode:
authorAlexander Zubkov <green@qrator.net>2023-06-23 16:47:37 +0200
committerOndrej Zajicek <santiago@crfreenet.org>2023-06-23 16:47:37 +0200
commit65d6a525944faa3f77041419991d77106d8f0a0d (patch)
treee55c7bae74a6b980c961b7c65479e97d1fb65a96 /conf/cf-lex.l
parent5f2ecb2298a6fe4b2fcd9efc0b39c36202496c2c (diff)
Add hex:XYZ syntax for short hex strings
Hexadecimal bytestring literals have minimal length to not collide with IP addresses or regular (hexadecimal) number literals. Allow to use shorter literals with explicit hex: prefix.
Diffstat (limited to 'conf/cf-lex.l')
-rw-r--r--conf/cf-lex.l11
1 files changed, 8 insertions, 3 deletions
diff --git a/conf/cf-lex.l b/conf/cf-lex.l
index 9555949d..9025a84d 100644
--- a/conf/cf-lex.l
+++ b/conf/cf-lex.l
@@ -255,12 +255,17 @@ WHITE [ \t]
return IP4;
}
-{XIGIT}{2}((:{XIGIT}{2}){15,}|({XIGIT}{2}){15,}) {
- char *s = yytext;
+({XIGIT}{2}){16,}|{XIGIT}{2}(:{XIGIT}{2}){15,}|hex:({XIGIT}{2}(:?{XIGIT}{2})*)? {
+ char *s, *sb = yytext;
size_t len = 0, i;
struct bytestring *bytes;
byte *b;
+ /* skip 'hex:' prefix */
+ if (sb[0] == 'h' && sb[1] == 'e' && sb[2] == 'x' && sb[3] == ':')
+ sb += 4;
+
+ s = sb;
while (*s) {
len++;
s += 2;
@@ -271,7 +276,7 @@ WHITE [ \t]
bytes->length = len;
b = &bytes->data[0];
- s = yytext;
+ s = sb;
errno = 0;
for (i = 0; i < len; i++) {
*b = bstrtobyte16(s);