1*aed3e508SAndroid Build Coastguard Worker // Copyright 2014 The ChromiumOS Authors 2*aed3e508SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*aed3e508SAndroid Build Coastguard Worker // found in the LICENSE file. 4*aed3e508SAndroid Build Coastguard Worker 5*aed3e508SAndroid Build Coastguard Worker // This provides a wrapper around system calls which may be interrupted by a 6*aed3e508SAndroid Build Coastguard Worker // signal and return EINTR. See man 7 signal. 7*aed3e508SAndroid Build Coastguard Worker 8*aed3e508SAndroid Build Coastguard Worker #ifndef GESTURES_EINTR_WRAPPER_H_ 9*aed3e508SAndroid Build Coastguard Worker #define GESTURES_EINTR_WRAPPER_H_ 10*aed3e508SAndroid Build Coastguard Worker 11*aed3e508SAndroid Build Coastguard Worker #include <errno.h> 12*aed3e508SAndroid Build Coastguard Worker 13*aed3e508SAndroid Build Coastguard Worker #define HANDLE_EINTR(x) ({ \ 14*aed3e508SAndroid Build Coastguard Worker decltype(x) eintr_wrapper_result; \ 15*aed3e508SAndroid Build Coastguard Worker do { \ 16*aed3e508SAndroid Build Coastguard Worker eintr_wrapper_result = (x); \ 17*aed3e508SAndroid Build Coastguard Worker } while (eintr_wrapper_result == -1 && errno == EINTR); \ 18*aed3e508SAndroid Build Coastguard Worker eintr_wrapper_result; \ 19*aed3e508SAndroid Build Coastguard Worker }) 20*aed3e508SAndroid Build Coastguard Worker 21*aed3e508SAndroid Build Coastguard Worker #define IGNORE_EINTR(x) ({ \ 22*aed3e508SAndroid Build Coastguard Worker decltype(x) eintr_wrapper_result; \ 23*aed3e508SAndroid Build Coastguard Worker do { \ 24*aed3e508SAndroid Build Coastguard Worker eintr_wrapper_result = (x); \ 25*aed3e508SAndroid Build Coastguard Worker if (eintr_wrapper_result == -1 && errno == EINTR) { \ 26*aed3e508SAndroid Build Coastguard Worker eintr_wrapper_result = 0; \ 27*aed3e508SAndroid Build Coastguard Worker } \ 28*aed3e508SAndroid Build Coastguard Worker } while (0); \ 29*aed3e508SAndroid Build Coastguard Worker eintr_wrapper_result; \ 30*aed3e508SAndroid Build Coastguard Worker }) 31*aed3e508SAndroid Build Coastguard Worker 32*aed3e508SAndroid Build Coastguard Worker #endif // GESTURES_EINTR_WRAPPER_H_ 33