eintr_wrapper.h revision c7f5f8508d98d5952d42ed7648c2a8f30a4da156
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
13#include "build/build_config.h"
14
15#if defined(OS_POSIX)
16
17#include <errno.h>
18
19#define HANDLE_EINTR(x) ({ \
20  typeof(x) __eintr_result__; \
21  do { \
22    __eintr_result__ = x; \
23  } while (__eintr_result__ == -1 && errno == EINTR); \
24  __eintr_result__;\
25})
26
27#else
28
29#define HANDLE_EINTR(x) x
30
31#endif  // OS_POSIX
32
33#endif  // BASE_EINTR_WRAPPER_H_
34