diff options
-rw-r--r-- | src/library.js | 28 | ||||
-rw-r--r-- | tests/runner.py | 27 |
2 files changed, 55 insertions, 0 deletions
diff --git a/src/library.js b/src/library.js index 7ec3c126..8d649131 100644 --- a/src/library.js +++ b/src/library.js @@ -3932,6 +3932,34 @@ LibraryManager.library = { nanf: 'nan', // ========================================================================== + // sys/utsname.h + // ========================================================================== + + __utsname_struct_layout: Runtime.generateStructInfo(null, '%struct.utsname'), + uname__deps: ['__utsname_struct_layout'], + uname: function(name) { + // int uname(struct utsname *name); + // http://pubs.opengroup.org/onlinepubs/009695399/functions/uname.html + if (name === 0) { + return -1; + } else { + var copyString = function(element, value) { + var offset = ___utsname_struct_layout[element]; + for (var i = 0; i < value.length; i++) { + {{{ makeSetValue('name', 'offset + i', 'value.charCodeAt(i)', 'i8') }}} + } + {{{ makeSetValue('name', 'offset + i', '0', 'i8') }}} + }; + copyString('sysname', 'Emscripten'); + copyString('nodename', 'emscripten'); + copyString('release', '1.0'); + copyString('version', '#1'); + copyString('machine', 'x86-JS'); + return 0; + } + }, + + // ========================================================================== // dlfcn.h - Dynamic library loading // // Some limitations: diff --git a/tests/runner.py b/tests/runner.py index 98ea0f28..06ad2d80 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -2578,6 +2578,33 @@ if 'benchmark' not in sys.argv: expected = open(path_from_root('tests', 'unistd', 'misc.out'), 'r').read() self.do_test(src, expected) + def test_uname(self): + src = r''' + #include <stdio.h> + #include <sys/utsname.h> + + int main() { + struct utsname u; + printf("ret: %d\n", uname(&u)); + printf("sysname: %s\n", u.sysname); + printf("nodename: %s\n", u.nodename); + printf("release: %s\n", u.release); + printf("version: %s\n", u.version); + printf("machine: %s\n", u.machine); + printf("invalid: %d\n", uname(0)); + return 0; + } + ''' + expected = ''' + ret: 0 + sysname: Emscripten + nodename: emscripten + release: 1.0 + version: #1 + machine: x86-JS + ''' + self.do_test(src, re.sub('(^|\n)\s+', '\\1', expected)) + ### 'Big' tests def test_fannkuch(self): |