@@ -65,7 +65,6 @@ const internalUtil = require('internal/util');
65
65
const {
66
66
copyObject,
67
67
getOptions,
68
- modeNum,
69
68
nullCheck,
70
69
preprocessSymlinkDestination,
71
70
Stats,
@@ -85,6 +84,7 @@ const {
85
84
} = require ( 'internal/constants' ) ;
86
85
const {
87
86
isUint32,
87
+ validateAndMaskMode,
88
88
validateInteger,
89
89
validateUint32
90
90
} = require ( 'internal/validators' ) ;
@@ -549,32 +549,36 @@ fs.closeSync = function(fd) {
549
549
handleErrorFromBinding ( ctx ) ;
550
550
} ;
551
551
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 ) {
556
553
path = getPathFromURL ( path ) ;
557
554
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
+ }
559
563
560
564
const req = new FSReqWrap ( ) ;
561
565
req . oncomplete = callback ;
562
566
563
567
binding . open ( pathModule . toNamespacedPath ( path ) ,
564
- stringToFlags ( flags ) ,
568
+ flagsNumber ,
565
569
mode ,
566
570
req ) ;
567
571
} ;
568
572
569
573
fs . openSync = function ( path , flags , mode ) {
570
- mode = modeNum ( mode , 0o666 ) ;
571
574
path = getPathFromURL ( path ) ;
572
575
validatePath ( path ) ;
573
- validateUint32 ( mode , 'mode' ) ;
576
+ const flagsNumber = stringToFlags ( flags ) ;
577
+ mode = validateAndMaskMode ( mode , 'mode' , 0o666 ) ;
574
578
575
579
const ctx = { path } ;
576
580
const result = binding . open ( pathModule . toNamespacedPath ( path ) ,
577
- stringToFlags ( flags ) , mode ,
581
+ flagsNumber , mode ,
578
582
undefined , ctx ) ;
579
583
handleErrorFromBinding ( ctx ) ;
580
584
return result ;
@@ -849,12 +853,16 @@ fs.fsyncSync = function(fd) {
849
853
} ;
850
854
851
855
fs . mkdir = function ( path , mode , callback ) {
852
- if ( typeof mode === 'function' ) callback = mode ;
853
- callback = makeCallback ( callback ) ;
854
856
path = getPathFromURL ( path ) ;
855
857
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
+ }
858
866
859
867
const req = new FSReqWrap ( ) ;
860
868
req . oncomplete = callback ;
@@ -864,8 +872,7 @@ fs.mkdir = function(path, mode, callback) {
864
872
fs . mkdirSync = function ( path , mode ) {
865
873
path = getPathFromURL ( path ) ;
866
874
validatePath ( path ) ;
867
- mode = modeNum ( mode , 0o777 ) ;
868
- validateUint32 ( mode , 'mode' ) ;
875
+ mode = validateAndMaskMode ( mode , 'mode' , 0o777 ) ;
869
876
const ctx = { path } ;
870
877
binding . mkdir ( pathModule . toNamespacedPath ( path ) , mode , undefined , ctx ) ;
871
878
handleErrorFromBinding ( ctx ) ;
@@ -1047,25 +1054,18 @@ fs.unlinkSync = function(path) {
1047
1054
} ;
1048
1055
1049
1056
fs . fchmod = function ( fd , mode , callback ) {
1050
- mode = modeNum ( mode ) ;
1051
1057
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 ) ;
1056
1060
1057
1061
const req = new FSReqWrap ( ) ;
1058
- req . oncomplete = makeCallback ( callback ) ;
1062
+ req . oncomplete = callback ;
1059
1063
binding . fchmod ( fd , mode , req ) ;
1060
1064
} ;
1061
1065
1062
1066
fs . fchmodSync = function ( fd , mode ) {
1063
- mode = modeNum ( mode ) ;
1064
1067
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' ) ;
1069
1069
const ctx = { } ;
1070
1070
binding . fchmod ( fd , mode , undefined , ctx ) ;
1071
1071
handleErrorFromBinding ( ctx ) ;
@@ -1106,11 +1106,10 @@ if (O_SYMLINK !== undefined) {
1106
1106
1107
1107
1108
1108
fs . chmod = function ( path , mode , callback ) {
1109
- callback = makeCallback ( callback ) ;
1110
1109
path = getPathFromURL ( path ) ;
1111
1110
validatePath ( path ) ;
1112
- mode = modeNum ( mode ) ;
1113
- validateUint32 ( mode , 'mode' ) ;
1111
+ mode = validateAndMaskMode ( mode , 'mode' ) ;
1112
+ callback = makeCallback ( callback ) ;
1114
1113
1115
1114
const req = new FSReqWrap ( ) ;
1116
1115
req . oncomplete = callback ;
@@ -1120,8 +1119,8 @@ fs.chmod = function(path, mode, callback) {
1120
1119
fs . chmodSync = function ( path , mode ) {
1121
1120
path = getPathFromURL ( path ) ;
1122
1121
validatePath ( path ) ;
1123
- mode = modeNum ( mode ) ;
1124
- validateUint32 ( mode , 'mode' ) ;
1122
+ mode = validateAndMaskMode ( mode , 'mode' ) ;
1123
+
1125
1124
const ctx = { path } ;
1126
1125
binding . chmod ( pathModule . toNamespacedPath ( path ) , mode , undefined , ctx ) ;
1127
1126
handleErrorFromBinding ( ctx ) ;
0 commit comments