xref: /haiku/headers/private/shared/syscall_utils.h (revision 220d04022750f40f8bac8f01fa551211e28d04f2)
1 /*
2  * Copyright 2008-2011, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _SYSCALL_UTILS_H
6 #define _SYSCALL_UTILS_H
7 
8 
9 #define RETURN_AND_SET_ERRNO(err)			\
10 	do {									\
11 		__typeof(err) __result = (err);		\
12 		if (__result < 0) {					\
13 			errno = __result;				\
14 			return -1;						\
15 		}									\
16 		return __result;					\
17 	} while (0)
18 
19 #define RETURN_AND_TEST_CANCEL(err)			\
20 	do {									\
21 		__typeof(err) __result = (err);		\
22 		pthread_testcancel();				\
23 		return __result;					\
24 	} while (0)
25 
26 #define RETURN_AND_SET_ERRNO_TEST_CANCEL(err)	\
27 	do {										\
28 		__typeof(err) __result = (err);			\
29 		pthread_testcancel();					\
30 		if (__result < 0) {						\
31 			errno = __result;					\
32 			return -1;							\
33 		}										\
34 		return __result;						\
35 	} while (0)
36 
37 
38 #endif	// _SYSCALL_UTILS_H
39