@@ -25,20 +25,26 @@ var SyscallsLibrary = {
2525 umask: 0x1FF , // S_IRWXU | S_IRWXG | S_IRWXO
2626
2727 // shared utilities
28- calculateAt : function ( dirfd , path ) {
29- if ( path [ 0 ] !== '/' ) {
30- // relative path
31- var dir ;
32- if ( dirfd === { { { cDefine ( 'AT_FDCWD' ) } } } ) {
33- dir = FS . cwd ( ) ;
34- } else {
35- var dirstream = FS . getStream ( dirfd ) ;
36- if ( ! dirstream ) throw new FS . ErrnoError ( { { { cDefine ( 'EBADF' ) } } } ) ;
37- dir = dirstream . path ;
28+ calculateAt : function ( dirfd , path , allowEmpty ) {
29+ if ( path [ 0 ] === '/' ) {
30+ return path ;
31+ }
32+ // relative path
33+ var dir ;
34+ if ( dirfd === { { { cDefine ( 'AT_FDCWD' ) } } } ) {
35+ dir = FS . cwd ( ) ;
36+ } else {
37+ var dirstream = FS . getStream ( dirfd ) ;
38+ if ( ! dirstream ) throw new FS . ErrnoError ( { { { cDefine ( 'EBADF' ) } } } ) ;
39+ dir = dirstream . path ;
40+ }
41+ if ( path . length == 0 ) {
42+ if ( ! allowEmpty ) {
43+ throw new FS . ErrnoError ( { { { cDefine ( 'ENOENT' ) } } } ) ; ;
3844 }
39- path = PATH . join2 ( dir , path ) ;
45+ return dir ;
4046 }
41- return path ;
47+ return PATH . join2 ( dir , path ) ;
4248 } ,
4349
4450 doStat: function ( func , path , buf ) {
@@ -1273,11 +1279,12 @@ var SyscallsLibrary = {
12731279 __sys_fstatat64 : function ( dirfd , path , buf , flags ) {
12741280 path = SYSCALLS . getStr ( path ) ;
12751281 var nofollow = flags & { { { cDefine ( 'AT_SYMLINK_NOFOLLOW' ) } } } ;
1276- flags = flags & ( ~ { { { cDefine ( 'AT_SYMLINK_NOFOLLOW' ) } } } ) ;
1282+ var allowEmpty = flags & { { { cDefine ( 'AT_EMPTY_PATH' ) } } } ;
1283+ flags = flags & ( ~ { { { cDefine ( 'AT_SYMLINK_NOFOLLOW' ) | cDefine ( 'AT_EMPTY_PATH' ) } } } ) ;
12771284#if ASSERTIONS
12781285 assert ( ! flags , flags ) ;
12791286#endif
1280- path = SYSCALLS . calculateAt ( dirfd , path ) ;
1287+ path = SYSCALLS . calculateAt ( dirfd , path , allowEmpty ) ;
12811288 return SYSCALLS . doStat ( nofollow ? FS . lstat : FS . stat , path , buf ) ;
12821289 } ,
12831290 __sys_unlinkat : function ( dirfd , path , flags ) {
0 commit comments