On 2022-Dec-19, Peter Eisentraut wrote: > On 14.12.22 18:05, Justin Pryzby wrote: > > On Wed, Dec 14, 2022 at 08:31:02AM +0100, Peter Eisentraut wrote: > > > + return replace_percent_placeholders(base_command, "df", (const char > > > *[]){target_detail, filename}); > > > > This is a "compound literal", which I gather is required by C99. > > > > But I don't think that's currently being exercised, so I wonder if it's > > going to break some BF members. > > We already use this, for example in pg_dump.
Yeah, we have this #define ARCHIVE_OPTS(...) &(ArchiveOpts){__VA_ARGS__} which we then use like this ArchiveEntry(fout, dbCatId, /* catalog ID */ dbDumpId, /* dump ID */ ARCHIVE_OPTS(.tag = datname, .owner = dba, .description = "DATABASE", .section = SECTION_PRE_DATA, .createStmt = creaQry->data, .dropStmt = delQry->data)); I think the new one is not great. I wish we could do something more straightforward, maybe like replace_percent_placeholders(base_command, PERCENT_OPT("f", filename), PERCENT_OPT("d", target_detail)); Is there a performance disadvantage to a variadic implementation? Alternatively, have all these macro calls form an array. -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/ Subversion to GIT: the shortest path to happiness I've ever heard of (Alexey Klyukin)