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