netatalk
4.4.0dev
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
errchk.h
Go to the documentation of this file.
1
/*
2
Copyright (c) 2010 Frank Lahm <
[email protected]
>
3
4
This program is free software; you can redistribute it and/or modify
5
it under the terms of the GNU General Public License as published by
6
the Free Software Foundation; either version 2 of the License, or
7
(at your option) any later version.
8
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
GNU General Public License for more details.
13
*/
14
15
#ifndef ERRCHECK_H
16
#define ERRCHECK_H
17
18
#define EC_INIT int ret = 0
19
#define EC_STATUS(a) ret = (a)
20
#define EC_EXIT_STATUS(a) do { ret = (a); goto cleanup; } while (0)
21
#define EC_FAIL do { ret = -1; goto cleanup; } while (0)
22
#define EC_FAIL_LOG(...) \
23
do { \
24
LOG(log_error, logtype_default, __VA_ARGS__); \
25
ret = -1; \
26
goto cleanup; \
27
} while (0)
28
#define EC_CLEANUP cleanup
29
#define EC_EXIT return ret
30
31
/*
32
* Check out doc/DEVELOPER for more infos.
33
*
34
* We have these macros:
35
* EC_ZERO, EC_ZERO_LOG, EC_ZERO_LOGSTR, EC_ZERO_LOG_ERR, EC_ZERO_CUSTOM
36
* EC_NEG1, EC_NEG1_LOG, EC_NEG1_LOGSTR, EC_NEG1_LOG_ERR, EC_NEG1_CUSTOM
37
* EC_NULL, EC_NULL_LOG, EC_NULL_LOGSTR, EC_NULL_LOG_ERR, EC_NULL_CUSTOM
38
*
39
* A boileplate function template is:
40
41
int func(void)
42
{
43
EC_INIT;
44
45
...your code here...
46
47
EC_STATUS(0);
48
49
EC_CLEANUP:
50
EC_EXIT;
51
}
52
*/
53
54
/* check for return val 0 which is ok, every other is an error, prints errno */
55
#define EC_ZERO_LOG(a) \
56
do { \
57
if ((a) != 0) { \
58
LOG(log_error, logtype_default, "%s failed: %s", #a, strerror(errno)); \
59
ret = -1; \
60
goto cleanup; \
61
} \
62
} while (0)
63
64
#define EC_ZERO_LOGSTR(a, b, ...) \
65
do { \
66
if ((a) != 0) { \
67
LOG(log_error, logtype_default, b, __VA_ARGS__); \
68
ret = -1; \
69
goto cleanup; \
70
} \
71
} while (0)
72
73
#define EC_ZERO_LOG_ERR(a, b) \
74
do { \
75
if ((a) != 0) { \
76
LOG(log_error, logtype_default, "%s failed: %s", #a, strerror(errno)); \
77
ret = (b); \
78
goto cleanup; \
79
} \
80
} while (0)
81
82
#define EC_ZERO(a) \
83
do { \
84
if ((a) != 0) { \
85
ret = -1; \
86
goto cleanup; \
87
} \
88
} while (0)
89
90
#define EC_ZERO_ERR(a,b ) \
91
do { \
92
if ((a) != 0) { \
93
ret = b; \
94
goto cleanup; \
95
} \
96
} while (0)
97
98
/* check for return val 0 which is ok, every other is an error, prints errno */
99
#define EC_NEG1_LOG(a) \
100
do { \
101
if ((a) == -1) { \
102
LOG(log_error, logtype_default, "%s failed: %s", #a, strerror(errno)); \
103
ret = -1; \
104
goto cleanup; \
105
} \
106
} while (0)
107
108
#define EC_NEG1_LOGSTR(a, b, ...) \
109
do { \
110
if ((a) == -1) { \
111
LOG(log_error, logtype_default, b, __VA_ARGS__); \
112
ret = -1; \
113
goto cleanup; \
114
} \
115
} while (0)
116
117
#define EC_NEG1_LOG_ERR(a, b) \
118
do { \
119
if ((a) == -1) { \
120
LOG(log_error, logtype_default, "%s failed: %s", #a, strerror(errno)); \
121
ret = b; \
122
goto cleanup; \
123
} \
124
} while (0)
125
126
#define EC_NEG1(a) \
127
do { \
128
if ((a) == -1) { \
129
ret = -1; \
130
goto cleanup; \
131
} \
132
} while (0)
133
134
/* check for return val != NULL, prints errno */
135
#define EC_NULL_LOG(a) \
136
do { \
137
if ((a) == NULL) { \
138
LOG(log_error, logtype_default, "%s failed: %s", #a, strerror(errno)); \
139
ret = -1; \
140
goto cleanup; \
141
} \
142
} while (0)
143
144
#define EC_NULL_LOGSTR(a, b, ...) \
145
do { \
146
if ((a) == NULL) { \
147
LOG(log_error, logtype_default, b , __VA_ARGS__); \
148
ret = -1; \
149
goto cleanup; \
150
} \
151
} while (0)
152
153
#define EC_NULL_LOG_ERR(a, b) \
154
do { \
155
if ((a) == NULL) { \
156
LOG(log_error, logtype_default, "%s failed: %s", #a, strerror(errno)); \
157
ret = b; \
158
goto cleanup; \
159
} \
160
} while (0)
161
162
#define EC_NULL(a) \
163
do { \
164
if ((a) == NULL) { \
165
ret = -1; \
166
goto cleanup; \
167
} \
168
} while (0)
169
170
#endif
/* ERRCHECK_H */
include
atalk
errchk.h
Generated by
1.14.0