#define ARRPTR(x) ( (double *) ARR_DATA_PTR(x) )
#define ARRNELEMS(x) ArrayGetNItems( ARR_NDIM(x), ARR_DIMS(x))
-extern int cube_yyparse(NDBOX **result);
-extern void cube_yyerror(NDBOX **result, const char *message);
-extern void cube_scanner_init(const char *str);
-extern void cube_scanner_finish(void);
-
/*
** Input/Output routines
*/
#define DatumGetNDBOX(x) ((NDBOX *) PG_DETOAST_DATUM(x))
#define PG_GETARG_NDBOX(x) DatumGetNDBOX(PG_GETARG_DATUM(x))
#define PG_RETURN_NDBOX(x) PG_RETURN_POINTER(x)
+
+/* in cubescan.l */
+extern int cube_yylex(void);
+extern void cube_yyerror(NDBOX **result, const char *message) pg_attribute_noreturn();
+extern void cube_scanner_init(const char *str);
+extern void cube_scanner_finish(void);
+
+/* in cubeparse.y */
+extern int cube_yyparse(NDBOX **result);
#define YYMALLOC palloc
#define YYFREE pfree
-extern int cube_yylex(void);
-
static char *scanbuf;
static int scanbuflen;
-extern int cube_yyparse(NDBOX **result);
-extern void cube_yyerror(NDBOX **result, const char *message);
-
static int delim_count(char *s, char delim);
static NDBOX * write_box(unsigned int dim, char *str1, char *str2);
static NDBOX * write_point_as_box(char *s, int dim);
* contrib/cube/cubescan.l
*/
-#include "postgres.h"
-
/* No reason to constrain amount of data slurped */
#define YY_READ_BUF_SIZE 16777216
/* this is now declared in cubeparse.y: */
/* static char *scanbuf; */
/* static int scanbuflen; */
-
-/* flex 2.5.4 doesn't bother with a decl for this */
-int cube_yylex(void);
-
-void cube_scanner_init(const char *str);
-void cube_scanner_finish(void);
%}
%option 8bit
%%
-void pg_attribute_noreturn
+void
yyerror(NDBOX **result, const char *message)
{
if (*yytext == YY_END_OF_BUFFER_CHAR)
/* exec.c */
#define EXEC_PSQL_ARGS "--echo-queries --set ON_ERROR_STOP=on --no-psqlrc --dbname=template1"
-bool
-exec_prog(const char *log_file, const char *opt_log_file,
- bool throw_error, const char *fmt,...)
-pg_attribute_printf(4, 5);
+
+bool exec_prog(const char *log_file, const char *opt_log_file,
+ bool throw_error, const char *fmt,...) pg_attribute_printf(4, 5);
void verify_directories(void);
bool pid_lock_file_exists(const char *datadir);
/* server.c */
PGconn *connectToServer(ClusterInfo *cluster, const char *db_name);
-PGresult *
-executeQueryOrDie(PGconn *conn, const char *fmt,...)
-pg_attribute_printf(2, 3);
+PGresult *executeQueryOrDie(PGconn *conn, const char *fmt,...) pg_attribute_printf(2, 3);
char *cluster_conn_opts(ClusterInfo *cluster);
char *quote_identifier(const char *s);
int get_user_info(char **user_name_p);
void check_ok(void);
-void
-report_status(eLogType type, const char *fmt,...)
-pg_attribute_printf(2, 3);
-void
-pg_log(eLogType type, const char *fmt,...)
-pg_attribute_printf(2, 3);
-void
-pg_fatal(const char *fmt,...)
-pg_attribute_printf(1, 2) pg_attribute_noreturn;
+void report_status(eLogType type, const char *fmt,...) pg_attribute_printf(2, 3);
+void pg_log(eLogType type, const char *fmt,...) pg_attribute_printf(2, 3);
+void pg_fatal(const char *fmt,...) pg_attribute_printf(1, 2) pg_attribute_noreturn();
void end_progress_output(void);
-void
-prep_status(const char *fmt,...)
-pg_attribute_printf(1, 2);
+void prep_status(const char *fmt,...) pg_attribute_printf(1, 2);
void check_ok(void);
const char *getErrorText(int errNum);
unsigned int str2uint(const char *str);
void old_9_3_check_for_line_data_type_usage(ClusterInfo *cluster);
/* parallel.c */
-void
-parallel_exec_prog(const char *log_file, const char *opt_log_file,
- const char *fmt,...)
-pg_attribute_printf(3, 4);
+void parallel_exec_prog(const char *log_file, const char *opt_log_file,
+ const char *fmt,...) pg_attribute_printf(3, 4);
void parallel_transfer_all_new_dbs(DbInfoArr *old_db_arr, DbInfoArr *new_db_arr,
char *old_pgdata, char *new_pgdata,
char *old_tablespace);
LogOpts log_opts;
+static void pg_log_v(eLogType type, const char *fmt, va_list ap) pg_attribute_printf(2, 0);
+
+
/*
* report_status()
*
}
-static
-pg_attribute_printf(2, 0)
-void
+static void
pg_log_v(eLogType type, const char *fmt, va_list ap)
{
char message[QUERY_ALLOC];
Stats record_stats[RM_NEXT_ID][MAX_XLINFO_TYPES];
} XLogDumpStats;
-static void
-fatal_error(const char *fmt,...)
-pg_attribute_printf(1, 2);
+static void fatal_error(const char *fmt,...) pg_attribute_printf(1, 2);
/*
* Big red button to push when things go horribly wrong.
void px_memset(void *ptr, int c, size_t len);
#ifdef PX_DEBUG
-void
-px_debug(const char *fmt,...)
-pg_attribute_printf(1, 2);
+void px_debug(const char *fmt,...) pg_attribute_printf(1, 2);
#else
#define px_debug(...)
#endif
PG_MODULE_MAGIC;
-extern int seg_yyparse(SEG *result);
-extern void seg_yyerror(SEG *result, const char *message);
-extern void seg_scanner_init(const char *str);
-extern void seg_scanner_finish(void);
-
-/*
-extern int seg_yydebug;
-*/
-
/*
* Auxiliary data structure for picksplit method.
*/
** Auxiliary funxtions
*/
static int restore(char *s, float val, int n);
-int significant_digits(char *s);
/*****************************************************************************
char l_ext;
char u_ext;
} SEG;
+
+/* in seg.c */
+extern int significant_digits(char *str);
+
+/* in segscan.l */
+extern int seg_yylex(void);
+extern void seg_yyerror(SEG *result, const char *message) pg_attribute_noreturn();
+extern void seg_scanner_init(const char *str);
+extern void seg_scanner_finish(void);
+
+/* in segparse.y */
+extern int seg_yyparse(SEG *result);
#include "fmgr.h"
#include "utils/builtins.h"
+
#include "segdata.h"
/*
#define YYMALLOC palloc
#define YYFREE pfree
-extern int seg_yylex(void);
-
-extern int significant_digits(char *str); /* defined in seg.c */
-
-extern int seg_yyparse(SEG *result);
-extern void seg_yyerror(SEG *result, const char *message);
-
static float seg_atof(char *value);
static char strbuf[25] = {
* A scanner for EMP-style numeric ranges
*/
-#include "postgres.h"
-
/* No reason to constrain amount of data slurped */
#define YY_READ_BUF_SIZE 16777216
static YY_BUFFER_STATE scanbufhandle;
static char *scanbuf;
static int scanbuflen;
-
-/* flex 2.5.4 doesn't bother with a decl for this */
-int seg_yylex(void);
-
-void seg_scanner_init(const char *str);
-void seg_scanner_finish(void);
%}
%option 8bit
%%
-void pg_attribute_noreturn
+void
yyerror(SEG *result, const char *message)
{
if (*yytext == YY_END_OF_BUFFER_CHAR)
XLogRecPtr recptr);
static int ReadPageInternal(XLogReaderState *state, XLogRecPtr pageptr,
int reqLen);
-static void
-report_invalid_record(XLogReaderState *state, const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(2, 3);
+static void report_invalid_record(XLogReaderState *state, const char *fmt,...) pg_attribute_printf(2, 3);
static void ResetDecoder(XLogReaderState *state);
static pid_t avlauncher_forkexec(void);
static pid_t avworker_forkexec(void);
#endif
-NON_EXEC_STATIC void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn;
-NON_EXEC_STATIC void AutoVacLauncherMain(int argc, char *argv[]) pg_attribute_noreturn;
+NON_EXEC_STATIC void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn();
+NON_EXEC_STATIC void AutoVacLauncherMain(int argc, char *argv[]) pg_attribute_noreturn();
static Oid do_start_worker(void);
static void launcher_determine_sleep(bool canlaunch, bool recursing,
static pid_t pgarch_forkexec(void);
#endif
-NON_EXEC_STATIC void PgArchiverMain(int argc, char *argv[]) pg_attribute_noreturn;
+NON_EXEC_STATIC void PgArchiverMain(int argc, char *argv[]) pg_attribute_noreturn();
static void pgarch_exit(SIGNAL_ARGS);
static void ArchSigHupHandler(SIGNAL_ARGS);
static void ArchSigTermHandler(SIGNAL_ARGS);
static pid_t pgstat_forkexec(void);
#endif
-NON_EXEC_STATIC void PgstatCollectorMain(int argc, char *argv[]) pg_attribute_noreturn;
+NON_EXEC_STATIC void PgstatCollectorMain(int argc, char *argv[]) pg_attribute_noreturn();
static void pgstat_exit(SIGNAL_ARGS);
static void pgstat_beshutdown_hook(int code, Datum arg);
static void pgstat_sighup_handler(SIGNAL_ARGS);
int pid, int exitstatus);
static void PostmasterStateMachine(void);
static void BackendInitialize(Port *port);
-static void BackendRun(Port *port) pg_attribute_noreturn;
-static void ExitPostmaster(int status) pg_attribute_noreturn;
+static void BackendRun(Port *port) pg_attribute_noreturn();
+static void ExitPostmaster(int status) pg_attribute_noreturn();
static int ServerLoop(void);
static int BackendStartup(Port *port);
static int ProcessStartupPacket(Port *port, bool SSLdone);
static pid_t syslogger_forkexec(void);
static void syslogger_parseArgs(int argc, char *argv[]);
#endif
-NON_EXEC_STATIC void SysLoggerMain(int argc, char *argv[]) pg_attribute_noreturn;
+NON_EXEC_STATIC void SysLoggerMain(int argc, char *argv[]) pg_attribute_noreturn();
static void process_pipe_input(char *logbuffer, int *bytes_in_logbuffer);
static void flush_pipe_input(char *logbuffer, int *bytes_in_logbuffer);
static void open_csvlogfile(void);
appendStringInfoChar(&litbuf, ychar);
}
-void pg_attribute_noreturn
+void
yyerror(const char *message)
{
ereport(ERROR,
static void WalSndLoop(WalSndSendDataCallback send_data);
static void InitWalSenderSlot(void);
static void WalSndKill(int code, Datum arg);
-static void WalSndShutdown(void) pg_attribute_noreturn;
+static void WalSndShutdown(void) pg_attribute_noreturn();
static void XLogSendPhysical(void);
static void XLogSendLogical(void);
static void WalSndDone(WalSndSendDataCallback send_data);
#undef _
#define _(x) err_gettext(x)
-static const char *
-err_gettext(const char *str)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_format_arg(1);
+static const char *err_gettext(const char *str) pg_attribute_format_arg(1);
static void set_errdata_field(MemoryContextData *cxt, char **ptr, const char *str);
/* Global variables */
char *GUC_check_errdetail_string;
char *GUC_check_errhint_string;
-static void
-do_serialize(char **destptr, Size *maxbytes, const char *fmt,...)
-/* This lets gcc check the format string for consistency. */
-pg_attribute_printf(3, 4);
+static void do_serialize(char **destptr, Size *maxbytes, const char *fmt,...) pg_attribute_printf(3, 4);
static void set_config_sourcefile(const char *name, char *sourcefile,
int sourceline);
#endif
-static void
-write_stderr(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 2);
+static void write_stderr(const char *fmt,...) pg_attribute_printf(1, 2);
static void do_advice(void);
static void do_help(void);
static void set_mode(char *modeopt);
static const char *modulename = gettext_noop("parallel archiver");
static ParallelSlot *GetMyPSlot(ParallelState *pstate);
-static void
-parallel_msg_master(ParallelSlot *slot, const char *modulename,
- const char *fmt, va_list ap)
-pg_attribute_printf(3, 0);
+static void parallel_msg_master(ParallelSlot *slot, const char *modulename,
+ const char *fmt, va_list ap) pg_attribute_printf(3, 0);
static void archive_close_connection(int code, void *arg);
static void ShutdownWorkersHard(ParallelState *pstate);
static void WaitForTerminatingWorkers(ParallelState *pstate);
/* Convenience functions used only when writing DATA */
extern void archputs(const char *s, Archive *AH);
-extern int
-archprintf(Archive *AH, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(2, 3);
+extern int archprintf(Archive *AH, const char *fmt,...) pg_attribute_printf(2, 3);
#define appendStringLiteralAH(buf,str,AH) \
appendStringLiteral(buf, str, (AH)->encoding, (AH)->std_strings)
extern const char *progname;
extern void set_dump_section(const char *arg, int *dumpSections);
-extern void
-write_msg(const char *modulename, const char *fmt,...)
-pg_attribute_printf(2, 3);
-extern void
-vwrite_msg(const char *modulename, const char *fmt, va_list ap)
-pg_attribute_printf(2, 0);
+extern void write_msg(const char *modulename, const char *fmt,...) pg_attribute_printf(2, 3);
+extern void vwrite_msg(const char *modulename, const char *fmt, va_list ap) pg_attribute_printf(2, 0);
extern void on_exit_nicely(on_exit_nicely_callback function, void *arg);
-extern void exit_nicely(int code) pg_attribute_noreturn;
+extern void exit_nicely(int code) pg_attribute_noreturn();
-extern void
-exit_horribly(const char *modulename, const char *fmt,...)
-pg_attribute_printf(2, 3) pg_attribute_noreturn;
+extern void exit_horribly(const char *modulename, const char *fmt,...) pg_attribute_printf(2, 3) pg_attribute_noreturn();
#endif /* PG_BACKUP_UTILS_H */
PG_FATAL
} eLogType;
-extern void pg_log(eLogType type, const char *fmt,...)
-pg_attribute_printf(2, 3);
-extern void pg_fatal(const char *fmt,...)
-pg_attribute_printf(1, 2) pg_attribute_noreturn;
+extern void pg_log(eLogType type, const char *fmt,...) pg_attribute_printf(2, 3);
+extern void pg_fatal(const char *fmt,...) pg_attribute_printf(1, 2) pg_attribute_noreturn();
extern void progress_report(bool force);
extern bool setQFout(const char *fname);
-extern void
-psql_error(const char *fmt,...)
-/* This lets gcc check the format string for consistency. */
-pg_attribute_printf(1, 2);
+extern void psql_error(const char *fmt,...) pg_attribute_printf(1, 2);
extern void NoticeProcessor(void *arg, const char *message);
#include "settings.h"
#include "common.h"
-static void
-print_lo_result(const char *fmt,...)
-pg_attribute_printf(1, 2);
+static void print_lo_result(const char *fmt,...) pg_attribute_printf(1, 2);
static void
print_lo_result(const char *fmt,...)
extern int numattr;
-extern void AuxiliaryProcessMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void AuxiliaryProcessMain(int argc, char *argv[]) pg_attribute_noreturn();
extern void err_out(void);
extern int boot_yyparse(void);
extern int boot_yylex(void);
-extern void boot_yyerror(const char *str) pg_attribute_noreturn;
+extern void boot_yyerror(const char *str) pg_attribute_noreturn();
#endif /* BOOTSTRAP_H */
/* only GCC supports the unused attribute */
#ifdef __GNUC__
-#define pg_attribute_unused __attribute__((unused))
+#define pg_attribute_unused() __attribute__((unused))
#else
-#define pg_attribute_unused
+#define pg_attribute_unused()
#endif
/* GCC and XLC support format attributes */
/* GCC, Sunpro and XLC support aligned, packed and noreturn */
#if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__IBMC__)
#define pg_attribute_aligned(a) __attribute__((aligned(a)))
-#define pg_attribute_noreturn __attribute__((noreturn))
-#define pg_attribute_packed __attribute__((packed))
+#define pg_attribute_noreturn() __attribute__((noreturn))
+#define pg_attribute_packed() __attribute__((packed))
+#define HAVE_PG_ATTRIBUTE_NORETURN 1
#else
/*
- * NB: aligned and packed are not defined as empty as they affect code
- * functionality; they must be implemented by the compiler if they are to be
- * used.
+ * NB: aligned and packed are not given default definitions because they
+ * affect code functionality; they *must* be implemented by the compiler
+ * if they are to be used.
*/
-#define pg_attribute_noreturn
+#define pg_attribute_noreturn()
#endif
/* ----------------------------------------------------------------
#ifdef USE_ASSERT_CHECKING
#define PG_USED_FOR_ASSERTS_ONLY
#else
-#define PG_USED_FOR_ASSERTS_ONLY pg_attribute_unused
+#define PG_USED_FOR_ASSERTS_ONLY pg_attribute_unused()
#endif
*/
#if !HAVE_DECL_SNPRINTF
-extern int
-snprintf(char *str, size_t count, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(3, 4);
+extern int snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3, 4);
#endif
#if !HAVE_DECL_VSNPRINTF
extern void pfree(void *pointer);
/* sprintf into a palloc'd buffer --- these are in psprintf.c */
-extern char *
-psprintf(const char *fmt,...)
-pg_attribute_printf(1, 2);
-extern size_t
-pvsnprintf(char *buf, size_t len, const char *fmt, va_list args)
-pg_attribute_printf(3, 0);
+extern char *psprintf(const char *fmt,...) pg_attribute_printf(1, 2);
+extern size_t pvsnprintf(char *buf, size_t len, const char *fmt, va_list args) pg_attribute_printf(3, 0);
#endif /* FE_MEMUTILS_H */
* to str if necessary. This is sort of like a combination of sprintf and
* strcat.
*/
-extern void
-appendStringInfo(StringInfo str, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(2, 3);
+extern void appendStringInfo(StringInfo str, const char *fmt,...) pg_attribute_printf(2, 3);
/*------------------------
* appendStringInfoVA
* pass the return value to enlargeStringInfo() before trying again; see
* appendStringInfo for standard usage pattern.
*/
-extern int
-appendStringInfoVA(StringInfo str, const char *fmt, va_list args)
-pg_attribute_printf(2, 0);
+extern int appendStringInfoVA(StringInfo str, const char *fmt, va_list args) pg_attribute_printf(2, 0);
/*------------------------
* appendStringInfoString
int expected_src_encoding,
int expected_dest_encoding);
-extern void report_invalid_encoding(int encoding, const char *mbstr, int len) pg_attribute_noreturn;
+extern void report_invalid_encoding(int encoding, const char *mbstr, int len) pg_attribute_noreturn();
extern void report_untranslatable_char(int src_encoding, int dest_encoding,
- const char *mbstr, int len) pg_attribute_noreturn;
+ const char *mbstr, int len) pg_attribute_noreturn();
extern void pg_ascii2mic(const unsigned char *l, unsigned char *p, int len);
extern void pg_mic2ascii(const unsigned char *mic, unsigned char *p, int len);
extern void addRTEtoQuery(ParseState *pstate, RangeTblEntry *rte,
bool addToJoinList,
bool addToRelNameSpace, bool addToVarNameSpace);
-extern void errorMissingRTE(ParseState *pstate, RangeVar *relation) pg_attribute_noreturn;
+extern void errorMissingRTE(ParseState *pstate, RangeVar *relation) pg_attribute_noreturn();
extern void errorMissingColumn(ParseState *pstate,
- char *relname, char *colname, int location) pg_attribute_noreturn;
+ char *relname, char *colname, int location) pg_attribute_noreturn();
extern void expandRTE(RangeTblEntry *rte, int rtindex, int sublevels_up,
int location, bool include_dropped,
List **colnames, List **colvars);
extern int core_yylex(core_YYSTYPE *lvalp, YYLTYPE *llocp,
core_yyscan_t yyscanner);
extern int scanner_errposition(int location, core_yyscan_t yyscanner);
-extern void scanner_yyerror(const char *message, core_yyscan_t yyscanner) pg_attribute_noreturn;
+extern void scanner_yyerror(const char *message, core_yyscan_t yyscanner) pg_attribute_noreturn();
#endif /* SCANNER_H */
extern void allow_immediate_pgstat_restart(void);
#ifdef EXEC_BACKEND
-extern void PgstatCollectorMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void PgstatCollectorMain(int argc, char *argv[]) pg_attribute_noreturn();
#endif
#endif
extern int pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args);
-extern int
-pg_snprintf(char *str, size_t count, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(3, 4);
-extern int
-pg_sprintf(char *str, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(2, 3);
+extern int pg_snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3, 4);
+extern int pg_sprintf(char *str, const char *fmt,...) pg_attribute_printf(2, 3);
extern int pg_vfprintf(FILE *stream, const char *fmt, va_list args);
-extern int
-pg_fprintf(FILE *stream, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(2, 3);
-extern int
-pg_printf(const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(1, 2);
+extern int pg_fprintf(FILE *stream, const char *fmt,...) pg_attribute_printf(2, 3);
+extern int pg_printf(const char *fmt,...) pg_attribute_printf(1, 2);
/*
* The GCC-specific code below prevents the pg_attribute_printf above from
*/
extern void ExceptionalCondition(const char *conditionName,
const char *errorType,
- const char *fileName, int lineNumber) pg_attribute_noreturn;
+ const char *fileName, int lineNumber) pg_attribute_noreturn();
#endif /* POSTGRES_H */
extern void AutoVacuumUpdateDelay(void);
#ifdef EXEC_BACKEND
-extern void AutoVacLauncherMain(int argc, char *argv[]) pg_attribute_noreturn;
-extern void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void AutoVacLauncherMain(int argc, char *argv[]) pg_attribute_noreturn();
+extern void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn();
extern void AutovacuumWorkerIAm(void);
extern void AutovacuumLauncherIAm(void);
#endif
extern void ResetBackgroundWorkerCrashTimes(void);
/* Function to start a background worker, called from postmaster.c */
-extern void StartBackgroundWorker(void) pg_attribute_noreturn;
+extern void StartBackgroundWorker(void) pg_attribute_noreturn();
#ifdef EXEC_BACKEND
extern BackgroundWorker *BackgroundWorkerEntry(int slotno);
extern int CheckPointWarning;
extern double CheckPointCompletionTarget;
-extern void BackgroundWriterMain(void) pg_attribute_noreturn;
-extern void CheckpointerMain(void) pg_attribute_noreturn;
+extern void BackgroundWriterMain(void) pg_attribute_noreturn();
+extern void CheckpointerMain(void) pg_attribute_noreturn();
extern void RequestCheckpoint(int flags);
extern void CheckpointWriteDelay(int flags, double progress);
extern int pgarch_start(void);
#ifdef EXEC_BACKEND
-extern void PgArchiverMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void PgArchiverMain(int argc, char *argv[]) pg_attribute_noreturn();
#endif
#endif /* _PGARCH_H */
extern const char *progname;
-extern void PostmasterMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void PostmasterMain(int argc, char *argv[]) pg_attribute_noreturn();
extern void ClosePostmasterPorts(bool am_syslogger);
extern int MaxLivePostmasterChildren(void);
#ifdef EXEC_BACKEND
extern pid_t postmaster_forkexec(int argc, char *argv[]);
-extern void SubPostmasterMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void SubPostmasterMain(int argc, char *argv[]) pg_attribute_noreturn();
extern Size ShmemBackendArraySize(void);
extern void ShmemBackendArrayAllocation(void);
#define _STARTUP_H
extern void HandleStartupProcInterrupts(void);
-extern void StartupProcessMain(void) pg_attribute_noreturn;
+extern void StartupProcessMain(void) pg_attribute_noreturn();
extern void PreRestoreCommand(void);
extern void PostRestoreCommand(void);
extern bool IsPromoteTriggered(void);
extern void write_syslogger_file(const char *buffer, int count, int dest);
#ifdef EXEC_BACKEND
-extern void SysLoggerMain(int argc, char *argv[]) pg_attribute_noreturn;
+extern void SysLoggerMain(int argc, char *argv[]) pg_attribute_noreturn();
#endif
#endif /* _SYSLOGGER_H */
/* GUC options */
extern int WalWriterDelay;
-extern void WalWriterMain(void) pg_attribute_noreturn;
+extern void WalWriterMain(void) pg_attribute_noreturn();
#endif /* _WALWRITER_H */
extern PGDLLIMPORT walrcv_disconnect_type walrcv_disconnect;
/* prototypes for functions in walreceiver.c */
-extern void WalReceiverMain(void) pg_attribute_noreturn;
+extern void WalReceiverMain(void) pg_attribute_noreturn();
/* prototypes for functions in walreceiverfuncs.c */
extern Size WalRcvShmemSize(void);
*/
extern int replication_yyparse(void);
extern int replication_yylex(void);
-extern void replication_yyerror(const char *str);
+extern void replication_yyerror(const char *str) pg_attribute_noreturn();
extern void replication_scanner_init(const char *query_string);
extern void replication_scanner_finish(void);
/* ipc.c */
extern PGDLLIMPORT bool proc_exit_inprogress;
-extern void proc_exit(int code) pg_attribute_noreturn;
+extern void proc_exit(int code) pg_attribute_noreturn();
extern void shmem_exit(int code);
extern void on_proc_exit(pg_on_exit_callback function, Datum arg);
extern void on_shmem_exit(pg_on_exit_callback function, Datum arg);
}
#ifdef __arm__
-pg_attribute_packed /* Appropriate whack upside the head for ARM */
+pg_attribute_packed() /* Appropriate whack upside the head for ARM */
#endif
ItemPointerData;
extern DeadLockState DeadLockCheck(PGPROC *proc);
extern PGPROC *GetBlockingAutoVacuumPgproc(void);
-extern void DeadLockReport(void) pg_attribute_noreturn;
+extern void DeadLockReport(void) pg_attribute_noreturn();
extern void RememberSimpleDeadLock(PGPROC *proc1,
LOCKMODE lockmode,
LOCK *lock,
extern void assign_max_stack_depth(int newval, void *extra);
extern void die(SIGNAL_ARGS);
-extern void quickdie(SIGNAL_ARGS) pg_attribute_noreturn;
+extern void quickdie(SIGNAL_ARGS) pg_attribute_noreturn();
extern void StatementCancelHandler(SIGNAL_ARGS);
-extern void FloatExceptionHandler(SIGNAL_ARGS) pg_attribute_noreturn;
+extern void FloatExceptionHandler(SIGNAL_ARGS) pg_attribute_noreturn();
extern void RecoveryConflictInterrupt(ProcSignalReason reason); /* called from SIGUSR1
* handler */
extern void ProcessClientReadInterrupt(bool blocked);
GucContext ctx, const char **dbname);
extern void PostgresMain(int argc, char *argv[],
const char *dbname,
- const char *username) pg_attribute_noreturn;
+ const char *username) pg_attribute_noreturn();
extern long get_stack_depth_rlimit(void);
extern void ResetUsage(void);
extern void ShowUsage(const char *title);
int *dtype, struct pg_tm * tm, fsec_t *fsec);
extern void DateTimeParseError(int dterr, const char *str,
- const char *datatype) pg_attribute_noreturn;
+ const char *datatype) pg_attribute_noreturn();
extern int DetermineTimeZoneOffset(struct pg_tm * tm, pg_tz *tzp);
extern int DetermineTimeZoneAbbrevOffset(struct pg_tm * tm, const char *abbr, pg_tz *tzp);
extern int errcode_for_file_access(void);
extern int errcode_for_socket_access(void);
-extern int
-errmsg(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 2);
-
-extern int
-errmsg_internal(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 2);
-
-extern int
-errmsg_plural(const char *fmt_singular, const char *fmt_plural,
- unsigned long n,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 4)
-pg_attribute_printf(2, 4);
-
-extern int
-errdetail(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 2);
-
-extern int
-errdetail_internal(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 2);
-
-extern int
-errdetail_log(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 2);
-
-extern int
-errdetail_log_plural(const char *fmt_singular, const char *fmt_plural,
- unsigned long n,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 4)
-pg_attribute_printf(2, 4);
-
-extern int
-errdetail_plural(const char *fmt_singular, const char *fmt_plural,
- unsigned long n,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 4)
-pg_attribute_printf(2, 4);
-
-extern int
-errhint(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 2);
+extern int errmsg(const char *fmt,...) pg_attribute_printf(1, 2);
+extern int errmsg_internal(const char *fmt,...) pg_attribute_printf(1, 2);
+
+extern int errmsg_plural(const char *fmt_singular, const char *fmt_plural,
+ unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
+
+extern int errdetail(const char *fmt,...) pg_attribute_printf(1, 2);
+extern int errdetail_internal(const char *fmt,...) pg_attribute_printf(1, 2);
+
+extern int errdetail_log(const char *fmt,...) pg_attribute_printf(1, 2);
+
+extern int errdetail_log_plural(const char *fmt_singular,
+ const char *fmt_plural,
+ unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
+
+extern int errdetail_plural(const char *fmt_singular, const char *fmt_plural,
+ unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
+
+extern int errhint(const char *fmt,...) pg_attribute_printf(1, 2);
/*
* errcontext() is typically called in error context callback functions, not
#define errcontext set_errcontext_domain(TEXTDOMAIN), errcontext_msg
extern int set_errcontext_domain(const char *domain);
-extern int
-errcontext_msg(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 2);
+
+extern int errcontext_msg(const char *fmt,...) pg_attribute_printf(1, 2);
extern int errhidestmt(bool hide_stmt);
extern int errhidecontext(bool hide_ctx);
#endif /* HAVE__VA_ARGS */
extern void elog_start(const char *filename, int lineno, const char *funcname);
-extern void
-elog_finish(int elevel, const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(2, 3);
+extern void elog_finish(int elevel, const char *fmt,...) pg_attribute_printf(2, 3);
/* Support for constructing error strings separately from ereport() calls */
extern void pre_format_elog_string(int errnumber, const char *domain);
-extern char *
-format_elog_string(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 2);
+extern char *format_elog_string(const char *fmt,...) pg_attribute_printf(1, 2);
/* Support for attaching context information to error reports */
} while (0)
/*
- * gcc understands pg_attribute_noreturn; for other compilers, insert
- * pg_unreachable() so that the compiler gets the point.
+ * Some compilers understand pg_attribute_noreturn(); for other compilers,
+ * insert pg_unreachable() so that the compiler gets the point.
*/
-#ifdef __GNUC__
+#ifdef HAVE_PG_ATTRIBUTE_NORETURN
#define PG_RE_THROW() \
pg_re_throw()
#else
extern ErrorData *CopyErrorData(void);
extern void FreeErrorData(ErrorData *edata);
extern void FlushErrorState(void);
-extern void ReThrowError(ErrorData *edata) pg_attribute_noreturn;
+extern void ReThrowError(ErrorData *edata) pg_attribute_noreturn();
extern void ThrowErrorData(ErrorData *edata);
-extern void pg_re_throw(void) pg_attribute_noreturn;
+extern void pg_re_throw(void) pg_attribute_noreturn();
extern char *GetErrorContextStack(void);
* not available). Used before ereport/elog can be used
* safely (memory context, GUC load etc)
*/
-extern void
-write_stderr(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 2);
+extern void write_stderr(const char *fmt,...) pg_attribute_printf(1, 2);
#endif /* ELOG_H */
#ifndef HELP_CONFIG_H
#define HELP_CONFIG_H 1
-extern void GucInfoMain(void) pg_attribute_noreturn;
+extern void GucInfoMain(void) pg_attribute_noreturn();
#endif
extern char *pnstrdup(const char *in, Size len);
/* sprintf into a palloc'd buffer --- these are in psprintf.c */
-extern char *
-psprintf(const char *fmt,...)
-pg_attribute_printf(1, 2);
-extern size_t
-pvsnprintf(char *buf, size_t len, const char *fmt, va_list args)
-pg_attribute_printf(3, 0);
+extern char *psprintf(const char *fmt,...) pg_attribute_printf(1, 2);
+extern size_t pvsnprintf(char *buf, size_t len, const char *fmt, va_list args) pg_attribute_printf(3, 0);
#endif /* PALLOC_H */
#include <string.h>
#ifdef ENABLE_NLS
-extern char *
-ecpg_gettext(const char *msgid)
-pg_attribute_format_arg(1);
+extern char *ecpg_gettext(const char *msgid) pg_attribute_format_arg(1);
#else
#define ecpg_gettext(x) (x)
#endif
static struct ECPGtype ecpg_query = {ECPGt_char_variable, NULL, NULL, NULL, {NULL}, 0};
+static void vmmerror(int error_code, enum errortype type, const char *error, va_list ap) pg_attribute_printf(3, 0);
+
/*
* Handle parsing errors and warnings
*/
-static void pg_attribute_printf(3, 0)
+static void
vmmerror(int error_code, enum errortype type, const char *error, va_list ap)
{
/* localize the error message string */
extern void *mm_alloc(size_t), *mm_realloc(void *, size_t);
extern char *mm_strdup(const char *);
extern void mmerror(int errorcode, enum errortype type, const char *error,...) pg_attribute_printf(3, 4);
-extern void mmfatal(int errorcode, const char *error,...) pg_attribute_printf(2, 3) pg_attribute_noreturn;
+extern void mmfatal(int errorcode, const char *error,...) pg_attribute_printf(2, 3) pg_attribute_noreturn();
extern void output_get_descr_header(char *);
extern void output_get_descr(char *, char *);
extern void output_set_descr_header(char *);
extern void pqClearAsyncResult(PGconn *conn);
extern void pqSaveErrorResult(PGconn *conn);
extern PGresult *pqPrepareAsyncResult(PGconn *conn);
-extern void
-pqInternalNotice(const PGNoticeHooks *hooks, const char *fmt,...)
-/* This lets gcc check the format string for consistency. */
-pg_attribute_printf(2, 3);
+extern void pqInternalNotice(const PGNoticeHooks *hooks, const char *fmt,...) pg_attribute_printf(2, 3);
extern void pqSaveMessageField(PGresult *res, char code,
const char *value);
extern void pqSaveParameterStatus(PGconn *conn, const char *name,
#define pqIsnonblocking(conn) ((conn)->nonblocking)
#ifdef ENABLE_NLS
-extern char *
-libpq_gettext(const char *msgid)
-pg_attribute_format_arg(1);
-extern char *
-libpq_ngettext(const char *msgid, const char *msgid_plural, unsigned long n)
-pg_attribute_format_arg(1) pg_attribute_format_arg(2);
+extern char *libpq_gettext(const char *msgid) pg_attribute_format_arg(1);
+extern char *libpq_ngettext(const char *msgid, const char *msgid_plural, unsigned long n) pg_attribute_format_arg(1) pg_attribute_format_arg(2);
#else
#define libpq_gettext(x) (x)
#define libpq_ngettext(s, p, n) ((n) == 1 ? (s) : (p))
/* All "broken" PQExpBuffers point to this string. */
static const char oom_buffer[1] = "";
-static bool
-appendPQExpBufferVA(PQExpBuffer str, const char *fmt, va_list args)
-pg_attribute_printf(2, 0);
+static bool appendPQExpBufferVA(PQExpBuffer str, const char *fmt, va_list args) pg_attribute_printf(2, 0);
/*
* This is a convenience routine that does the same thing as
* resetPQExpBuffer() followed by appendPQExpBuffer().
*/
-extern void
-printfPQExpBuffer(PQExpBuffer str, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(2, 3);
+extern void printfPQExpBuffer(PQExpBuffer str, const char *fmt,...) pg_attribute_printf(2, 3);
/*------------------------
* appendPQExpBuffer
* to str if necessary. This is sort of like a combination of sprintf and
* strcat.
*/
-extern void
-appendPQExpBuffer(PQExpBuffer str, const char *fmt,...)
-/* This extension allows gcc to check the format string */
-pg_attribute_printf(2, 3);
+extern void appendPQExpBuffer(PQExpBuffer str, const char *fmt,...) pg_attribute_printf(2, 3);
/*------------------------
* appendPQExpBufferStr
/* Declared here to avoid pulling in all includes, which causes name collissions */
#ifdef ENABLE_NLS
-extern char *
-libpq_gettext(const char *msgid)
-pg_attribute_format_arg(1);
+extern char *libpq_gettext(const char *msgid) pg_attribute_format_arg(1);
#else
#define libpq_gettext(x) (x)
#endif
* Supply a value of PERL_UNUSED_DECL that will satisfy gcc - the one
* perl itself supplies doesn't seem to.
*/
-#define PERL_UNUSED_DECL pg_attribute_unused
+#define PERL_UNUSED_DECL pg_attribute_unused()
/*
* Sometimes perl carefully scribbles on our *printf macros.
* Beware of using yyerror for other purposes, as the cursor position might
* be misleading!
*/
-void pg_attribute_noreturn
+void
plpgsql_yyerror(const char *message)
{
char *yytext = core_yy.scanbuf + plpgsql_yylloc;
extern void plpgsql_peek2(int *tok1_p, int *tok2_p, int *tok1_loc,
int *tok2_loc);
extern int plpgsql_scanner_errposition(int location);
-extern void plpgsql_yyerror(const char *message);
+extern void plpgsql_yyerror(const char *message) pg_attribute_noreturn();
extern int plpgsql_location_to_lineno(int location);
extern int plpgsql_latest_lineno(void);
extern void plpgsql_scanner_init(const char *str);
extern PyObject *PLy_exc_fatal;
extern PyObject *PLy_exc_spi_error;
-extern void
-PLy_elog(int elevel, const char *fmt,...)
-pg_attribute_printf(2, 3);
+extern void PLy_elog(int elevel, const char *fmt,...) pg_attribute_printf(2, 3);
-extern void
-PLy_exception_set(PyObject *exc, const char *fmt,...)
-pg_attribute_printf(2, 3);
+extern void PLy_exception_set(PyObject *exc, const char *fmt,...) pg_attribute_printf(2, 3);
-extern void
-PLy_exception_set_plural(PyObject *exc, const char *fmt_singular, const char *fmt_plural,
- unsigned long n,...)
-pg_attribute_printf(2, 5)
-pg_attribute_printf(3, 5);
+extern void PLy_exception_set_plural(PyObject *exc, const char *fmt_singular, const char *fmt_plural,
+ unsigned long n,...) pg_attribute_printf(2, 5) pg_attribute_printf(3, 5);
#endif /* PLPY_ELOG_H */
shm_mq_handle **input);
/* Main entrypoint for a worker. */
-extern void test_shm_mq_main(Datum) pg_attribute_noreturn;
+extern void test_shm_mq_main(Datum) pg_attribute_noreturn();
#endif
PG_FUNCTION_INFO_V1(worker_spi_launch);
void _PG_init(void);
-void worker_spi_main(Datum) pg_attribute_noreturn;
+void worker_spi_main(Datum) pg_attribute_noreturn();
/* flags set by signal handlers */
static volatile sig_atomic_t got_sighup = false;
static bool directory_exists(const char *dir);
static void make_directory(const char *dir);
-static void
-header(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 2);
-static void
-status(const char *fmt,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(1, 2);
-static void
-psql_command(const char *database, const char *query,...)
-/* This extension allows gcc to check the format string for consistency with
- the supplied arguments. */
-pg_attribute_printf(2, 3);
+static void header(const char *fmt,...) pg_attribute_printf(1, 2);
+static void status(const char *fmt,...) pg_attribute_printf(1, 2);
+static void psql_command(const char *database, const char *query,...) pg_attribute_printf(2, 3);
#ifdef WIN32
typedef BOOL (WINAPI * __CreateRestrictedToken) (HANDLE, DWORD, DWORD, PSID_AND_ATTRIBUTES, DWORD, PLUID_AND_ATTRIBUTES, DWORD, PSID_AND_ATTRIBUTES, PHANDLE);