aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Braun <roger@rogerbraun.net>2013-02-13 22:55:36 +0100
committerRoger Braun <roger@rogerbraun.net>2013-02-21 08:43:57 +0100
commit31b7152b355ef7244ce5060f2da618e7ad0880a0 (patch)
tree2a69ec30809f693d8d416624714af6671cb8c3ef
parent5f5e17f88b52e186f98546f0d3fb0327c211328a (diff)
Handle %c in sscanf.
-rw-r--r--src/library.js10
-rwxr-xr-xtests/runner.py23
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()