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 по дате отправления: