aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-04-08 20:26:47 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-04-08 20:26:47 -0700
commitc5b4f5f2b8c5efb85e862bedf526c7ff49b5e406 (patch)
treece617209289baa0827e171307874387240c92119
parent11f19e615c6046751c3a578e67ca027cfaf55367 (diff)
parent66883355e44a2e671c997a7df2193b585be893d7 (diff)
Merge branch 'sscanf' of github.com:artdent/emscripten into artdent-sscanf
-rw-r--r--AUTHORS1
-rw-r--r--src/library.js7
-rwxr-xr-xtests/runner.py18
3 files changed, 26 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
index 55a7c057..35aa74a7 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -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()