| 13 |
13 |
| 14 #include <libtu/misc.h> |
14 #include <libtu/misc.h> |
| 15 #include <libtu/output.h> |
15 #include <libtu/output.h> |
| 16 #include <libtu/util.h> |
16 #include <libtu/util.h> |
| 17 |
17 |
| |
18 #ifndef HAS_SYSTEM_ASPRINTF |
| |
19 #define NEED_ASPRINTF |
| |
20 #define NEED_VASPRINTF |
| |
21 #include "../snprintf_2.2/snprintf.h" |
| |
22 #endif |
| |
23 |
| 18 |
24 |
| 19 /* verbose |
25 /* verbose |
| 20 */ |
26 */ |
| 21 |
27 |
| 22 static bool verbose_mode=FALSE; |
28 static bool verbose_mode=FALSE; |
| 94 |
100 |
| 95 fprintf(stderr, "%s: ", (char*)progname); |
101 fprintf(stderr, "%s: ", (char*)progname); |
| 96 } |
102 } |
| 97 |
103 |
| 98 |
104 |
| |
105 #define CALL_V(NAME, ARGS) \ |
| |
106 va_list args; va_start(args, p); NAME ARGS; va_end(args); |
| |
107 #define CALL_V_RET(NAME, ARGS) \ |
| |
108 char *ret; va_list args; va_start(args, p); ret=NAME ARGS; va_end(args); return ret; |
| |
109 |
| 99 void warn(const char *p, ...) |
110 void warn(const char *p, ...) |
| 100 { |
111 { |
| 101 va_list args; |
112 CALL_V(warn_v, (p, args)); |
| 102 |
113 } |
| 103 va_start(args, p); |
114 |
| 104 |
115 |
| 105 warn_v(p, args); |
116 char* errmsg(const char *p, ...) |
| 106 |
117 { |
| 107 va_end(args); |
118 CALL_V_RET(errmsg_v, (p, args)); |
| |
119 } |
| |
120 |
| |
121 |
| |
122 void warn_obj(const char *obj, const char *p, ...) |
| |
123 { |
| |
124 CALL_V(warn_obj_v, (obj, p, args)); |
| |
125 } |
| |
126 |
| |
127 |
| |
128 char *errmsg_obj(const char *obj, const char *p, ...) |
| |
129 { |
| |
130 CALL_V_RET(errmsg_obj_v, (obj, p, args)); |
| |
131 } |
| |
132 |
| |
133 |
| |
134 void warn_obj_line(const char *obj, int line, const char *p, ...) |
| |
135 { |
| |
136 CALL_V(warn_obj_line_v, (obj, line, p, args)); |
| |
137 } |
| |
138 |
| |
139 |
| |
140 char *errmsg_obj_line(const char *obj, int line, const char *p, ...) |
| |
141 { |
| |
142 CALL_V_RET(errmsg_obj_line_v, (obj, line, p, args)); |
| |
143 } |
| |
144 |
| |
145 |
| |
146 void warn_obj_v(const char *obj, const char *p, va_list args) |
| |
147 { |
| |
148 warn_obj_line_v(obj, -1, p, args); |
| |
149 } |
| |
150 |
| |
151 |
| |
152 char* errmsg_obj_v(const char *obj, const char *p, va_list args) |
| |
153 { |
| |
154 return errmsg_obj_line_v(obj, -1, p, args); |
| 108 } |
155 } |
| 109 |
156 |
| 110 |
157 |
| 111 void warn_v(const char *p, va_list args) |
158 void warn_v(const char *p, va_list args) |
| 112 { |
159 { |
| 114 vfprintf(stderr, p, args); |
161 vfprintf(stderr, p, args); |
| 115 putc('\n', stderr); |
162 putc('\n', stderr); |
| 116 } |
163 } |
| 117 |
164 |
| 118 |
165 |
| 119 void warn_obj(const char *obj, const char *p, ...) |
166 char *errmsg_v(const char *p, va_list args) |
| 120 { |
167 { |
| 121 va_list args; |
168 char *res; |
| 122 |
169 vasprintf(&res, p, args); |
| 123 va_start(args, p); |
170 return res; |
| 124 |
|
| 125 warn_obj_v(obj, p, args); |
|
| 126 |
|
| 127 va_end(args); |
|
| 128 } |
|
| 129 |
|
| 130 |
|
| 131 void warn_obj_line(const char *obj, int line, const char *p, ...) |
|
| 132 { |
|
| 133 va_list args; |
|
| 134 |
|
| 135 va_start(args, p); |
|
| 136 |
|
| 137 warn_obj_line_v(obj, line, p, args); |
|
| 138 |
|
| 139 va_end(args); |
|
| 140 } |
|
| 141 |
|
| 142 |
|
| 143 void warn_obj_v(const char *obj, const char *p, va_list args) |
|
| 144 { |
|
| 145 put_prog_name(); |
|
| 146 if(obj!=NULL) |
|
| 147 fprintf(stderr,"%s: ", obj); |
|
| 148 vfprintf(stderr, p, args); |
|
| 149 putc('\n', stderr); |
|
| 150 } |
171 } |
| 151 |
172 |
| 152 |
173 |
| 153 void warn_obj_line_v(const char *obj, int line, const char *p, va_list args) |
174 void warn_obj_line_v(const char *obj, int line, const char *p, va_list args) |
| 154 { |
175 { |
| 165 vfprintf(stderr, p, args); |
186 vfprintf(stderr, p, args); |
| 166 putc('\n', stderr); |
187 putc('\n', stderr); |
| 167 } |
188 } |
| 168 |
189 |
| 169 |
190 |
| |
191 char *errmsg_obj_line_v(const char *obj, int line, const char *p, va_list args) |
| |
192 { |
| |
193 char *res1=NULL, *res2, *res3; |
| |
194 if(obj!=NULL){ |
| |
195 if(line>0) |
| |
196 asprintf(&res1, TR("%s:%d: "), obj, line); |
| |
197 else |
| |
198 asprintf(&res1, "%s: ", obj); |
| |
199 }else{ |
| |
200 if(line>0) |
| |
201 asprintf(&res1, TR("%d: "), line); |
| |
202 } |
| |
203 asprintf(&res2, p, args); |
| |
204 if(res1!=NULL){ |
| |
205 if(res2==NULL) |
| |
206 return NULL; |
| |
207 res3=scat(res1, res2); |
| |
208 free(res1); |
| |
209 free(res2); |
| |
210 return res3; |
| |
211 } |
| |
212 return res2; |
| |
213 } |
| |
214 |
| |
215 |
| 170 void warn_err() |
216 void warn_err() |
| 171 { |
217 { |
| 172 put_prog_name(); |
218 put_prog_name(); |
| 173 fprintf(stderr, "%s\n", strerror(errno)); |
219 fprintf(stderr, "%s\n", strerror(errno)); |
| |
220 } |
| |
221 |
| |
222 |
| |
223 char *errmsg_err() |
| |
224 { |
| |
225 char *res; |
| |
226 asprintf(&res, "%s\n", strerror(errno)); |
| |
227 return res; |
| 174 } |
228 } |
| 175 |
229 |
| 176 |
230 |
| 177 void warn_err_obj(const char *obj) |
231 void warn_err_obj(const char *obj) |
| 178 { |
232 { |
| 179 put_prog_name(); |
233 put_prog_name(); |
| 180 if(obj!=NULL) |
234 if(obj!=NULL) |
| 181 fprintf(stderr, "%s: %s\n", obj, strerror(errno)); |
235 fprintf(stderr, "%s: %s\n", obj, strerror(errno)); |
| 182 else |
236 else |
| 183 fprintf(stderr, "%s\n", strerror(errno)); |
237 fprintf(stderr, "%s\n", strerror(errno)); |
| 184 |
238 } |
| |
239 |
| |
240 |
| |
241 char *errmsg_err_obj(const char *obj) |
| |
242 { |
| |
243 char *res; |
| |
244 if(obj!=NULL) |
| |
245 asprintf(&res, "%s: %s\n", obj, strerror(errno)); |
| |
246 else |
| |
247 asprintf(&res, "%s\n", strerror(errno)); |
| |
248 return res; |
| 185 } |
249 } |
| 186 |
250 |
| 187 |
251 |
| 188 void warn_err_obj_line(const char *obj, int line) |
252 void warn_err_obj_line(const char *obj, int line) |
| 189 { |
253 { |
| 201 } |
265 } |
| 202 |
266 |
| 203 } |
267 } |
| 204 |
268 |
| 205 |
269 |
| |
270 char *errmsg_err_obj_line(const char *obj, int line) |
| |
271 { |
| |
272 char *res; |
| |
273 if(obj!=NULL){ |
| |
274 if(line>0) |
| |
275 asprintf(&res, TR("%s:%d: %s\n"), obj, line, strerror(errno)); |
| |
276 else |
| |
277 asprintf(&res, "%s: %s\n", obj, strerror(errno)); |
| |
278 }else{ |
| |
279 if(line>0) |
| |
280 asprintf(&res, TR("%d: %s\n"), line, strerror(errno)); |
| |
281 else |
| |
282 asprintf(&res, TR("%s\n"), strerror(errno)); |
| |
283 } |
| |
284 return res; |
| |
285 } |
| |
286 |
| |
287 |
| 206 /* die |
288 /* die |
| 207 */ |
289 */ |
| 208 |
290 |
| 209 void die(const char *p, ...) |
291 void die(const char *p, ...) |
| 210 { |
292 { |
| 211 va_list args; |
293 CALL_V(die_v, (p, args)); |
| 212 |
|
| 213 va_start(args, p); |
|
| 214 |
|
| 215 die_v(p, args); |
|
| 216 |
|
| 217 va_end(args); |
|
| 218 } |
294 } |
| 219 |
295 |
| 220 |
296 |
| 221 void die_v(const char *p, va_list args) |
297 void die_v(const char *p, va_list args) |
| 222 { |
298 { |
| 225 } |
301 } |
| 226 |
302 |
| 227 |
303 |
| 228 void die_obj(const char *obj, const char *p, ...) |
304 void die_obj(const char *obj, const char *p, ...) |
| 229 { |
305 { |
| 230 va_list args; |
306 CALL_V(die_obj_v, (obj, p, args)); |
| 231 |
|
| 232 va_start(args, p); |
|
| 233 die_obj_v(obj, p, args); |
|
| 234 va_end(args); |
|
| 235 } |
307 } |
| 236 |
308 |
| 237 |
309 |
| 238 void die_obj_line(const char *obj, int line, const char *p, ...) |
310 void die_obj_line(const char *obj, int line, const char *p, ...) |
| 239 { |
311 { |
| 240 va_list args; |
312 CALL_V(die_obj_line_v, (obj, line, p, args)); |
| 241 |
|
| 242 va_start(args, p); |
|
| 243 die_obj_line_v(obj, line, p, args); |
|
| 244 va_end(args); |
|
| 245 } |
313 } |
| 246 |
314 |
| 247 |
315 |
| 248 void die_obj_v(const char *obj, const char *p, va_list args) |
316 void die_obj_v(const char *obj, const char *p, va_list args) |
| 249 { |
317 { |