diff options
author | Sverker Eriksson <[email protected]> | 2013-01-11 17:27:29 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2013-01-18 15:04:03 +0100 |
commit | b553664f54034e8c04ae6f9cc44f16b7f516518b (patch) | |
tree | 1522c655fea9aa52476e997aa26f1512d3ecada4 /lib/erl_interface/src/legacy/erl_format.c | |
parent | 97abb095cd2182d5c3fafd525da4943ef74dc8e5 (diff) | |
download | otp-b553664f54034e8c04ae6f9cc44f16b7f516518b.tar.gz otp-b553664f54034e8c04ae6f9cc44f16b7f516518b.tar.bz2 otp-b553664f54034e8c04ae6f9cc44f16b7f516518b.zip |
erl_interface: utf8 atoms continued
Diffstat (limited to 'lib/erl_interface/src/legacy/erl_format.c')
-rw-r--r-- | lib/erl_interface/src/legacy/erl_format.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/lib/erl_interface/src/legacy/erl_format.c b/lib/erl_interface/src/legacy/erl_format.c index dc85806c36..533241e396 100644 --- a/lib/erl_interface/src/legacy/erl_format.c +++ b/lib/erl_interface/src/legacy/erl_format.c @@ -574,10 +574,22 @@ static int ematch(ETERM *p, ETERM *t) switch (type_p) { - case ERL_ATOM: - return p->uval.aval.len == t->uval.aval.len && - memcmp(p->uval.aval.a, t->uval.aval.a, p->uval.aval.len) == 0; - + case ERL_ATOM: { + Erl_Atom_data* pa = &p->uval.aval.d; + Erl_Atom_data* ta = &t->uval.aval.d; + if (pa->utf8 && ta->utf8) { + return pa->lenU == ta->lenU && memcmp(pa->utf8, ta->utf8, pa->lenU)==0; + } + else if (pa->latin1 && ta->latin1) { + return pa->lenL == ta->lenL && memcmp(pa->latin1, ta->latin1, pa->lenL)==0; + } + else if (pa->latin1) { + return cmp_latin1_vs_utf8(pa->latin1, pa->lenL, ta->utf8, ta->lenU)==0; + } + else { + return cmp_latin1_vs_utf8(ta->latin1, ta->lenL, pa->utf8, pa->lenU)==0; + } + } case ERL_VARIABLE: if (strcmp(p->uval.vval.name, "_") == 0) /* anon. variable */ return ERL_TRUE; |