| ... | @@ -1275,6 +1275,16 @@ pub const OpenError = error{ | ... | @@ -1275,6 +1275,16 @@ pub const OpenError = error{ |
| 1275 | BadPathName, | 1275 | BadPathName, |
| 1276 | InvalidUtf8, | 1276 | InvalidUtf8, |
| 1277 | | 1277 | |
| | 1278 | /// One of these three things: |
| | 1279 | /// * pathname refers to an executable image which is currently being |
| | 1280 | /// executed and write access was requested. |
| | 1281 | /// * pathname refers to a file that is currently in use as a swap |
| | 1282 | /// file, and the O_TRUNC flag was specified. |
| | 1283 | /// * pathname refers to a file that is currently being read by the |
| | 1284 | /// kernel (e.g., for module/firmware loading), and write access was |
| | 1285 | /// requested. |
| | 1286 | FileBusy, |
| | 1287 | |
| 1278 | WouldBlock, | 1288 | WouldBlock, |
| 1279 | } || UnexpectedError; | 1289 | } || UnexpectedError; |
| 1280 | | 1290 | |
| ... | @@ -1468,6 +1478,7 @@ pub fn openatZ(dir_fd: fd_t, file_path: [*:0]const u8, flags: u32, mode: mode_t) | ... | @@ -1468,6 +1478,7 @@ pub fn openatZ(dir_fd: fd_t, file_path: [*:0]const u8, flags: u32, mode: mode_t) |
| 1468 | .BUSY => return error.DeviceBusy, | 1478 | .BUSY => return error.DeviceBusy, |
| 1469 | .OPNOTSUPP => return error.FileLocksNotSupported, | 1479 | .OPNOTSUPP => return error.FileLocksNotSupported, |
| 1470 | .AGAIN => return error.WouldBlock, | 1480 | .AGAIN => return error.WouldBlock, |
| | 1481 | .TXTBSY => return error.FileBusy, |
| 1471 | else => |err| return unexpectedErrno(err), | 1482 | else => |err| return unexpectedErrno(err), |
| 1472 | } | 1483 | } |
| 1473 | } | 1484 | } |
| ... | @@ -4577,7 +4588,8 @@ pub const FlockError = error{ | ... | @@ -4577,7 +4588,8 @@ pub const FlockError = error{ |
| 4577 | FileLocksNotSupported, | 4588 | FileLocksNotSupported, |
| 4578 | } || UnexpectedError; | 4589 | } || UnexpectedError; |
| 4579 | | 4590 | |
| 4580 | /// Depending on the operating system `flock` may or may not interact with `fcntl` locks made by other processes. | 4591 | /// Depending on the operating system `flock` may or may not interact with |
| | 4592 | /// `fcntl` locks made by other processes. |
| 4581 | pub fn flock(fd: fd_t, operation: i32) FlockError!void { | 4593 | pub fn flock(fd: fd_t, operation: i32) FlockError!void { |
| 4582 | while (true) { | 4594 | while (true) { |
| 4583 | const rc = system.flock(fd, operation); | 4595 | const rc = system.flock(fd, operation); |
| ... | @@ -4650,6 +4662,7 @@ pub fn realpathZ(pathname: [*:0]const u8, out_buffer: *[MAX_PATH_BYTES]u8) RealP | ... | @@ -4650,6 +4662,7 @@ pub fn realpathZ(pathname: [*:0]const u8, out_buffer: *[MAX_PATH_BYTES]u8) RealP |
| 4650 | const fd = openZ(pathname, flags, 0) catch |err| switch (err) { | 4662 | const fd = openZ(pathname, flags, 0) catch |err| switch (err) { |
| 4651 | error.FileLocksNotSupported => unreachable, | 4663 | error.FileLocksNotSupported => unreachable, |
| 4652 | error.WouldBlock => unreachable, | 4664 | error.WouldBlock => unreachable, |
| | 4665 | error.FileBusy => unreachable, // not asking for write permissions |
| 4653 | else => |e| return e, | 4666 | else => |e| return e, |
| 4654 | }; | 4667 | }; |
| 4655 | defer close(fd); | 4668 | defer close(fd); |