22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik/*
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik Authors:
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik Jan Cholasta <jcholast@redhat.com>
6ef7f6e81e2789d90e649bdf949836bd342559a7Abhishek Singh
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik Copyright (C) 2012 Red Hat
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik This program is free software; you can redistribute it and/or modify
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik it under the terms of the GNU General Public License as published by
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik the Free Software Foundation; either version 3 of the License, or
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik (at your option) any later version.
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik This program is distributed in the hope that it will be useful,
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik but WITHOUT ANY WARRANTY; without even the implied warranty of
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik GNU General Public License for more details.
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik You should have received a copy of the GNU General Public License
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik along with this program. If not, see <http://www.gnu.org/licenses/>.
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik*/
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik#ifndef __SSSD_ATOMIC_IO_H__
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik#define __SSSD_ATOMIC_IO_H__
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik#include <unistd.h>
73d33c230d20ec645c661884ec06c955611e8abdJakub Hrozek#include <stdbool.h>
73d33c230d20ec645c661884ec06c955611e8abdJakub Hrozek#include <poll.h>
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik#include <errno.h>
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik
3a4186ae40d0c3b7be46a4c973166f6048fcfe38Lukas Slebodnik/* Performs a read or write operation in an manner that is seemingly atomic
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik * to the caller.
3a4186ae40d0c3b7be46a4c973166f6048fcfe38Lukas Slebodnik *
3a4186ae40d0c3b7be46a4c973166f6048fcfe38Lukas Slebodnik * Please note that the function does not perform any asynchronous operation
3a4186ae40d0c3b7be46a4c973166f6048fcfe38Lukas Slebodnik * so the operation might potentially block
3a4186ae40d0c3b7be46a4c973166f6048fcfe38Lukas Slebodnik */
3a4186ae40d0c3b7be46a4c973166f6048fcfe38Lukas Slebodnikssize_t sss_atomic_io_s(int fd, void *buf, size_t n, bool do_read);
3a4186ae40d0c3b7be46a4c973166f6048fcfe38Lukas Slebodnik
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik#define sss_atomic_read_s(fd, buf, n) sss_atomic_io_s(fd, buf, n, true)
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik#define sss_atomic_write_s(fd, buf, n) sss_atomic_io_s(fd, buf, n, false)
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik#endif /* __SSSD_ATOMIC_IO_H__ */
22d381367c27910fe82f476a76b9f4ede555e35aLukas Slebodnik