| ... | @@ -6926,3 +6926,52 @@ pub fn perf_event_open( | ... | @@ -6926,3 +6926,52 @@ pub fn perf_event_open( |
| 6926 | else => |err| return unexpectedErrno(err), | 6926 | else => |err| return unexpectedErrno(err), |
| 6927 | } | 6927 | } |
| 6928 | } | 6928 | } |
| | 6929 | |
| | 6930 | pub const TimerFdCreateError = error{ |
| | 6931 | AccessDenied, |
| | 6932 | ProcessFdQuotaExceeded, |
| | 6933 | SystemFdQuotaExceeded, |
| | 6934 | NoDevice, |
| | 6935 | SystemResources, |
| | 6936 | } || UnexpectedError; |
| | 6937 | |
| | 6938 | pub const TimerFdGetError = error{InvalidHandle} || UnexpectedError; |
| | 6939 | pub const TimerFdSetError = TimerFdGetError || error{Canceled}; |
| | 6940 | |
| | 6941 | pub fn timerfd_create(clokid: i32, flags: u32) TimerFdCreateError!fd_t { |
| | 6942 | var rc = linux.timerfd_create(clokid, flags); |
| | 6943 | return switch (errno(rc)) { |
| | 6944 | .SUCCESS => @intCast(fd_t, rc), |
| | 6945 | .INVAL => unreachable, |
| | 6946 | .MFILE => return error.ProcessFdQuotaExceeded, |
| | 6947 | .NFILE => return error.SystemFdQuotaExceeded, |
| | 6948 | .NODEV => return error.NoDevice, |
| | 6949 | .NOMEM => return error.SystemResources, |
| | 6950 | .PERM => return error.AccessDenied, |
| | 6951 | else => |err| return unexpectedErrno(err), |
| | 6952 | }; |
| | 6953 | } |
| | 6954 | |
| | 6955 | pub fn timerfd_settime(fd: i32, flags: u32, new_value: *const linux.itimerspec, old_value: ?*linux.itimerspec) TimerFdSetError!void { |
| | 6956 | var rc = linux.timerfd_settime(fd, flags, new_value, old_value); |
| | 6957 | return switch (errno(rc)) { |
| | 6958 | .SUCCESS => {}, |
| | 6959 | .BADF => error.InvalidHandle, |
| | 6960 | .FAULT => unreachable, |
| | 6961 | .INVAL => unreachable, |
| | 6962 | .CANCELED => error.Canceled, |
| | 6963 | else => |err| return unexpectedErrno(err), |
| | 6964 | }; |
| | 6965 | } |
| | 6966 | |
| | 6967 | pub fn timerfd_gettime(fd: i32) TimerFdGetError!linux.itimerspec { |
| | 6968 | var curr_value: linux.itimerspec = undefined; |
| | 6969 | var rc = linux.timerfd_gettime(fd, &curr_value); |
| | 6970 | return switch (errno(rc)) { |
| | 6971 | .SUCCESS => return curr_value, |
| | 6972 | .BADF => error.InvalidHandle, |
| | 6973 | .FAULT => unreachable, |
| | 6974 | .INVAL => unreachable, |
| | 6975 | else => |err| return unexpectedErrno(err), |
| | 6976 | }; |
| | 6977 | } |