Re: pg_hba options parsing

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: pg_hba options parsing
Дата
Msg-id 27421.1224507084@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: pg_hba options parsing  (Magnus Hagander <magnus@hagander.net>)
Ответы Re: pg_hba options parsing  (Magnus Hagander <magnus@hagander.net>)
Список pgsql-hackers
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.
        regards, tom lane


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

Предыдущее
От: Magnus Hagander
Дата:
Сообщение: SSL cleanups/hostname verification
Следующее
От: Simon Riggs
Дата:
Сообщение: Block level concurrency during recovery