aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Mitchener <bruce.mitchener@gmail.com>2013-08-23 15:11:49 +0700
committerAlon Zakai <alonzakai@gmail.com>2013-09-13 10:07:02 -0700
commita9d0a7f9817a0323c0436f364f1c28f53f9971bb (patch)
tree19f8675429c599e2b9d0903f6d51e2fece8381f9
parent5c6e1633d218bd5b9c5077634829eb14d326308f (diff)
Update to work with new libc headers.
-rw-r--r--src/library.js138
-rw-r--r--system/include/compat/time.h18
-rw-r--r--tests/unistd/login.out2
-rw-r--r--tests/unistd/misc.out8
-rw-r--r--tests/zlib/ref.txt2
5 files changed, 107 insertions, 61 deletions
diff --git a/src/library.js b/src/library.js
index f3c3c1ec..16218120 100644
--- a/src/library.js
+++ b/src/library.js
@@ -29,11 +29,11 @@ LibraryManager.library = {
// ==========================================================================
__dirent_struct_layout: Runtime.generateStructInfo([
- ['i32', 'd_ino'],
- ['b1024', 'd_name'],
- ['i32', 'd_off'],
- ['i32', 'd_reclen'],
- ['i32', 'd_type']]),
+ ['i64', 'd_ino'],
+ ['i64', 'd_off'],
+ ['i16', 'd_reclen'],
+ ['i8', 'd_type'],
+ ['b256', 'd_name']]),
opendir__deps: ['$FS', '__setErrNo', '$ERRNO_CODES', '__dirent_struct_layout', 'open'],
opendir: function(dirname) {
// DIR *opendir(const char *dirname);
@@ -82,7 +82,7 @@ LibraryManager.library = {
seekdir: function(dirp, loc) {
// void seekdir(DIR *dirp, long int loc);
// http://pubs.opengroup.org/onlinepubs/007908799/xsh/seekdir.html
- _lseek(dirp, loc, {{{ cDefine('SEEK_SET') }}});
+ _lseek(dirp, loc, 0, {{{ cDefine('SEEK_SET') }}});
},
rewinddir__deps: ['seekdir'],
rewinddir: function(dirp) {
@@ -254,23 +254,27 @@ LibraryManager.library = {
// ==========================================================================
__stat_struct_layout: Runtime.generateStructInfo([
- ['i32', 'st_dev'],
- ['i32', 'st_ino'],
+ ['i64', 'st_dev'],
+ ['i32', '__st_dev_padding'],
+ ['i32', '__st_ino_truncated'],
['i32', 'st_mode'],
['i32', 'st_nlink'],
['i32', 'st_uid'],
['i32', 'st_gid'],
- ['i32', 'st_rdev'],
- ['i32', 'st_size'],
- ['i32', 'st_atime'],
- ['i32', 'st_spare1'],
- ['i32', 'st_mtime'],
- ['i32', 'st_spare2'],
- ['i32', 'st_ctime'],
- ['i32', 'st_spare3'],
+ ['i64', 'st_rdev'],
+ ['i32', '__st_rdev_padding'],
+ ['i32', '__st_rdev_padding2'],
+ ['i64', 'st_size'],
['i32', 'st_blksize'],
- ['i32', 'st_blocks'],
- ['i32', 'st_spare4']]),
+ ['i32', '__st_blksize_padding'],
+ ['i64', 'st_blocks'],
+ ['i32', 'st_atim_secs'],
+ ['i32', 'st_atim_nsecs'],
+ ['i32', 'st_mtim_secs'],
+ ['i32', 'st_mtim_nsecs'],
+ ['i32', 'st_ctim_secs'],
+ ['i32', 'st_ctim_nsecs'],
+ ['i64', 'st_ino']]),
stat__deps: ['$FS', '__stat_struct_layout'],
stat: function(path, buf, dontResolveLastLink) {
// http://pubs.opengroup.org/onlinepubs/7908799/xsh/stat.html
@@ -281,18 +285,26 @@ LibraryManager.library = {
try {
var stat = dontResolveLastLink ? FS.lstat(path) : FS.stat(path);
{{{ makeSetValue('buf', '___stat_struct_layout.st_dev', 'stat.dev', 'i32') }}};
- {{{ makeSetValue('buf', '___stat_struct_layout.st_ino', 'stat.ino', 'i32') }}}
+ {{{ makeSetValue('buf', '___stat_struct_layout.__st_dev_padding', '0', 'i32') }}};
+ {{{ makeSetValue('buf', '___stat_struct_layout.__st_ino_truncated', 'stat.ino', 'i32') }}};
{{{ makeSetValue('buf', '___stat_struct_layout.st_mode', 'stat.mode', 'i32') }}}
{{{ makeSetValue('buf', '___stat_struct_layout.st_nlink', 'stat.nlink', 'i32') }}}
{{{ makeSetValue('buf', '___stat_struct_layout.st_uid', 'stat.uid', 'i32') }}}
{{{ makeSetValue('buf', '___stat_struct_layout.st_gid', 'stat.gid', 'i32') }}}
{{{ makeSetValue('buf', '___stat_struct_layout.st_rdev', 'stat.rdev', 'i32') }}}
+ {{{ makeSetValue('buf', '___stat_struct_layout.__st_rdev_padding', '0', 'i32') }}};
+ {{{ makeSetValue('buf', '___stat_struct_layout.__st_rdev_padding2', '0', 'i32') }}};
{{{ makeSetValue('buf', '___stat_struct_layout.st_size', 'stat.size', 'i32') }}}
- {{{ makeSetValue('buf', '___stat_struct_layout.st_atime', 'Math.floor(stat.atime.getTime() / 1000)', 'i32') }}}
- {{{ makeSetValue('buf', '___stat_struct_layout.st_mtime', 'Math.floor(stat.mtime.getTime() / 1000)', 'i32') }}}
- {{{ makeSetValue('buf', '___stat_struct_layout.st_ctime', 'Math.floor(stat.ctime.getTime() / 1000)', 'i32') }}}
{{{ makeSetValue('buf', '___stat_struct_layout.st_blksize', '4096', 'i32') }}}
+ {{{ makeSetValue('buf', '___stat_struct_layout.__st_blksize_padding', '0', 'i32') }}}
{{{ makeSetValue('buf', '___stat_struct_layout.st_blocks', 'stat.blocks', 'i32') }}}
+ {{{ makeSetValue('buf', '___stat_struct_layout.st_atim_secs', 'Math.floor(stat.atime.getTime() / 1000)', 'i32') }}}
+ {{{ makeSetValue('buf', '___stat_struct_layout.st_atim_nsecs', '0', 'i32') }}}
+ {{{ makeSetValue('buf', '___stat_struct_layout.st_mtim_secs', 'Math.floor(stat.mtime.getTime() / 1000)', 'i32') }}}
+ {{{ makeSetValue('buf', '___stat_struct_layout.st_mtim_nsecs', '0', 'i32') }}}
+ {{{ makeSetValue('buf', '___stat_struct_layout.st_ctim_secs', 'Math.floor(stat.ctime.getTime() / 1000)', 'i32') }}}
+ {{{ makeSetValue('buf', '___stat_struct_layout.st_ctim_nsecs', '0', 'i32') }}}
+ {{{ makeSetValue('buf', '___stat_struct_layout.st_ino', 'stat.ino', 'i32') }}}
return 0;
} catch (e) {
FS.handleFSError(e);
@@ -317,7 +329,7 @@ LibraryManager.library = {
return _stat(stream.path, buf);
},
mknod__deps: ['$FS', '__setErrNo', '$ERRNO_CODES'],
- mknod: function(path, mode, dev) {
+ mknod: function(path, mode, dev_lo, dev_hi) {
// int mknod(const char *path, mode_t mode, dev_t dev);
// http://pubs.opengroup.org/onlinepubs/7908799/xsh/mknod.html
path = Pointer_stringify(path);
@@ -335,7 +347,7 @@ LibraryManager.library = {
return -1;
}
try {
- FS.mknod(path, mode, dev);
+ FS.mknod(path, mode, dev_lo);
return 0;
} catch (e) {
FS.handleFSError(e);
@@ -431,15 +443,22 @@ LibraryManager.library = {
__statvfs_struct_layout: Runtime.generateStructInfo([
['i32', 'f_bsize'],
['i32', 'f_frsize'],
- ['i32', 'f_blocks'],
- ['i32', 'f_bfree'],
- ['i32', 'f_bavail'],
- ['i32', 'f_files'],
- ['i32', 'f_ffree'],
- ['i32', 'f_favail'],
+ ['i64', 'f_blocks'],
+ ['i64', 'f_bfree'],
+ ['i64', 'f_bavail'],
+ ['i64', 'f_files'],
+ ['i64', 'f_ffree'],
+ ['i64', 'f_favail'],
['i32', 'f_fsid'],
+ ['i32', '__padding'],
['i32', 'f_flag'],
- ['i32', 'f_namemax']]),
+ ['i32', 'f_namemax'],
+ ['i32', '__reserved_1'],
+ ['i32', '__reserved_2'],
+ ['i32', '__reserved_3'],
+ ['i32', '__reserved_4'],
+ ['i32', '__reserved_5'],
+ ['i32', '__reserved_6']]),
statvfs__deps: ['$FS', '__statvfs_struct_layout'],
statvfs: function(path, buf) {
// http://pubs.opengroup.org/onlinepubs/009695399/functions/statvfs.html
@@ -567,7 +586,7 @@ LibraryManager.library = {
// Should never be reached. Only to silence strict warnings.
return -1;
},
- posix_fadvise: function(fd, offset, len, advice) {
+ posix_fadvise: function(fd, offset_lo, offset_hi, len_lo, len_hi, advice) {
// int posix_fadvise(int fd, off_t offset, off_t len, int advice);
// http://pubs.opengroup.org/onlinepubs/009695399/functions/posix_fadvise.html
// Advise as much as you wish. We don't care.
@@ -575,7 +594,7 @@ LibraryManager.library = {
},
posix_madvise: 'posix_fadvise',
posix_fallocate__deps: ['$FS', '__setErrNo', '$ERRNO_CODES'],
- posix_fallocate: function(fd, offset, len) {
+ posix_fallocate: function(fd, offset_lo, offset_hi, len_lo, len_hi) {
// int posix_fallocate(int fd, off_t offset, off_t len);
// http://pubs.opengroup.org/onlinepubs/009695399/functions/posix_fallocate.html
var stream = FS.getStream(fd);
@@ -584,7 +603,7 @@ LibraryManager.library = {
return -1;
}
try {
- FS.allocate(stream, offset, len);
+ FS.allocate(stream, offset_lo, len_lo);
return 0;
} catch (e) {
FS.handleFSError(e);
@@ -863,13 +882,13 @@ LibraryManager.library = {
},
fdatasync: 'fsync',
truncate__deps: ['$FS', '__setErrNo', '$ERRNO_CODES'],
- truncate: function(path, length) {
+ truncate: function(path, length_lo, length_hi) {
// int truncate(const char *path, off_t length);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/truncate.html
// NOTE: The path argument may be a string, to simplify ftruncate().
if (typeof path !== 'string') path = Pointer_stringify(path);
try {
- FS.truncate(path, length);
+ FS.truncate(path, length_lo);
return 0;
} catch (e) {
FS.handleFSError(e);
@@ -877,11 +896,11 @@ LibraryManager.library = {
}
},
ftruncate__deps: ['$FS', '__setErrNo', '$ERRNO_CODES', 'truncate'],
- ftruncate: function(fildes, length) {
+ ftruncate: function(fildes, length_lo, length_hi) {
// int ftruncate(int fildes, off_t length);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/ftruncate.html
try {
- FS.ftruncate(fildes, length);
+ FS.ftruncate(fildes, length_lo);
return 0;
} catch (e) {
FS.handleFSError(e);
@@ -943,7 +962,7 @@ LibraryManager.library = {
return -1;
},
lockf__deps: ['$FS', '__setErrNo', '$ERRNO_CODES'],
- lockf: function(fildes, func, size) {
+ lockf: function(fildes, func, size_lo, size_hi) {
// int lockf(int fildes, int function, off_t size);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/lockf.html
var stream = FS.getStream(fildes);
@@ -957,16 +976,17 @@ LibraryManager.library = {
}
},
lseek__deps: ['$FS', '__setErrNo', '$ERRNO_CODES'],
- lseek: function(fildes, offset, whence) {
+ lseek: function(fildes, offset_lo, offset_hi, whence) {
// off_t lseek(int fildes, off_t offset, int whence);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/lseek.html
var stream = FS.getStream(fildes);
+ tempRet0 = 0;
if (!stream) {
___setErrNo(ERRNO_CODES.EBADF);
return -1;
}
try {
- return FS.llseek(stream, offset, whence);
+ return FS.llseek(stream, offset_lo, whence);
} catch (e) {
FS.handleFSError(e);
return -1;
@@ -982,7 +1002,7 @@ LibraryManager.library = {
return -1;
},
pread__deps: ['$FS', '__setErrNo', '$ERRNO_CODES'],
- pread: function(fildes, buf, nbyte, offset) {
+ pread: function(fildes, buf, nbyte, offset_lo, offset_hi) {
// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
var stream = FS.getStream(fildes);
@@ -997,7 +1017,7 @@ LibraryManager.library = {
SAFE_HEAP_FILL_HISTORY(buf, buf+nbyte, 'i8'); // VFS does not use makeSetValues, so we need to do it manually
#endif
#endif
- return FS.read(stream, slab, buf, nbyte, offset);
+ return FS.read(stream, slab, buf, nbyte, offset_lo);
} catch (e) {
FS.handleFSError(e);
return -1;
@@ -1117,7 +1137,7 @@ LibraryManager.library = {
return str.length;
},
pwrite__deps: ['$FS', '__setErrNo', '$ERRNO_CODES'],
- pwrite: function(fildes, buf, nbyte, offset) {
+ pwrite: function(fildes, buf, nbyte, offset_lo, offset_hi) {
// ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
var stream = FS.getStream(fildes);
@@ -1132,7 +1152,7 @@ LibraryManager.library = {
SAFE_HEAP_FILL_HISTORY(buf, buf+nbyte, 'i8'); // VFS does not use makeSetValues, so we need to do it manually
#endif
#endif
- return FS.write(stream, slab, buf, nbyte, offset);
+ return FS.write(stream, slab, buf, nbyte, offset_lo);
} catch (e) {
FS.handleFSError(e);
return -1;
@@ -2535,7 +2555,7 @@ LibraryManager.library = {
fseek: function(stream, offset, whence) {
// int fseek(FILE *stream, long offset, int whence);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fseek.html
- var ret = _lseek(stream, offset, whence);
+ var ret = _lseek(stream, offset, 0, whence);
if (ret == -1) {
return -1;
}
@@ -2543,8 +2563,8 @@ LibraryManager.library = {
stream.eof = false;
return 0;
},
- fseeko: 'fseek',
- fseeko64: 'fseek',
+ fseeko: 'lseek',
+ fseeko64: 'lseek',
fsetpos__deps: ['$FS', 'lseek', '__setErrNo', '$ERRNO_CODES'],
fsetpos: function(stream, pos) {
// int fsetpos(FILE *stream, const fpos_t *pos);
@@ -2580,8 +2600,15 @@ LibraryManager.library = {
return stream.position;
}
},
- ftello: 'ftell',
- ftello64: 'ftell',
+ ftello__deps: ['$FS', '__setErrNo', '$ERRNO_CODES'],
+ ftello: function(stream) {
+ // off_t ftello(FILE *stream);
+ // http://pubs.opengroup.org/onlinepubs/000095399/functions/ftello.html
+ var result = ftell(stream);
+ tempRet0 = result << 32;
+ return 0;
+ },
+ ftello64: 'ftello',
fwrite__deps: ['$FS', 'write'],
fwrite: function(ptr, size, nitems, stream) {
// size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
@@ -5023,11 +5050,12 @@ LibraryManager.library = {
// ==========================================================================
__utsname_struct_layout: Runtime.generateStructInfo([
- ['b32', 'sysname'],
- ['b32', 'nodename'],
- ['b32', 'release'],
- ['b32', 'version'],
- ['b32', 'machine']]),
+ ['b65', 'sysname'],
+ ['b65', 'nodename'],
+ ['b65', 'release'],
+ ['b65', 'version'],
+ ['b65', 'machine'],
+ ['b65', 'domainname']]),
uname__deps: ['__utsname_struct_layout'],
uname: function(name) {
// int uname(struct utsname *name);
diff --git a/system/include/compat/time.h b/system/include/compat/time.h
new file mode 100644
index 00000000..9adec84e
--- /dev/null
+++ b/system/include/compat/time.h
@@ -0,0 +1,18 @@
+#ifndef _COMPAT_TIME_H
+#define _COMPAT_TIME_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int dysize(int year);
+#define _timezone timezone
+#define _daylight daylight
+
+#ifdef __cplusplus
+}
+#endif
+
+#include_next <time.h>
+
+#endif
diff --git a/tests/unistd/login.out b/tests/unistd/login.out
index 50e850ae..c1919c3c 100644
--- a/tests/unistd/login.out
+++ b/tests/unistd/login.out
@@ -3,7 +3,7 @@ errno: 0
gethostname/2 ret: -1
gethostname/2: em------------------------
-errno: 91
+errno: 36
gethostname/256 ret: 0
gethostname/256: emscripten
diff --git a/tests/unistd/misc.out b/tests/unistd/misc.out
index 8f03f688..ae641d57 100644
--- a/tests/unistd/misc.out
+++ b/tests/unistd/misc.out
@@ -11,8 +11,8 @@ lockf(good): 0, errno: 0
lockf(bad): -1, errno: 9
nice: 0, errno: 1
pause: -1, errno: 4
-pipe(good): -1, errno: 88
-pipe(bad): -1, errno: 88
+pipe(good): -1, errno: 38
+pipe(bad): -1, errno: 38
execl: -1, errno: 8
execle: -1, errno: 8
execlp: -1, errno: 8
@@ -29,8 +29,8 @@ alarm: 0, errno: 0
ualarm: 0, errno: 0
fork: -1, errno: 11
vfork: -1, errno: 11
-crypt: (null), errno: 88
-encrypt, errno: 88
+crypt: (null), errno: 38
+encrypt, errno: 38
getgid: 0, errno: 0
getegid: 0, errno: 0
getuid: 0, errno: 0
diff --git a/tests/zlib/ref.txt b/tests/zlib/ref.txt
index 7211459e..bdbc4c1f 100644
--- a/tests/zlib/ref.txt
+++ b/tests/zlib/ref.txt
@@ -1,4 +1,4 @@
-zlib version 1.2.5 = 4688, compile flags = 85
+zlib version 1.2.5 = 4688, compile flags = 149
uncompress(): hello, hello!
inflate(): hello, hello!
large_inflate(): OK