diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-04-01 06:04:00 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-04-01 06:04:00 +0200 |
commit | 50e2c9b4d47c8a14f9b921d716f2cd070a4aabcd (patch) | |
tree | 198db8d3fb46ca13745343e9eb1a21842ccbfd80 /sys/src/cmd/acme | |
parent | 5b5eb3b4b4a7e10e16dcbe7f287771c7e6e85aa8 (diff) |
sam, acme: fix character classes quoting for 21-bit runes
quote handling was broken with 21-bit runes. nextrec()
returned quoted rune as long rune | (Runemax+1) to escape
it.
with 16-bit runes, storing that long into 16-bit Rune
would automatically remove the escaping, but with 21-bit
runes, Rune is uint32 so the escaping would remain. we
now use (Runemask+1) instead, and mask the escaping off
explicitely when storing back to Rune.
Diffstat (limited to 'sys/src/cmd/acme')
-rw-r--r-- | sys/src/cmd/acme/regx.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/src/cmd/acme/regx.c b/sys/src/cmd/acme/regx.c index af1197f8e..cedf11a81 100644 --- a/sys/src/cmd/acme/regx.c +++ b/sys/src/cmd/acme/regx.c @@ -455,7 +455,7 @@ nextrec(void) exprp++; return '\n'; } - return *exprp++|(Runemax+1); + return *exprp++|(Runemask+1); } return *exprp++; } @@ -491,11 +491,11 @@ bldcclass(void) if((c2 = nextrec()) == ']') goto Error; classp[n+0] = Runemax; - classp[n+1] = c1; - classp[n+2] = c2; + classp[n+1] = c1 & Runemask; + classp[n+2] = c2 & Runemask; n += 3; }else - classp[n++] = c1; + classp[n++] = c1 & Runemask; } classp[n] = 0; if(nclass == Nclass){ |