diff options
author | Björn-Egil Dahlberg <[email protected]> | 2010-10-14 14:42:11 +0200 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2010-10-14 14:42:16 +0200 |
commit | 0cfaafd999d74a085d6f3e212e90985700040691 (patch) | |
tree | 69d406b6b2345555515e4cf413e50073ea7e5f34 /lib/erl_interface | |
parent | b9e554258331b66af6f95e5230a4b385fa3fe754 (diff) | |
parent | 386050e35675d3e4336f48a19b8562f9a62c1624 (diff) | |
download | otp-0cfaafd999d74a085d6f3e212e90985700040691.tar.gz otp-0cfaafd999d74a085d6f3e212e90985700040691.tar.bz2 otp-0cfaafd999d74a085d6f3e212e90985700040691.zip |
Merge branch 'sv/ei-number-parsing' into dev
* sv/ei-number-parsing:
teach ei_x_format to handle unary - and +
OTP-8891
Diffstat (limited to 'lib/erl_interface')
-rw-r--r-- | lib/erl_interface/src/misc/ei_format.c | 4 | ||||
-rw-r--r-- | lib/erl_interface/test/ei_format_SUITE.erl | 2 | ||||
-rw-r--r-- | lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c | 2 |
3 files changed, 6 insertions, 2 deletions
diff --git a/lib/erl_interface/src/misc/ei_format.c b/lib/erl_interface/src/misc/ei_format.c index 08235d0ebe..b35421d4b2 100644 --- a/lib/erl_interface/src/misc/ei_format.c +++ b/lib/erl_interface/src/misc/ei_format.c @@ -106,6 +106,8 @@ static int eiformat(const char** fmt, union arg** args, ei_x_buff* x) default: if (isdigit((int)*p)) res = pdigit(&p, x); + else if ((*p == '-' || *p == '+') && isdigit((int)*(p+1))) + res = pdigit(&p, x); else if (islower((int)*p)) res = patom(&p, x); else @@ -149,6 +151,8 @@ static int pdigit(const char** fmt, ei_x_buff* x) double d; long l; + if (**fmt == '-' || **fmt == '+') + (*fmt)++; for (;;) { c = *(*fmt)++; if (isdigit((int)c)) diff --git a/lib/erl_interface/test/ei_format_SUITE.erl b/lib/erl_interface/test/ei_format_SUITE.erl index 7871f07ae9..cbe9fa52d7 100644 --- a/lib/erl_interface/test/ei_format_SUITE.erl +++ b/lib/erl_interface/test/ei_format_SUITE.erl @@ -155,7 +155,7 @@ format_wo_ver(suite) -> []; format_wo_ver(Config) when is_list(Config) -> ?line P = runner:start(?format_wo_ver), - ?line {term, [{a, "b"}, {c, 10}]} = get_term(P), + ?line {term, [-1, 2, {a, "b"}, {c, 10}]} = get_term(P), ?line runner:recv_eot(P), ok. diff --git a/lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c b/lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c index a969ded3dc..ecdce402f5 100644 --- a/lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c +++ b/lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c @@ -176,7 +176,7 @@ TESTCASE(format_wo_ver) { ei_x_buff x; ei_x_new (&x); - ei_x_format(&x, "[{~a,~s},{~a,~i}]", "a", "b", "c", 10); + ei_x_format(&x, "[-1, +2, {~a,~s},{~a,~i}]", "a", "b", "c", 10); send_bin_term(&x); free(x.buff); |