Re: pg_hba options parsing

Поиск
Список
Период
Сортировка
От Magnus Hagander
Тема Re: pg_hba options parsing
Дата
Msg-id 48FC7F44.9070006@hagander.net
обсуждение исходный текст
Ответ на Re: pg_hba options parsing  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Tom Lane wrote:
> Magnus Hagander <magnus@hagander.net> writes:
>> Bruce Momjian wrote:
>>> This is missing 'do' or something:
>>>
>>> + #define MANDATORY_AUTH_ARG(argvar, argname, authname) \
>>> + if (argvar == NULL) {\
>>> +   ereport(LOG, \
>>> +           (errcode(ERRCODE_CONFIG_FILE_ERROR), \
>>> +            errmsg("authentication method '%s' requires argument '%s' to be set", \
>>> +                   authname, argname), \
>>> +            errcontext("line %d of configuration file \"%s\"", \
>>> +                   line_num, HbaFileName))); \
>>> +   goto hba_other_error; \
>>> + } while (0);
> 
>> Wow.Amazing that it actually compiles and work. I guess it treats the
>> while(0) as a separate statement completely.
> 
>> The correct fix is, AFAICS, to remove the while(0).
> 
> Absolutely not!  The reason for using do/while in this sort of situation
> is to make sure that the "if" can't get matched up to an "else" in code
> following the macro.  Without do/while this macro will be a loaded
> foot-gun.

Oh, didn't think of that. I just thought of the braces part, which was
"solved" by if. Thanks for clearing that up.

Ok, will add back do/while instead.

//Magnus



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Simon Riggs
Дата:
Сообщение: Block level concurrency during recovery
Следующее
От: Heikki Linnakangas
Дата:
Сообщение: Re: contrib/pg_stat_statements