common.h
changeset 19 d18606bb6f20
parent 15 e7f0697814dc
child 20 7512207c9041
--- a/common.h	Mon Jun 09 18:58:39 2008 +0300
+++ b/common.h	Tue Jun 17 16:39:55 2008 +0300
@@ -3,18 +3,24 @@
  * error handling
  */
 
-void _generic_err (const char *func, int perr, int do_exit, const char *fmt, ...)
-        __attribute__ ((format (printf, 4, 5)));
+void _generic_err (const char *func, int perr, const char *fmt, ...)
+        __attribute__ ((format (printf, 3, 4)));
+
+// needs to be defined as its own function for the noreturn attribute
+void _generic_err_exit (const char *func, int perr, const char *fmt, ...)
+        __attribute__ ((format (printf, 3, 4)))
+        __attribute__ ((noreturn));
+
 
 // various kinds of ways to handle an error, 2**3 of them, *g*
-#define error(...)                  _generic_err(NULL, 0, 0, __VA_ARGS__)
-#define err_exit(...)               _generic_err(NULL, 0, 1, __VA_ARGS__)
-#define perr(...)                   _generic_err(NULL, 1, 0, __VA_ARGS__)
-#define perr_exit(...)              _generic_err(NULL, 1, 1, __VA_ARGS__)
-#define err_func(func, ...)         _generic_err(func, 0, 0, __VA_ARGS__)
-#define err_func_exit(func, ...)    _generic_err(func, 0, 1, __VA_ARGS__)
-#define perr_func(func, ...)        _generic_err(func, 1, 0, __VA_ARGS__)
-#define perr_func_exit(func, ...)   _generic_err(func, 1, 1, __VA_ARGS__)
+#define error(...)                  _generic_err(       NULL, 0, __VA_ARGS__)
+#define err_exit(...)               _generic_err_exit(  NULL, 0, __VA_ARGS__)
+#define perr(...)                   _generic_err(       NULL, 1, __VA_ARGS__)
+#define perr_exit(...)              _generic_err_exit(  NULL, 1, __VA_ARGS__)
+#define err_func(func, ...)         _generic_err(       func, 0, __VA_ARGS__)
+#define err_func_exit(func, ...)    _generic_err_exit(  func, 0, __VA_ARGS__)
+#define perr_func(func, ...)        _generic_err(       func, 1, __VA_ARGS__)
+#define perr_func_exit(func, ...)   _generic_err_exit(  func, 1, __VA_ARGS__)
 
 // error(func + colon + msg, ...) + goto error
 #define ERROR(...) do { err_func(__func__, __VA_ARGS__); goto error; } while (0)