Better definitions for several macros. Instead of simply enclosing a macro
definition in curly-braces, using a "do { } while (0)" to ensure correct
parsing in all situations.

Make sure all semicolons are placed correctly.

Macros that use ## need a space before the preceeding comma.

Apply with:
cd /usr/src/evms-2.5.1
patch -p1 < evms_metadata_restore.c.patch
make
make install

--- evms-2.5.1a/ui/utils/evms_metadata_restore.c	26 Jan 2005 15:52:59 -0000
+++ evms-2.5.1a/ui/utils/evms_metadata_restore.c	26 Jan 2005 16:43:29 -0000
@@ -99,26 +99,26 @@
 
 char msg_buf[10240];
 
-#define LOG_CRITICAL(msg, args...)	{sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
-					 evms_write_log_entry(CRITICAL,	  prog_name, msg_buf, ## args);}
-#define LOG_SERIOUS(msg, args...)	{sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
-					 evms_write_log_entry(SERIOUS,	  prog_name, msg_buf, ## args);}
-#define LOG_ERROR(msg, args...)		{sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
-					 evms_write_log_entry(ERROR,	  prog_name, msg_buf, ## args);}
-#define LOG_WARNING(msg, args...)	{sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
-					 evms_write_log_entry(WARNING,	  prog_name, msg_buf, ## args);}
-#define LOG_DEFAULT(msg, args...)	{sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
-					 evms_write_log_entry(DEFAULT,	  prog_name, msg_buf, ## args);}
-#define LOG_DETAILS(msg, args...)	{sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
-					 evms_write_log_entry(DETAILS,	  prog_name, msg_buf, ## args);}
-#define LOG_DEBUG(msg, args...)		{sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
-					 evms_write_log_entry(DEBUG,	  prog_name, msg_buf, ## args);}
-#define LOG_EXTRA(msg, args...)		{sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
-					 evms_write_log_entry(EXTRA,	  prog_name, msg_buf, ## args);}
-#define LOG_ENTRY_EXIT(msg, args...)	{sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
-					 evms_write_log_entry(ENTRY_EXIT, prog_name, msg_buf, ## args);}
-#define LOG_EVERYTHING(msg, args...)	{sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
-					 evms_write_log_entry(EVERYTHING, prog_name, msg_buf, ## args);}
+#define LOG_CRITICAL(msg, args...)	do { sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
+					     evms_write_log_entry(CRITICAL,	prog_name, msg_buf , ## args);} while (0)
+#define LOG_SERIOUS(msg, args...)	do { sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
+					     evms_write_log_entry(SERIOUS,	prog_name, msg_buf , ## args);} while (0)
+#define LOG_ERROR(msg, args...)		do { sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
+					     evms_write_log_entry(ERROR,	prog_name, msg_buf , ## args);} while (0)
+#define LOG_WARNING(msg, args...)	do { sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
+					     evms_write_log_entry(WARNING,	prog_name, msg_buf , ## args);} while (0)
+#define LOG_DEFAULT(msg, args...)	do { sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
+					     evms_write_log_entry(DEFAULT,	prog_name, msg_buf , ## args);} while (0)
+#define LOG_DETAILS(msg, args...)	do { sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
+					     evms_write_log_entry(DETAILS,	prog_name, msg_buf , ## args);} while (0)
+#define LOG_DEBUG(msg, args...)		do { sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
+					     evms_write_log_entry(DEBUG,	prog_name, msg_buf , ## args);} while (0)
+#define LOG_EXTRA(msg, args...)		do { sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
+					     evms_write_log_entry(EXTRA,	prog_name, msg_buf , ## args);} while (0)
+#define LOG_ENTRY_EXIT(msg, args...)	do { sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
+					     evms_write_log_entry(ENTRY_EXIT,	prog_name, msg_buf , ## args);} while (0)
+#define LOG_EVERYTHING(msg, args...)	do { sprintf(msg_buf, "%s: %s", __FUNCTION__, msg); \
+					     evms_write_log_entry(EVERYTHING,	prog_name, msg_buf , ## args);} while (0)
 
 /* Macros to log entry and exit from subroutines. */
 #define LOG_ENTRY()			LOG_ENTRY_EXIT("Enter.\n")
@@ -128,9 +128,9 @@
 #define LOG_EXIT_BOOL(x)		LOG_ENTRY_EXIT("Exit.  Return is %s\n", x ? "TRUE" : "FALSE")
 #define LOG_EXIT_VOID()			LOG_ENTRY_EXIT("Exit.\n")
 
-#define MSG(msg, args...)         {if (!quiet) { printf(msg, ## args); } LOG_DEFAULT(msg, ## args)}
-#define VERBOSE_MSG(msg, args...) {if (verbose) { printf(msg, ## args); } LOG_DEBUG(msg, ## args)}
-#define ERROR_MSG(msg, args...)   {fprintf(stderr, msg, ## args); LOG_CRITICAL(msg, ## args) }
+#define MSG(msg, args...)         do { if (!quiet) { printf(msg , ## args); } LOG_DEFAULT(msg , ## args); } while (0)
+#define VERBOSE_MSG(msg, args...) do { if (verbose) { printf(msg , ## args); } LOG_DEBUG(msg , ## args); } while (0)
+#define ERROR_MSG(msg, args...)   do { fprintf(stderr, msg , ## args); LOG_CRITICAL(msg , ## args); } while (0)
 
 
 static boolean is_numeric(char * str) {
@@ -606,7 +606,7 @@
 		result = FALSE;
 	}
 
-	LOG_EXIT_BOOL(result)
+	LOG_EXIT_BOOL(result);
 	return result;
 }
 
