diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-01-18 14:24:58 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-01-18 14:24:58 -0800 |
commit | 4f176ff75c0fc55af8d7ee273d5757e08c2eb105 (patch) | |
tree | a4f3d383283cfe1ca5d68a4e2a26ecc9193f5de8 | |
parent | 1191cf32e013d45a18753e09c383f2627428715b (diff) |
asprintf and some stubs
-rw-r--r-- | src/library.js | 20 | ||||
-rwxr-xr-x | tests/runner.py | 7 |
2 files changed, 25 insertions, 2 deletions
diff --git a/src/library.js b/src/library.js index 0a8e862a..4e31e6f5 100644 --- a/src/library.js +++ b/src/library.js @@ -3497,6 +3497,12 @@ LibraryManager.library = { var result = __formatString(format, varargs); var limit = (n === undefined) ? result.length : Math.min(result.length, Math.max(n - 1, 0)); + if (s < 0) { + s = -s; + var buf = _malloc(limit+1); + {{{ makeSetValue('s', '0', 'buf', 'i8*') }}}; + s = buf; + } for (var i = 0; i < limit; i++) { {{{ makeSetValue('s', 'i', 'result[i]', 'i8') }}}; } @@ -3526,10 +3532,15 @@ LibraryManager.library = { // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html return _snprintf(s, undefined, format, varargs); }, + asprintf__deps: ['sprintf'], + asprintf: function(s, format, varargs) { + return _sprintf(-s, format, varargs); + }, vfprintf: 'fprintf', vsnprintf: 'snprintf', vprintf: 'printf', vsprintf: 'sprintf', + vasprintf: 'asprintf', vscanf: 'scanf', vfscanf: 'fscanf', vsscanf: 'sscanf', @@ -4210,6 +4221,8 @@ LibraryManager.library = { } }, + wmemcpy: function() { throw 'wmemcpy not implemented' }, + llvm_memcpy_i32: 'memcpy', llvm_memcpy_i64: 'memcpy', llvm_memcpy_p0i8_p0i8_i32: 'memcpy', @@ -4235,6 +4248,8 @@ LibraryManager.library = { llvm_memmove_p0i8_p0i8_i32: 'memmove', llvm_memmove_p0i8_p0i8_i64: 'memmove', + wmemmove: function() { throw 'wmemmove not implemented' }, + memset__inline: function(ptr, value, num, align) { return makeSetValues(ptr, 0, value, 'null', num, align); }, @@ -4269,6 +4284,8 @@ LibraryManager.library = { llvm_memset_p0i8_i32: 'memset', llvm_memset_p0i8_i64: 'memset', + wmemset: function() { throw 'wmemset not implemented' }, + strlen__asm: 'ii', strlen: function(ptr) { ptr = ptr|0; @@ -4285,6 +4302,8 @@ LibraryManager.library = { return 1; }, + wcslen: function() { throw 'wcslen not implemented' }, + strspn: function(pstr, pset) { var str = pstr, set, strcurr, setcurr; while (1) { @@ -6557,6 +6576,7 @@ LibraryManager.library = { pthread_cond_init: function() {}, pthread_cond_destroy: function() {}, pthread_cond_broadcast: function() {}, + pthread_cond_wait: function() {}, pthread_self: function() { //FIXME: assumes only a single thread return 0; diff --git a/tests/runner.py b/tests/runner.py index 97efdbc5..0b801a7f 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -4767,7 +4767,7 @@ at function.:blag ''' self.do_run(src, re.sub('(^|\n)\s+', '\\1', expected)) - def test_snprintf0(self): + def test_printf_cases(self): src = r''' #include <stdio.h> int main() { @@ -4775,10 +4775,13 @@ at function.:blag char buf[size]; snprintf(buf, size, "%s %d %.2f\n", "me and myself", 25, 1.345); printf("%d : %s\n", size, buf); + char *buff = NULL; + asprintf(&buff, "%d waka %d\n", 21, 95); + puts(buff); return 0; } ''' - self.do_run(src, '22 : me and myself 25 1.34\n') + self.do_run(src, '22 : me and myself 25 1.34\n21 waka 95\n') def test_atoX(self): if self.emcc_args is None: return self.skip('requires ta2') |