Patchwork Fix up msg_* macros

login
register
about
Submitter Carl-Daniel Hailfinger
Date 2010-01-09 03:13:39
Message ID <4B47F463.2010402@gmx.net>
Download mbox | patch
Permalink /patch/757/
State Accepted
Commit r841
Headers show

Comments

Carl-Daniel Hailfinger - 2010-01-09 03:13:39
This slipped through the review. The msg_* macros won't compile as is if
you use more than one parameter (i.e. have a format string and a variable).
There are two alternative styles: GNU or C99 variadic macros. While C99
has limitations compared to the GNU extensions, these limitations do not
affect our macros, so I decided to go with the standard way.

I adjusted whitespace a bit to have aligned values (cosmetic change).

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Sean Nelson - 2010-01-09 03:17:11
On 1/8/2010 7:13 PM, Carl-Daniel Hailfinger wrote:
> This slipped through the review. The msg_* macros won't compile as is if
> you use more than one parameter (i.e. have a format string and a variable).
> There are two alternative styles: GNU or C99 variadic macros. While C99
> has limitations compared to the GNU extensions, these limitations do not
> affect our macros, so I decided to go with the standard way.
>
> I adjusted whitespace a bit to have aligned values (cosmetic change).
>
> Signed-off-by: Carl-Daniel Hailfinger<c-d.hailfinger.devel.2006@gmx.net>
>
> Index: flashrom-msg_macro_fix/flash.h
> ===================================================================
> --- flashrom-msg_macro_fix/flash.h	(Revision 839)
> +++ flashrom-msg_macro_fix/flash.h	(Arbeitskopie)
> @@ -506,22 +506,22 @@
>
>   /* cli_output.c */
>   int print(int type, const char *fmt, ...);
> -#define MSG_ERROR 0
> -#define MSG_INFO 1
> -#define MSG_DEBUG 2
> -#define MSG_BARF 3
> -#define msg_gerr(x) print(MSG_ERROR, x) /* general errors */
> -#define msg_perr(x) print(MSG_ERROR, x) /* programmer errors */
> -#define msg_cerr(x) print(MSG_ERROR, x) /* chip errors */
> -#define msg_ginfo(x) print(MSG_INFO, x) /* general info */
> -#define msg_pinfo(x) print(MSG_INFO, x) /* programmer info */
> -#define msg_cinfo(x) print(MSG_INFO, x) /* chip info */
> -#define msg_gdbg(x) print(MSG_DEBUG, x) /* general debug */
> -#define msg_pdbg(x) print(MSG_DEBUG, x) /* programmer debug */
> -#define msg_cdbg(x) print(MSG_DEBUG, x) /* chip debug */
> -#define msg_gspew(x) print(MSG_BARF, x) /* general debug barf  */
> -#define msg_pspew(x) print(MSG_BARF, x) /* programmer debug barf  */
> -#define msg_cspew(x) print(MSG_BARF, x) /* chip debug barf  */
> +#define MSG_ERROR	0
> +#define MSG_INFO	1
> +#define MSG_DEBUG	2
> +#define MSG_BARF	3
> +#define msg_gerr(...)	print(MSG_ERROR, __VA_ARGS__)	/* general errors */
> +#define msg_perr(...)	print(MSG_ERROR, __VA_ARGS__)	/* programmer errors */
> +#define msg_cerr(...)	print(MSG_ERROR, __VA_ARGS__)	/* chip errors */
> +#define msg_ginfo(...)	print(MSG_INFO, __VA_ARGS__)	/* general info */
> +#define msg_pinfo(...)	print(MSG_INFO, __VA_ARGS__)	/* programmer info */
> +#define msg_cinfo(...)	print(MSG_INFO, __VA_ARGS__)	/* chip info */
> +#define msg_gdbg(...)	print(MSG_DEBUG, __VA_ARGS__)	/* general debug */
> +#define msg_pdbg(...)	print(MSG_DEBUG, __VA_ARGS__)	/* programmer debug */
> +#define msg_cdbg(...)	print(MSG_DEBUG, __VA_ARGS__)	/* chip debug */
> +#define msg_gspew(...)	print(MSG_BARF, __VA_ARGS__)	/* general debug barf  */
> +#define msg_pspew(...)	print(MSG_BARF, __VA_ARGS__)	/* programmer debug barf  */
> +#define msg_cspew(...)	print(MSG_BARF, __VA_ARGS__)	/* chip debug barf  */
>
>   /* cli_classic.c */
>   int cli_classic(int argc, char *argv[]);
>
>
>    
.... I didn't even know about that, kinda strange that flashrom compiled 
fine on my system. i686-apple-darwin10-gcc-4.2.1

Acked-by: Sean Nelson <audiohacked@gmail.com>
Carl-Daniel Hailfinger - 2010-01-09 03:24:28
On 09.01.2010 04:17, Sean Nelson wrote:
> On 1/8/2010 7:13 PM, Carl-Daniel Hailfinger wrote:
>> The msg_* macros won't compile as is if
>> you use more than one parameter (i.e. have a format string and a
>> variable).
>>
> .... I didn't even know about that, kinda strange that flashrom
> compiled fine on my system. i686-apple-darwin10-gcc-4.2.1

It compiled fine unless you actually tried to use the macros as
replacement for
printf_debug("%s", "some string");

> Acked-by: Sean Nelson <audiohacked@gmail.com>

Thanks, r841.

Regards,
Carl-Daniel

Patch

Index: flashrom-msg_macro_fix/flash.h
===================================================================
--- flashrom-msg_macro_fix/flash.h	(Revision 839)
+++ flashrom-msg_macro_fix/flash.h	(Arbeitskopie)
@@ -506,22 +506,22 @@ 
 
 /* cli_output.c */
 int print(int type, const char *fmt, ...);
-#define MSG_ERROR 0
-#define MSG_INFO 1
-#define MSG_DEBUG 2
-#define MSG_BARF 3
-#define msg_gerr(x) print(MSG_ERROR, x) /* general errors */
-#define msg_perr(x) print(MSG_ERROR, x) /* programmer errors */
-#define msg_cerr(x) print(MSG_ERROR, x) /* chip errors */
-#define msg_ginfo(x) print(MSG_INFO, x) /* general info */
-#define msg_pinfo(x) print(MSG_INFO, x) /* programmer info */
-#define msg_cinfo(x) print(MSG_INFO, x) /* chip info */
-#define msg_gdbg(x) print(MSG_DEBUG, x) /* general debug */
-#define msg_pdbg(x) print(MSG_DEBUG, x) /* programmer debug */
-#define msg_cdbg(x) print(MSG_DEBUG, x) /* chip debug */
-#define msg_gspew(x) print(MSG_BARF, x) /* general debug barf  */
-#define msg_pspew(x) print(MSG_BARF, x) /* programmer debug barf  */
-#define msg_cspew(x) print(MSG_BARF, x) /* chip debug barf  */
+#define MSG_ERROR	0
+#define MSG_INFO	1
+#define MSG_DEBUG	2
+#define MSG_BARF	3
+#define msg_gerr(...)	print(MSG_ERROR, __VA_ARGS__)	/* general errors */
+#define msg_perr(...)	print(MSG_ERROR, __VA_ARGS__)	/* programmer errors */
+#define msg_cerr(...)	print(MSG_ERROR, __VA_ARGS__)	/* chip errors */
+#define msg_ginfo(...)	print(MSG_INFO, __VA_ARGS__)	/* general info */
+#define msg_pinfo(...)	print(MSG_INFO, __VA_ARGS__)	/* programmer info */
+#define msg_cinfo(...)	print(MSG_INFO, __VA_ARGS__)	/* chip info */
+#define msg_gdbg(...)	print(MSG_DEBUG, __VA_ARGS__)	/* general debug */
+#define msg_pdbg(...)	print(MSG_DEBUG, __VA_ARGS__)	/* programmer debug */
+#define msg_cdbg(...)	print(MSG_DEBUG, __VA_ARGS__)	/* chip debug */
+#define msg_gspew(...)	print(MSG_BARF, __VA_ARGS__)	/* general debug barf  */
+#define msg_pspew(...)	print(MSG_BARF, __VA_ARGS__)	/* programmer debug barf  */
+#define msg_cspew(...)	print(MSG_BARF, __VA_ARGS__)	/* chip debug barf  */
 
 /* cli_classic.c */
 int cli_classic(int argc, char *argv[]);