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; }