diff --git a/contrib/oid2name/oid2name.c b/contrib/oid2name/oid2name.c index 67d79346b2..d8565941f9 100644 --- a/contrib/oid2name/oid2name.c +++ b/contrib/oid2name/oid2name.c @@ -9,14 +9,8 @@ */ #include "postgres_fe.h" -#include -#ifdef HAVE_GETOPT_H -#include -#endif - -extern char *optarg; - #include "libpq-fe.h" +#include "pg_getopt.h" /* an extensible array to keep track of elements to show */ typedef struct diff --git a/contrib/pg_archivecleanup/pg_archivecleanup.c b/contrib/pg_archivecleanup/pg_archivecleanup.c index f12331a62e..7b5484bb6a 100644 --- a/contrib/pg_archivecleanup/pg_archivecleanup.c +++ b/contrib/pg_archivecleanup/pg_archivecleanup.c @@ -17,20 +17,9 @@ #include #include #include - -#ifndef WIN32 #include -#include -#ifdef HAVE_GETOPT_H -#include -#endif -#else /* WIN32 */ -extern int getopt(int argc, char *const argv[], const char *optstring); -#endif /* ! WIN32 */ - -extern char *optarg; -extern int optind; +#include "pg_getopt.h" const char *progname; diff --git a/contrib/pg_standby/pg_standby.c b/contrib/pg_standby/pg_standby.c index 059c820527..144edd8a07 100644 --- a/contrib/pg_standby/pg_standby.c +++ b/contrib/pg_standby/pg_standby.c @@ -28,20 +28,9 @@ #include #include #include - -#ifdef WIN32 -int getopt(int argc, char *const argv[], const char *optstring); -#else #include -#include -#ifdef HAVE_GETOPT_H -#include -#endif -#endif /* ! WIN32 */ - -extern char *optarg; -extern int optind; +#include "pg_getopt.h" const char *progname; diff --git a/contrib/pg_upgrade/option.c b/contrib/pg_upgrade/option.c index 4c08e94ffd..cd9f66dd11 100644 --- a/contrib/pg_upgrade/option.c +++ b/contrib/pg_upgrade/option.c @@ -10,10 +10,10 @@ #include "postgres_fe.h" #include "miscadmin.h" +#include "getopt_long.h" #include "pg_upgrade.h" -#include #include #include #include diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c index 16b7ab5ddc..a836acfae9 100644 --- a/contrib/pgbench/pgbench.c +++ b/contrib/pgbench/pgbench.c @@ -40,12 +40,7 @@ #include #include #include - -#ifndef WIN32 #include -#include -#endif /* ! WIN32 */ - #ifdef HAVE_SYS_SELECT_H #include #endif @@ -89,9 +84,6 @@ static int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start static int pthread_join(pthread_t th, void **thread_return); #endif -extern char *optarg; -extern int optind; - /******************************************************************** * some configurable parameters */ diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 3981dd6260..c2e5bad438 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -22,15 +22,12 @@ #endif #include "libpq-fe.h" +#include "pg_getopt.h" #define atooid(x) ((Oid) strtoul((x), NULL, 10)) #define BUFSIZE 1024 -extern char *optarg; -extern int optind, - opterr; - enum trivalue { TRI_DEFAULT, diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index ef6311b075..c36e71d806 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -17,9 +17,6 @@ #include #include #include -#ifdef HAVE_GETOPT_H -#include -#endif #include "access/htup_details.h" #include "bootstrap/bootstrap.h" @@ -29,6 +26,7 @@ #include "libpq/pqsignal.h" #include "miscadmin.h" #include "nodes/makefuncs.h" +#include "pg_getopt.h" #include "postmaster/bgwriter.h" #include "postmaster/startup.h" #include "postmaster/walwriter.h" @@ -46,9 +44,6 @@ #include "utils/relmapper.h" #include "utils/tqual.h" -extern int optind; -extern char *optarg; - uint32 bootstrap_data_checksum_version = 0; /* No checksum */ diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 7adc410b43..6bb2a47485 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -83,10 +83,6 @@ #include #endif -#ifdef HAVE_GETOPT_H -#include -#endif - #ifdef USE_BONJOUR #include #endif @@ -101,6 +97,7 @@ #include "libpq/libpq.h" #include "libpq/pqsignal.h" #include "miscadmin.h" +#include "pg_getopt.h" #include "pgstat.h" #include "postmaster/autovacuum.h" #include "postmaster/bgworker_internals.h" @@ -352,14 +349,6 @@ static volatile bool HaveCrashedWorker = false; static unsigned int random_seed = 0; static struct timeval random_start_time; -extern char *optarg; -extern int optind, - opterr; - -#ifdef HAVE_INT_OPTRESET -extern int optreset; /* might not be declared by system headers */ -#endif - #ifdef USE_BONJOUR static DNSServiceRef bonjour_sdref = NULL; #endif diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index b7612b9b5f..a230d7eda6 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -32,9 +32,6 @@ #include #include #endif -#ifdef HAVE_GETOPT_H -#include -#endif #ifndef HAVE_GETRUSAGE #include "rusagestub.h" @@ -55,6 +52,7 @@ #include "pg_trace.h" #include "parser/analyze.h" #include "parser/parser.h" +#include "pg_getopt.h" #include "postmaster/autovacuum.h" #include "postmaster/postmaster.h" #include "replication/walsender.h" @@ -77,14 +75,6 @@ #include "mb/pg_wchar.h" -extern char *optarg; -extern int optind; - -#ifdef HAVE_INT_OPTRESET -extern int optreset; /* might not be declared by system headers */ -#endif - - /* ---------------- * global variables * ---------------- diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 458a118dc0..2ce8e6dd00 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -63,10 +63,6 @@ #include "dumputils.h" #include "parallel.h" -extern char *optarg; -extern int optind, - opterr; - typedef struct { diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c index bb652538a4..df9477b69f 100644 --- a/src/bin/pg_dump/pg_restore.c +++ b/src/bin/pg_dump/pg_restore.c @@ -43,6 +43,7 @@ #include "pg_backup_utils.h" #include "dumputils.h" #include "parallel.h" +#include "getopt_long.h" #include @@ -50,13 +51,6 @@ #include #endif -#include - -#include "getopt_long.h" - -extern char *optarg; -extern int optind; - #ifdef ENABLE_NLS #include #endif diff --git a/src/bin/pg_resetxlog/pg_resetxlog.c b/src/bin/pg_resetxlog/pg_resetxlog.c index 03f2fad3f7..54690af031 100644 --- a/src/bin/pg_resetxlog/pg_resetxlog.c +++ b/src/bin/pg_resetxlog/pg_resetxlog.c @@ -44,9 +44,6 @@ #include #include #include -#ifdef HAVE_GETOPT_H -#include -#endif #include "access/transam.h" #include "access/tuptoaster.h" @@ -55,9 +52,7 @@ #include "catalog/catversion.h" #include "catalog/pg_control.h" #include "common/fe_memutils.h" - -extern int optind; -extern char *optarg; +#include "pg_getopt.h" static ControlFileData ControlFile; /* pg_control values */ diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c index 91948014e5..106199273f 100644 --- a/src/bin/psql/startup.c +++ b/src/bin/psql/startup.c @@ -386,8 +386,6 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options) }; int optindex; - extern char *optarg; - extern int optind; int c; memset(options, 0, sizeof *options); diff --git a/src/include/getopt_long.h b/src/include/getopt_long.h index 563719b3f7..e23c21f333 100644 --- a/src/include/getopt_long.h +++ b/src/include/getopt_long.h @@ -9,15 +9,7 @@ #ifndef GETOPT_LONG_H #define GETOPT_LONG_H -#ifdef HAVE_GETOPT_H -#include -#endif - -/* These are picked up from the system's getopt() facility. */ -extern int opterr; -extern int optind; -extern int optopt; -extern char *optarg; +#include "pg_getopt.h" #ifndef HAVE_STRUCT_OPTION diff --git a/src/include/pg_getopt.h b/src/include/pg_getopt.h new file mode 100644 index 0000000000..648800414e --- /dev/null +++ b/src/include/pg_getopt.h @@ -0,0 +1,42 @@ +/* + * Portions Copyright (c) 1987, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Portions Copyright (c) 2003-2014, PostgreSQL Global Development Group + * + * src/include/pg_getopt.h + */ +#ifndef PG_GETOPT_H +#define PG_GETOPT_H + +/* POSIX says getopt() is provided by unistd.h */ +#include + +/* rely on the system's getopt.h if present */ +#ifdef HAVE_GETOPT_H +#include +#endif + +/* + * If we have , assume it declares these variables, else do that + * ourselves. (We used to just declare them unconditionally, but Cygwin + * doesn't like that.) + */ +#ifndef HAVE_GETOPT_H + +extern char *optarg; +extern int optind; +extern int opterr; +extern int optopt; + +#ifdef HAVE_INT_OPTRESET +extern int optreset; +#endif + +#endif /* HAVE_GETOPT_H */ + +#ifndef HAVE_GETOPT +extern int getopt(int nargc, char *const * nargv, const char *ostr); +#endif + +#endif /* PG_GETOPT_H */ diff --git a/src/include/port.h b/src/include/port.h index f50fbecf01..aeb7754cb0 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -382,10 +382,6 @@ extern int fls(int mask); #define ftello(a) ftell(a) #endif -#ifndef HAVE_GETOPT -extern int getopt(int nargc, char *const * nargv, const char *ostr); -#endif - #if !defined(HAVE_GETPEEREID) && !defined(WIN32) extern int getpeereid(int sock, uid_t *uid, gid_t *gid); #endif diff --git a/src/port/getopt.c b/src/port/getopt.c index eb50cba1ca..b81fba14b0 100644 --- a/src/port/getopt.c +++ b/src/port/getopt.c @@ -32,6 +32,8 @@ #include "c.h" +#include "pg_getopt.h" + #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95"; #endif /* LIBC_SCCS and not lint */ @@ -49,20 +51,13 @@ int opterr = 1, /* if error message should be printed */ optind = 1, /* index into parent argv vector */ optopt; /* character checked for validity */ char *optarg; /* argument associated with option */ -#else -extern int opterr; -extern int optind; -extern int optopt; -extern char *optarg; #endif #define BADCH (int)'?' #define BADARG (int)':' #define EMSG "" -int getopt(int nargc, char *const * nargv, const char *ostr); - /* * getopt * Parse argc/argv argument vector. diff --git a/src/test/isolation/isolationtester.c b/src/test/isolation/isolationtester.c index e936c01532..ad6732aee7 100644 --- a/src/test/isolation/isolationtester.c +++ b/src/test/isolation/isolationtester.c @@ -10,29 +10,17 @@ #ifdef WIN32 #include #endif - -#ifndef WIN32 #include -#include - -#ifdef HAVE_GETOPT_H -#include -#endif -#else -int getopt(int argc, char *const argv[], const char *optstring); -#endif /* ! WIN32 */ - #ifdef HAVE_SYS_SELECT_H #include #endif #include "libpq-fe.h" #include "pqexpbuffer.h" +#include "pg_getopt.h" #include "isolationtester.h" -extern int optind; - #define PREP_WAITING "isolationtester_waiting" /* diff --git a/src/timezone/zic.c b/src/timezone/zic.c index a399d1f0f1..cda704266a 100644 --- a/src/timezone/zic.c +++ b/src/timezone/zic.c @@ -8,15 +8,11 @@ #include "postgres_fe.h" -#ifdef HAVE_GETOPT_H -#include -#endif #include #include #include -extern int optind; -extern char *optarg; +#include "pg_getopt.h" #include "private.h" #include "pgtz.h"