1664f4763Szrj /* $OpenBSD: atomicio.h,v 1.12 2018/12/27 03:25:25 djm Exp $ */ 218de8d7fSPeter Avalos 318de8d7fSPeter Avalos /* 418de8d7fSPeter Avalos * Copyright (c) 2006 Damien Miller. All rights reserved. 518de8d7fSPeter Avalos * Copyright (c) 1995,1999 Theo de Raadt. All rights reserved. 618de8d7fSPeter Avalos * All rights reserved. 718de8d7fSPeter Avalos * 818de8d7fSPeter Avalos * Redistribution and use in source and binary forms, with or without 918de8d7fSPeter Avalos * modification, are permitted provided that the following conditions 1018de8d7fSPeter Avalos * are met: 1118de8d7fSPeter Avalos * 1. Redistributions of source code must retain the above copyright 1218de8d7fSPeter Avalos * notice, this list of conditions and the following disclaimer. 1318de8d7fSPeter Avalos * 2. Redistributions in binary form must reproduce the above copyright 1418de8d7fSPeter Avalos * notice, this list of conditions and the following disclaimer in the 1518de8d7fSPeter Avalos * documentation and/or other materials provided with the distribution. 1618de8d7fSPeter Avalos * 1718de8d7fSPeter Avalos * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1818de8d7fSPeter Avalos * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1918de8d7fSPeter Avalos * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2018de8d7fSPeter Avalos * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2118de8d7fSPeter Avalos * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2218de8d7fSPeter Avalos * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2318de8d7fSPeter Avalos * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2418de8d7fSPeter Avalos * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2518de8d7fSPeter Avalos * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2618de8d7fSPeter Avalos * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2718de8d7fSPeter Avalos */ 2818de8d7fSPeter Avalos 2918de8d7fSPeter Avalos #ifndef _ATOMICIO_H 3018de8d7fSPeter Avalos #define _ATOMICIO_H 3118de8d7fSPeter Avalos 32664f4763Szrj struct iovec; 33664f4763Szrj 3418de8d7fSPeter Avalos /* 3518de8d7fSPeter Avalos * Ensure all of data on socket comes through. f==read || f==vwrite 3618de8d7fSPeter Avalos */ 379f304aafSPeter Avalos size_t 389f304aafSPeter Avalos atomicio6(ssize_t (*f) (int, void *, size_t), int fd, void *_s, size_t n, 399f304aafSPeter Avalos int (*cb)(void *, size_t), void *); 4018de8d7fSPeter Avalos size_t atomicio(ssize_t (*)(int, void *, size_t), int, void *, size_t); 4118de8d7fSPeter Avalos 4218de8d7fSPeter Avalos #define vwrite (ssize_t (*)(int, void *, size_t))write 4318de8d7fSPeter Avalos 4418de8d7fSPeter Avalos /* 4518de8d7fSPeter Avalos * ensure all of data on socket comes through. f==readv || f==writev 4618de8d7fSPeter Avalos */ 479f304aafSPeter Avalos size_t 489f304aafSPeter Avalos atomiciov6(ssize_t (*f) (int, const struct iovec *, int), int fd, 499f304aafSPeter Avalos const struct iovec *_iov, int iovcnt, int (*cb)(void *, size_t), void *); 5018de8d7fSPeter Avalos size_t atomiciov(ssize_t (*)(int, const struct iovec *, int), 5118de8d7fSPeter Avalos int, const struct iovec *, int); 5218de8d7fSPeter Avalos 5318de8d7fSPeter Avalos #endif /* _ATOMICIO_H */ 54