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