[Switching back to plain text]
Stefan Fuhrmann wrote:
> Julian Foad wrote:
>> Thinking about how to prevent a repeat of the same kind of error,
>> defining svn_hash_sets and svn_hash_gets as functions with prototypes
>> would result in at least a compiler warning (for typical configurations).
>
> From r1484181 to r1509166, we already had various more sophisticated
> definitions for those macros. Some of them would have caught the type
> mismatch. I think it would be safe to change them into something like this:
>
> #define svn_hash_sets(ht, key, val) \
> do { \
> const char *svn_key__temp = (key); \
> apr_hash_set(ht, svn_key__temp, strlen(svn_key__temp), val); \
> } while (0)
That would be safe, and works for *set*. We chose not to use strlen, so this
would be
#define svn_hash_sets(ht, key, val) \
do { \
const char *svn_hash__key = (key); \
apr_hash_set(ht, svn_hash__key, APR_HASH_KEY_STRING, val); \
} while (0)
That style of definition doesn't work for *get*.
- Julian