Minor code cleanup.

* src/muscle-tab.c (MUSCLE_USER_NAME_CONVERT): Remove macro and
replace all uses with UNIQSTR_CONCAT.
* src/uniqstr.c (uniqstr_vsprintf): New function.
* src/uniqstr.h (uniqstr_vsprintf): Add prototype.
(UNIQSTR_CONCAT, UNIQSTR_GEN_FORMAT, UNIQSTR_GEN_FORMAT_): New
macros.
This commit is contained in:
Joel E. Denny
2009-10-07 23:09:43 -04:00
parent 3c5362b825
commit 10659d0ec9
4 changed files with 96 additions and 39 deletions

View File

@@ -29,6 +29,12 @@ typedef char const *uniqstr;
/* Return the uniqstr for STR. */
uniqstr uniqstr_new (char const *str);
/* Return a uniqstr built by vsprintf. In order to simply concatenate
strings, use UNIQSTR_CONCAT, which is a convenient wrapper around
this function. */
uniqstr uniqstr_vsprintf (char const *format, ...)
__attribute__ ((__format__ (__printf__, 1, 2)));
/* Two uniqstr values have the same value iff they are the same. */
#define UNIQSTR_EQ(USTR1, USTR2) ((USTR1) == (USTR2))
@@ -52,4 +58,41 @@ void uniqstrs_free (void);
/* Report them all. */
void uniqstrs_print (void);
/*----------------.
| Concatenation. |
`----------------*/
/* Concatenate at most 20 strings and return a uniqstr. The goal of
this macro is to make the caller's code a little more succinct
without a trivial uniqstr_vsprintf format string to maintain
(for example, "%s%s%s") while still benefitting from gcc's type
checking. Unfortunately, because of the missing format string in the
macro invocation, the argument number reported by gcc for a bad
argument type is 1 too large. */
#define UNIQSTR_CONCAT(...) \
uniqstr_vsprintf (UNIQSTR_GEN_FORMAT (__VA_ARGS__, \
"%s", "%s", "%s", "%s", "%s", \
"%s", "%s", "%s", "%s", "%s", \
"%s", "%s", "%s", "%s", "%s", \
"%s", "%s", "%s", "%s", "%s"), \
__VA_ARGS__)
#define UNIQSTR_GEN_FORMAT(F1, F2, F3, F4, F5, \
F6, F7, F8, F9, F10, \
F11, F12, F13, F14, F15, \
F16, F17, F18, F19, F20, \
...) \
UNIQSTR_GEN_FORMAT_ (__VA_ARGS__, \
"", "", "", "", "", \
"", "", "", "", "", \
"", "", "", "", "", \
"", "", "", "", "")
#define UNIQSTR_GEN_FORMAT_(F1, F2, F3, F4, F5, \
F6, F7, F8, F9, F10, \
F11, F12, F13, F14, F15, \
F16, F17, F18, F19, F20, ...) \
F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 \
F11 F12 F13 F14 F15 F16 F17 F18 F19 F20
#endif /* ! defined UNIQSTR_H_ */