1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // commands for handling umask
- var util = require("util")
- var log = require("npmlog")
- var defaultUmask = 0022
- var defaultUmaskString = toString(defaultUmask)
- exports.toString = toString
- exports.fromString = fromString
- exports.validate = validate
- function toString(val) {
- val = val.toString(8)
- while (val.length < 4) val = "0" + val
- return val
- }
- function validate (data, k, val) {
- // must be either an integer or an octal string.
- if (typeof val === "number") {
- data[k] = val
- return true
- }
- if (typeof val === "string") {
- if (val.charAt(0) !== "0" || isNaN(val)) return false
- data[k] = parseInt(val, 8)
- return true
- }
- return false
- }
- function fromString(val, cb) {
- // synchronous callback, no zalgo
- _fromString(val, cb || function (err, result) {
- if (err) log.warn("invalid umask", err.message)
- val = result
- })
- return val
- }
- function _fromString(val, cb) {
- if(typeof val === "string") {
- if (!/^[0-7]+$/.test(val)) {
- return cb(new Error(util.format("Expected octal string, got %j, defaulting to %j",
- val, defaultUmaskString)),
- defaultUmask)
- }
- val = parseInt(val, 8)
- } else if(typeof val !== "number") {
- return cb(new Error(util.format("Expected number or octal string, got %j, defaulting to %j",
- val, defaultUmaskString)),
- defaultUmask)
- }
- if ((val < 0) || (val > 511)) {
- return cb(new Error(util.format("Must be in range 0..511 (0000..0777), got %j", val)),
- defaultUmask)
- }
- cb(null, val)
- }
|