aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/library.js28
-rw-r--r--tests/runner.py27
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):