@@ -65,7 +65,6 @@ const internalUtil = require('internal/util');
6565const {
6666 copyObject,
6767 getOptions,
68- modeNum,
6968 nullCheck,
7069 preprocessSymlinkDestination,
7170 Stats,
@@ -85,6 +84,7 @@ const {
8584} = require ( 'internal/constants' ) ;
8685const {
8786 isUint32,
87+ validateAndMaskMode,
8888 validateInteger,
8989 validateUint32
9090} = require ( 'internal/validators' ) ;
@@ -549,32 +549,36 @@ fs.closeSync = function(fd) {
549549 handleErrorFromBinding ( ctx ) ;
550550} ;
551551
552- fs . open = function ( path , flags , mode , callback_ ) {
553- var callback = makeCallback ( arguments [ arguments . length - 1 ] ) ;
554- mode = modeNum ( mode , 0o666 ) ;
555-
552+ fs . open = function ( path , flags , mode , callback ) {
556553 path = getPathFromURL ( path ) ;
557554 validatePath ( path ) ;
558- validateUint32 ( mode , 'mode' ) ;
555+ const flagsNumber = stringToFlags ( flags ) ;
556+ if ( arguments . length < 4 ) {
557+ callback = makeCallback ( mode ) ;
558+ mode = 0o666 ;
559+ } else {
560+ mode = validateAndMaskMode ( mode , 'mode' , 0o666 ) ;
561+ callback = makeCallback ( callback ) ;
562+ }
559563
560564 const req = new FSReqWrap ( ) ;
561565 req . oncomplete = callback ;
562566
563567 binding . open ( pathModule . toNamespacedPath ( path ) ,
564- stringToFlags ( flags ) ,
568+ flagsNumber ,
565569 mode ,
566570 req ) ;
567571} ;
568572
569573fs . openSync = function ( path , flags , mode ) {
570- mode = modeNum ( mode , 0o666 ) ;
571574 path = getPathFromURL ( path ) ;
572575 validatePath ( path ) ;
573- validateUint32 ( mode , 'mode' ) ;
576+ const flagsNumber = stringToFlags ( flags ) ;
577+ mode = validateAndMaskMode ( mode , 'mode' , 0o666 ) ;
574578
575579 const ctx = { path } ;
576580 const result = binding . open ( pathModule . toNamespacedPath ( path ) ,
577- stringToFlags ( flags ) , mode ,
581+ flagsNumber , mode ,
578582 undefined , ctx ) ;
579583 handleErrorFromBinding ( ctx ) ;
580584 return result ;
@@ -849,12 +853,16 @@ fs.fsyncSync = function(fd) {
849853} ;
850854
851855fs . mkdir = function ( path , mode , callback ) {
852- if ( typeof mode === 'function' ) callback = mode ;
853- callback = makeCallback ( callback ) ;
854856 path = getPathFromURL ( path ) ;
855857 validatePath ( path ) ;
856- mode = modeNum ( mode , 0o777 ) ;
857- validateUint32 ( mode , 'mode' ) ;
858+
859+ if ( arguments . length < 3 ) {
860+ callback = makeCallback ( mode ) ;
861+ mode = 0o777 ;
862+ } else {
863+ callback = makeCallback ( callback ) ;
864+ mode = validateAndMaskMode ( mode , 'mode' , 0o777 ) ;
865+ }
858866
859867 const req = new FSReqWrap ( ) ;
860868 req . oncomplete = callback ;
@@ -864,8 +872,7 @@ fs.mkdir = function(path, mode, callback) {
864872fs . mkdirSync = function ( path , mode ) {
865873 path = getPathFromURL ( path ) ;
866874 validatePath ( path ) ;
867- mode = modeNum ( mode , 0o777 ) ;
868- validateUint32 ( mode , 'mode' ) ;
875+ mode = validateAndMaskMode ( mode , 'mode' , 0o777 ) ;
869876 const ctx = { path } ;
870877 binding . mkdir ( pathModule . toNamespacedPath ( path ) , mode , undefined , ctx ) ;
871878 handleErrorFromBinding ( ctx ) ;
@@ -1047,25 +1054,18 @@ fs.unlinkSync = function(path) {
10471054} ;
10481055
10491056fs . fchmod = function ( fd , mode , callback ) {
1050- mode = modeNum ( mode ) ;
10511057 validateUint32 ( fd , 'fd' ) ;
1052- validateUint32 ( mode , 'mode' ) ;
1053- // Values for mode < 0 are already checked via the validateUint32 function
1054- if ( mode > 0o777 )
1055- throw new ERR_OUT_OF_RANGE ( 'mode' , undefined , mode ) ;
1058+ mode = validateAndMaskMode ( mode , 'mode' ) ;
1059+ callback = makeCallback ( callback ) ;
10561060
10571061 const req = new FSReqWrap ( ) ;
1058- req . oncomplete = makeCallback ( callback ) ;
1062+ req . oncomplete = callback ;
10591063 binding . fchmod ( fd , mode , req ) ;
10601064} ;
10611065
10621066fs . fchmodSync = function ( fd , mode ) {
1063- mode = modeNum ( mode ) ;
10641067 validateUint32 ( fd , 'fd' ) ;
1065- validateUint32 ( mode , 'mode' ) ;
1066- // Values for mode < 0 are already checked via the validateUint32 function
1067- if ( mode > 0o777 )
1068- throw new ERR_OUT_OF_RANGE ( 'mode' , undefined , mode ) ;
1068+ mode = validateAndMaskMode ( mode , 'mode' ) ;
10691069 const ctx = { } ;
10701070 binding . fchmod ( fd , mode , undefined , ctx ) ;
10711071 handleErrorFromBinding ( ctx ) ;
@@ -1106,11 +1106,10 @@ if (O_SYMLINK !== undefined) {
11061106
11071107
11081108fs . chmod = function ( path , mode , callback ) {
1109- callback = makeCallback ( callback ) ;
11101109 path = getPathFromURL ( path ) ;
11111110 validatePath ( path ) ;
1112- mode = modeNum ( mode ) ;
1113- validateUint32 ( mode , 'mode' ) ;
1111+ mode = validateAndMaskMode ( mode , 'mode' ) ;
1112+ callback = makeCallback ( callback ) ;
11141113
11151114 const req = new FSReqWrap ( ) ;
11161115 req . oncomplete = callback ;
@@ -1120,8 +1119,8 @@ fs.chmod = function(path, mode, callback) {
11201119fs . chmodSync = function ( path , mode ) {
11211120 path = getPathFromURL ( path ) ;
11221121 validatePath ( path ) ;
1123- mode = modeNum ( mode ) ;
1124- validateUint32 ( mode , 'mode' ) ;
1122+ mode = validateAndMaskMode ( mode , 'mode' ) ;
1123+
11251124 const ctx = { path } ;
11261125 binding . chmod ( pathModule . toNamespacedPath ( path ) , mode , undefined , ctx ) ;
11271126 handleErrorFromBinding ( ctx ) ;
0 commit comments