diff options
-rw-r--r-- | src/library.js | 10 | ||||
-rwxr-xr-x | tests/runner.py | 23 |
2 files changed, 32 insertions, 1 deletions
diff --git a/src/library.js b/src/library.js index 900b3fee..284bf92a 100644 --- a/src/library.js +++ b/src/library.js @@ -2491,6 +2491,16 @@ LibraryManager.library = { continue; } + if (format[formatIndex] === '%' && format[formatIndex+1] == 'c') { + var argPtr = {{{ makeGetValue('varargs', 'argIndex', 'void*') }}}; + argIndex += Runtime.getNativeFieldSize('void*'); + fields++; + next = get(); + {{{ makeSetValue('argPtr', 0, 'next', 'i8') }}} + formatIndex += 2; + continue; + } + // remove whitespace while (1) { next = get(); diff --git a/tests/runner.py b/tests/runner.py index 4c42bb6e..65591c79 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -5341,9 +5341,30 @@ Pass: 0.000012 0.000012''') return(0); } ''' - self.do_run(src, '3\nday 19, month Nov, year 2012'); + def test_sscanf_5(self): + src = r''' + #include "stdio.h" + + static const char *colors[] = { + " c black", + ". c #001100", + "X c #111100" + }; + + int main(){ + unsigned char code; + char color[32]; + int rcode; + for(int i = 0; i < 3; i++) { + rcode = sscanf(colors[i], "%c c %s", &code, color); + printf("%i, %c, %s\n", rcode, code, color); + } + } + ''' + self.do_run(src, '2, , black\n2, ., #001100\n2, X, #111100'); + 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() |