Michael Meskes <meskes@postgresql.org> writes:
> Having spend countless hours debugging this stuff I fully agree with
> you. It's not just ECPGget_variable though. I also had to inline
> create_statement.
AFAICS you do not need to inline create_statement. The risk factor
is where you call a routine that does something with a va_list, and
then you want to do something else (other than va_end) with that va_list
after it returns. The one use of create_statement doesn't do that,
hence no problem. (We know this works, because stringinfo.c does it.)
BTW, I think there is a small bug there: you fail to call va_end() in the
failure path. I'm not sure if there are any modern machines where
va_end() isn't a no-op, but nonetheless the code isn't meeting the spec.
regards, tom lane