MCPcopy Index your code
hub / github.com/RustPython/RustPython / compute_mode

Function compute_mode

crates/vm/src/stdlib/_io.rs:5368–5440  ·  view source on GitHub ↗
(mode_str: &str)

Source from the content-addressed store, hash-verified

5366 }
5367
5368 fn compute_mode(mode_str: &str) -> Result<(Mode, i32), ModeError> {
5369 let mut flags = 0;
5370 let mut plus = false;
5371 let mut rwa = false;
5372 let mut mode = Mode::empty();
5373 for c in mode_str.bytes() {
5374 match c {
5375 b'x' => {
5376 if rwa {
5377 return Err(ModeError::BadRwa);
5378 }
5379 rwa = true;
5380 mode.insert(Mode::WRITABLE | Mode::CREATED);
5381 flags |= libc::O_EXCL | libc::O_CREAT;
5382 }
5383 b'r' => {
5384 if rwa {
5385 return Err(ModeError::BadRwa);
5386 }
5387 rwa = true;
5388 mode.insert(Mode::READABLE);
5389 }
5390 b'w' => {
5391 if rwa {
5392 return Err(ModeError::BadRwa);
5393 }
5394 rwa = true;
5395 mode.insert(Mode::WRITABLE);
5396 flags |= libc::O_CREAT | libc::O_TRUNC;
5397 }
5398 b'a' => {
5399 if rwa {
5400 return Err(ModeError::BadRwa);
5401 }
5402 rwa = true;
5403 mode.insert(Mode::WRITABLE | Mode::APPENDING);
5404 flags |= libc::O_APPEND | libc::O_CREAT;
5405 }
5406 b'+' => {
5407 if plus {
5408 return Err(ModeError::BadRwa);
5409 }
5410 plus = true;
5411 mode.insert(Mode::READABLE | Mode::WRITABLE);
5412 }
5413 b'b' => {}
5414 _ => return Err(ModeError::Invalid),
5415 }
5416 }
5417
5418 if !rwa {
5419 return Err(ModeError::BadRwa);
5420 }
5421
5422 if mode.contains(Mode::READABLE | Mode::WRITABLE) {
5423 flags |= libc::O_RDWR
5424 } else if mode.contains(Mode::READABLE) {
5425 flags |= libc::O_RDONLY

Callers 1

initMethod · 0.85

Calls 4

ErrClass · 0.50
bytesMethod · 0.45
insertMethod · 0.45
containsMethod · 0.45

Tested by

no test coverage detected