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