// 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) }