Browse Source

return_via helper function family to assign a variable and goto

Luke Dashjr 11 years ago
parent
commit
944e0ade69
1 changed files with 23 additions and 0 deletions
  1. 23 0
      logging.h

+ 23 - 0
logging.h

@@ -43,6 +43,11 @@ extern bool want_per_device_stats;
 /* global log_level, messages with lower or equal prio are logged */
 /* global log_level, messages with lower or equal prio are logged */
 extern int opt_log_level;
 extern int opt_log_level;
 
 
+#define return_via(label, stmt)  do {  \
+	stmt;  \
+	goto label;  \
+} while (0)
+
 #define LOGBUFSIZ 0x1000
 #define LOGBUFSIZ 0x1000
 
 
 extern void _applog(int prio, const char *str);
 extern void _applog(int prio, const char *str);
@@ -70,6 +75,12 @@ extern void _applog(int prio, const char *str);
 	return rv;  \
 	return rv;  \
 } while (0)
 } while (0)
 
 
+#define return_via_applog(label, expr, prio, ...)  do {  \
+	applog(prio, __VA_ARGS__);  \
+	expr;  \
+	goto label;  \
+} while (0)
+
 #define appperror(prio, s)  do {  \
 #define appperror(prio, s)  do {  \
 	const char *_tmp43 = bfg_strerror(errno, BST_ERRNO);  \
 	const char *_tmp43 = bfg_strerror(errno, BST_ERRNO);  \
 	if (s && s[0])  \
 	if (s && s[0])  \
@@ -92,6 +103,12 @@ extern void _applog(int prio, const char *str);
 	return rv;  \
 	return rv;  \
 } while (0)
 } while (0)
 
 
+#define return_via_applogfailinfo(label, expr, prio, failed, fmt, ...)  do {  \
+	applogfailinfo(prio, failed, fmt, __VA_ARGS__);  \
+	expr;  \
+	goto label;  \
+} while (0)
+
 #define applogfail(prio, failed)  do {  \
 #define applogfail(prio, failed)  do {  \
 	applog(prio, "Failed to %s"IN_FMT_FFL,  \
 	applog(prio, "Failed to %s"IN_FMT_FFL,  \
 	       failed,  \
 	       failed,  \
@@ -103,6 +120,12 @@ extern void _applog(int prio, const char *str);
 	return rv;  \
 	return rv;  \
 } while (0)
 } while (0)
 
 
+#define return_via_applogfail(label, expr, prio, failed)  do {  \
+	applogfail(prio, failed);  \
+	expr;  \
+	goto label;  \
+} while (0)
+
 extern void _bfg_clean_up(bool);
 extern void _bfg_clean_up(bool);
 
 
 #define quit(status, fmt, ...) do { \
 #define quit(status, fmt, ...) do { \