From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Magnus Hagander <magnus(at)hagander(dot)net> |
Cc: | Bruce Momjian <bruce(at)momjian(dot)us>, PG Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: pg_hba options parsing |
Date: | 2008-10-20 12:51:24 |
Message-ID: | 27421.1224507084@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Magnus Hagander <magnus(at)hagander(dot)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
From | Date | Subject | |
---|---|---|---|
Next Message | Magnus Hagander | 2008-10-20 12:53:24 | Re: pg_hba options parsing |
Previous Message | Magnus Hagander | 2008-10-20 12:50:12 | SSL cleanups/hostname verification |