limb 0.2.0

2024-01-09

sanitize_read(3)
limb manual
sanitize_read(3)

NAME

sanitize_read, unsanitize_read - (un)sanitize return code from standard I/O functions

SYNOPSIS

#include <limb/allreadwrite.h>
ssize_t sanitize_read(ssize_t r)
ssize_t unsanitize_read(ssize_t r)

DESCRIPTION

Standard I/O functions (such as read(3) or its safe wrapper fd_read(3)) return -1 on error and 0 when reaching end-of-file.

A lack of data available when attempting to read in non-blocking mode is treated as an error (EWOULDBLOCK). However, it is sometimes preferable to handle EOF as the exception and EWOULDBLOCK as a normal condition, whilst waiting for data to become available.

The sanitize_read() function aims to "correct" this by turning a value of -1 with EWOULDBLOCK or EAGAIN into a 0 (as no data was read), whilst turning a value of 0 into -1 with EPIPE to indicate end-of-file.

Note

Standard system reading functions never set errno to EPIPE making it thusly a proper candidate for such a case.

The unsanitize_read() function does the reverse of sanitize_read().

RETURN VALUE

The sanitize_read() returns 0 and sets errno to 0 if r is -1 and errno is set to EWOULDBLOCK or EAGAIN; It returns -1 and sets errno to EPIPE if r if 0; Otherwise it returns r leaving errno unchanged.

The unsanitize_read() returns 0 and sets errno to 0 if r is -1 and errno is set to EPIPE; It returns -1 and sets errno to EWOULDBLOCK if r is 0; Otherwise it returns r leaving errno unchanged.

limb 0.1.0
2023-07-24
sanitize_read(3)