1#include <errno.h> 2#include <limits.h> 3#include <unistd.h> 4 5long fpathconf(int fd, int name) { 6 static const short values[] = {[_PC_LINK_MAX] = _POSIX_LINK_MAX, 7 [_PC_MAX_CANON] = _POSIX_MAX_CANON, 8 [_PC_MAX_INPUT] = _POSIX_MAX_INPUT, 9 [_PC_NAME_MAX] = NAME_MAX, 10 [_PC_PATH_MAX] = PATH_MAX, 11 [_PC_PIPE_BUF] = PIPE_BUF, 12 [_PC_CHOWN_RESTRICTED] = 1, 13 [_PC_NO_TRUNC] = 1, 14 [_PC_VDISABLE] = 0, 15 [_PC_SYNC_IO] = 1, 16 [_PC_ASYNC_IO] = -1, 17 [_PC_PRIO_IO] = -1, 18 [_PC_SOCK_MAXBUF] = -1, 19 [_PC_FILESIZEBITS] = FILESIZEBITS, 20 [_PC_REC_INCR_XFER_SIZE] = 4096, 21 [_PC_REC_MAX_XFER_SIZE] = 4096, 22 [_PC_REC_MIN_XFER_SIZE] = 4096, 23 [_PC_REC_XFER_ALIGN] = 4096, 24 [_PC_ALLOC_SIZE_MIN] = 4096, 25 [_PC_SYMLINK_MAX] = SYMLINK_MAX, 26 [_PC_2_SYMLINKS] = 1}; 27 if (name < 0 || (size_t)name >= sizeof(values) / sizeof(values[0])) { 28 errno = EINVAL; 29 return -1; 30 } 31 return values[name]; 32} 33