diff options
author | max99x <max99x@gmail.com> | 2011-08-27 05:33:46 +0300 |
---|---|---|
committer | max99x <max99x@gmail.com> | 2011-08-27 05:33:46 +0300 |
commit | f9895c43f4679f423f5313c0d392ac06dace6c44 (patch) | |
tree | bbae1ca1e3deae132d0e3a968b0d1a791917591c | |
parent | 94501b32e968aabc32f3874a21362a428ee2a6d7 (diff) |
Implemented realpath().
-rw-r--r-- | src/library.js | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/library.js b/src/library.js index 381f0991..c583d430 100644 --- a/src/library.js +++ b/src/library.js @@ -3425,6 +3425,24 @@ LibraryManager.library = { return state & 0x7FFFFFFF; }, + realpath__deps: ['$FS', '__setErrNo'], + realpath: function(file_name, resolved_name) { + // char *realpath(const char *restrict file_name, char *restrict resolved_name); + // http://pubs.opengroup.org/onlinepubs/009604499/functions/realpath.html + var absolute = FS.analyzePath(Pointer_stringify(file_name)); + if (absolute.error) { + ___setErrNo(absolute.error); + return 0; + } else { + var size = Math.min(4095, absolute.path.length); // PATH_MAX - 1. + for (var i = 0; i < size; i++) { + {{{ makeSetValue('resolved_name', 'i', 'absolute.path.charCodeAt(i)', 'i8') }}} + } + {{{ makeSetValue('resolved_name', 'size', '0', 'i8') }}} + return resolved_name; + } + }, + // ========================================================================== // string.h // ========================================================================== |