diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-04-08 20:26:47 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-04-08 20:26:47 -0700 |
commit | c5b4f5f2b8c5efb85e862bedf526c7ff49b5e406 (patch) | |
tree | ce617209289baa0827e171307874387240c92119 | |
parent | 11f19e615c6046751c3a578e67ca027cfaf55367 (diff) | |
parent | 66883355e44a2e671c997a7df2193b585be893d7 (diff) |
Merge branch 'sscanf' of github.com:artdent/emscripten into artdent-sscanf
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | src/library.js | 7 | ||||
-rwxr-xr-x | tests/runner.py | 18 |
3 files changed, 26 insertions, 0 deletions
@@ -60,4 +60,5 @@ a license to everyone to use it as detailed in LICENSE.) * Éloi Rivard <azmeuk@gmail.com> * Alexander Gladysh <ag@logiceditor.com> * Arlo Breault <arlolra@gmail.com> +* Jacob Lee <artdent@gmail.com> (copyright owned by Google, Inc.) diff --git a/src/library.js b/src/library.js index b63ac955..f6b2a31e 100644 --- a/src/library.js +++ b/src/library.js @@ -2513,6 +2513,11 @@ LibraryManager.library = { if (format[formatIndex] === '%') { formatIndex++; + var suppressAssignment = false; + if (format[formatIndex] == '*') { + suppressAssignment = true; + formatIndex++; + } var maxSpecifierStart = formatIndex; while (format[formatIndex].charCodeAt(0) >= {{{ charCode('0') }}} && format[formatIndex].charCodeAt(0) <= {{{ charCode('9') }}}) { @@ -2578,6 +2583,8 @@ LibraryManager.library = { unget(); } if (buffer.length === 0) return 0; // Failure. + if (suppressAssignment) continue; + var text = buffer.join(''); var argPtr = {{{ makeGetValue('varargs', 'argIndex', 'void*') }}}; argIndex += Runtime.getNativeFieldSize('void*'); diff --git a/tests/runner.py b/tests/runner.py index ba940310..e6d5b330 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -5749,6 +5749,24 @@ Pass: 0.000012 0.000012''') ''' self.do_run(src, '2, , black\n2, ., #001100\n2, X, #111100'); + def test_sscanf_skip(self): + src = r''' + #include <stdio.h> + + int main(){ + int val1; + printf("%d\n", sscanf("10 20 30 40", "%*lld %*d %d", &val1)); + printf("%d\n", val1); + + int64_t large, val2; + printf("%d\n", sscanf("1000000 -1125899906842620 -123 -1073741823", "%lld %*lld %ld %*d", &large, &val2)); + printf("%lld,%d\n", large, val2); + + return 0; + } + ''' + self.do_run(src, '1\n30\n2\n1000000,-123\n') + def test_langinfo(self): src = open(path_from_root('tests', 'langinfo', 'test.c'), 'r').read() expected = open(path_from_root('tests', 'langinfo', 'output.txt'), 'r').read() |