aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormax99x <max99x@gmail.com>2011-08-27 05:33:46 +0300
committermax99x <max99x@gmail.com>2011-08-27 05:33:46 +0300
commitf9895c43f4679f423f5313c0d392ac06dace6c44 (patch)
treebbae1ca1e3deae132d0e3a968b0d1a791917591c
parent94501b32e968aabc32f3874a21362a428ee2a6d7 (diff)
Implemented realpath().
-rw-r--r--src/library.js18
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
// ==========================================================================