///|
/// Parse an octal permission mode, allowing the existing 0o/0O prefix.
fn parse_octal_mode(text : String) -> Int32 raise {
let digits = if text.has_prefix("0o") || text.has_prefix("0O") {
text[2:]
} else {
text[:]
}
if digits.is_empty() {
fail("empty mode")
}
let mut value = 0
for digit in digits {
if !(digit is ('0'..<='7')) {
fail("invalid mode")
}
value = value * 8 + digit.to_int() - '0'.to_int()
if value > 0o7777 {
fail("mode out of range")
}
}
value
}