From: Alexander Zubkov Date: Fri, 23 Jun 2023 14:47:37 +0000 (+0200) Subject: Add hex:XYZ syntax for short hex strings X-Git-Tag: v2.14~101 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=65d6a525944faa3f77041419991d77106d8f0a0d;p=thirdparty%2Fbird.git 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. --- diff --git a/conf/cf-lex.l b/conf/cf-lex.l index 9555949d4..9025a84d8 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);