1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This provides a wrapper around system calls which may be interrupted by a 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// signal and return EINTR. See man 7 signal. 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// On Windows, this wrapper macro does nothing. 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef BASE_EINTR_WRAPPER_H_ 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define BASE_EINTR_WRAPPER_H_ 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "build/build_config.h" 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if defined(OS_POSIX) 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <errno.h> 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define HANDLE_EINTR(x) ({ \ 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott typeof(x) __eintr_result__; \ 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott do { \ 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott __eintr_result__ = x; \ 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } while (__eintr_result__ == -1 && errno == EINTR); \ 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott __eintr_result__;\ 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}) 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#else 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define HANDLE_EINTR(x) x 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // OS_POSIX 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // BASE_EINTR_WRAPPER_H_ 35