The attached patch is intended to clean up a bunch of compiler warnings seen on Windows due to mismatches of signedness or constness, unused variables, redefined macros and a missing prototype.
It doesn't clean up all the warnings by any means, but it fixes quite a few. One thing I'm a bit confused about is this type of warning: src\backend\utils\misc\guc-file.c(977): warning C4003: not enough actual parameters for macro 'GUC_yywrap' If someone can suggest a good fix That would be nice. cheers andrew
*** a/src/backend/main/main.c --- b/src/backend/main/main.c *************** *** 393,399 **** get_current_username(const char *progname) return strdup(pw->pw_name); #else long namesize = 256 /* UNLEN */ + 1; ! char *name; name = malloc(namesize); if (!GetUserName(name, &namesize)) --- 393,399 ---- return strdup(pw->pw_name); #else long namesize = 256 /* UNLEN */ + 1; ! unsigned char *name; name = malloc(namesize); if (!GetUserName(name, &namesize)) *** a/src/backend/port/win32/socket.c --- b/src/backend/port/win32/socket.c *************** *** 370,376 **** pgwin32_recv(SOCKET s, char *buf, int len, int f) } int ! pgwin32_send(SOCKET s, char *buf, int len, int flags) { WSABUF wbuf; int r; --- 370,376 ---- } int ! pgwin32_send(SOCKET s, const char *buf, int len, int flags) { WSABUF wbuf; int r; *************** *** 380,386 **** pgwin32_send(SOCKET s, char *buf, int len, int flags) return -1; wbuf.len = len; ! wbuf.buf = buf; /* * Readiness of socket to send data to UDP socket may be not true: socket --- 380,386 ---- return -1; wbuf.len = len; ! wbuf.buf = (char *) buf; /* * Readiness of socket to send data to UDP socket may be not true: socket *** a/src/backend/utils/adt/pg_locale.c --- b/src/backend/utils/adt/pg_locale.c *************** *** 63,69 **** --- 63,78 ---- #include "utils/syscache.h" #ifdef WIN32 + /* + * This Windows file defines StrNCpy. We don't need it here, so we undefine + * it to keep the compiler quiet, and undefine it again after the file is + * included, so we don't accidentally use theirs. + */ + #undef StrNCpy #include <shlwapi.h> + #ifdef StrNCpy + #undef STrNCpy + #endif #endif #define MAX_L10N_DATA 80 *************** *** 555,561 **** strftime_win32(char *dst, size_t dstlen, const wchar_t *format, const struct tm dst[len] = '\0'; if (encoding != PG_UTF8) { ! char *convstr = pg_do_encoding_conversion(dst, len, PG_UTF8, encoding); if (dst != convstr) { --- 564,571 ---- dst[len] = '\0'; if (encoding != PG_UTF8) { ! char *convstr = pg_do_encoding_conversion((unsigned char *) dst, ! len, PG_UTF8, encoding); if (dst != convstr) { *** a/src/bin/initdb/initdb.c --- b/src/bin/initdb/initdb.c *************** *** 1561,1567 **** normalize_locale_name(char *new, const char *old) static void setup_collation(void) { ! #ifdef HAVE_LOCALE_T int i; FILE *locale_a_handle; char localebuf[NAMEDATALEN]; --- 1561,1567 ---- static void setup_collation(void) { ! #if defined(HAVE_LOCALE_T) && !defined(WIN32) int i; FILE *locale_a_handle; char localebuf[NAMEDATALEN]; *************** *** 1687,1696 **** setup_collation(void) printf(_("No usable system locales were found.\n")); printf(_("Use the option \"--debug\" to see details.\n")); } ! #else /* not HAVE_LOCALE_T */ printf(_("not supported on this platform\n")); fflush(stdout); ! #endif /* not HAVE_LOCALE_T */ } /* --- 1687,1696 ---- printf(_("No usable system locales were found.\n")); printf(_("Use the option \"--debug\" to see details.\n")); } ! #else /* not HAVE_LOCALE_T && not WIN32 */ printf(_("not supported on this platform\n")); fflush(stdout); ! #endif /* not HAVE_LOCALE_T && not WIN32*/ } /* *************** *** 2387,2393 **** setlocales(void) --- 2387,2396 ---- #ifdef WIN32 typedef BOOL (WINAPI * __CreateRestrictedToken) (HANDLE, DWORD, DWORD, PSID_AND_ATTRIBUTES, DWORD, PLUID_AND_ATTRIBUTES, DWORD, PSID_AND_ATTRIBUTES, PHANDLE); + /* Windows API define missing from some versions of MingW headers */ + #ifndef DISABLE_MAX_PRIVILEGE #define DISABLE_MAX_PRIVILEGE 0x1 + #endif /* * Create a restricted token and execute the specified process with it. *** a/src/bin/pg_ctl/pg_ctl.c --- b/src/bin/pg_ctl/pg_ctl.c *************** *** 1461,1468 **** typedef BOOL (WINAPI * __SetInformationJobObject) (HANDLE, JOBOBJECTINFOCLASS, L typedef BOOL (WINAPI * __AssignProcessToJobObject) (HANDLE, HANDLE); typedef BOOL (WINAPI * __QueryInformationJobObject) (HANDLE, JOBOBJECTINFOCLASS, LPVOID, DWORD, LPDWORD); ! /* Windows API define missing from MingW headers */ #define DISABLE_MAX_PRIVILEGE 0x1 /* * Create a restricted token, a job object sandbox, and execute the specified --- 1461,1470 ---- typedef BOOL (WINAPI * __AssignProcessToJobObject) (HANDLE, HANDLE); typedef BOOL (WINAPI * __QueryInformationJobObject) (HANDLE, JOBOBJECTINFOCLASS, LPVOID, DWORD, LPDWORD); ! /* Windows API define missing from some versions of MingW headers */ ! #ifndef DISABLE_MAX_PRIVILEGE #define DISABLE_MAX_PRIVILEGE 0x1 + #endif /* * Create a restricted token, a job object sandbox, and execute the specified *** a/src/include/port/win32.h --- b/src/include/port/win32.h *************** *** 336,342 **** SOCKET pgwin32_accept(SOCKET s, struct sockaddr * addr, int *addrlen); int pgwin32_connect(SOCKET s, const struct sockaddr * name, int namelen); int pgwin32_select(int nfds, fd_set *readfs, fd_set *writefds, fd_set *exceptfds, const struct timeval * timeout); int pgwin32_recv(SOCKET s, char *buf, int len, int flags); ! int pgwin32_send(SOCKET s, char *buf, int len, int flags); const char *pgwin32_socket_strerror(int err); int pgwin32_waitforsinglesocket(SOCKET s, int what, int timeout); --- 336,342 ---- int pgwin32_connect(SOCKET s, const struct sockaddr * name, int namelen); int pgwin32_select(int nfds, fd_set *readfs, fd_set *writefds, fd_set *exceptfds, const struct timeval * timeout); int pgwin32_recv(SOCKET s, char *buf, int len, int flags); ! int pgwin32_send(SOCKET s, const char *buf, int len, int flags); const char *pgwin32_socket_strerror(int err); int pgwin32_waitforsinglesocket(SOCKET s, int what, int timeout); *** a/src/pl/plperl/plperl.c --- b/src/pl/plperl/plperl.c *************** *** 3551,3557 **** hv_store_string(HV *hv, const char *key, SV *val) * does not appear that hashes track UTF-8-ness of keys at all in Perl * 5.6. */ ! hlen = -strlen(hkey); ret = hv_store(hv, hkey, hlen, val, 0); if (hkey != key) --- 3551,3557 ---- * does not appear that hashes track UTF-8-ness of keys at all in Perl * 5.6. */ ! hlen = - (int) strlen(hkey); ret = hv_store(hv, hkey, hlen, val, 0); if (hkey != key) *************** *** 3576,3582 **** hv_fetch_string(HV *hv, const char *key) GetDatabaseEncoding(), PG_UTF8); /* See notes in hv_store_string */ ! hlen = -strlen(hkey); ret = hv_fetch(hv, hkey, hlen, 0); if (hkey != key) --- 3576,3582 ---- GetDatabaseEncoding(), PG_UTF8); /* See notes in hv_store_string */ ! hlen = - (int) strlen(hkey); ret = hv_fetch(hv, hkey, hlen, 0); if (hkey != key) *** a/src/pl/plperl/plperl.h --- b/src/pl/plperl/plperl.h *************** *** 26,36 **** --- 26,72 ---- #endif #endif + /* + * Supply a value of PERL_UNUSED_DECL that will satisfy gcc - the one + * perl itself supplies doesn't seem to. + */ + #if defined(__GNUC__) + #define PERL_UNUSED_DECL __attribute__ ((unused)) + #endif + + /* + * Sometimes perl carefully scribbles on our *printf macros. + * So we undefine them ehere and redefine them after it's done its dirty deed. + */ + + #ifdef USE_REPL_SNPRINTF + #undef snprintf + #undef vsnprintf + #endif + + /* required for perl API */ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" + /* put back our snprintf and vsnprintf */ + #ifdef USE_REPL_SNPRINTF + #ifdef snprintf + #undef snprintf + #endif + #ifdef vnsprintf + #undef vsnprintf + #endif + #ifdef __GNUC__ + #define vsnprintf(...) pg_vsnprintf(__VA_ARGS__) + #define snprintf(...) pg_snprintf(__VA_ARGS__) + #else + #define vsnprintf pg_vsnprintf + #define snprintf pg_snprintf + #endif /* __GNUC__ */ + #endif /* USE_REPL_SNPRINTF */ + /* perl version and platform portability */ #define NEED_eval_pv #define NEED_newRV_noinc *** a/src/pl/plpython/plpython.c --- b/src/pl/plpython/plpython.c *************** *** 84,89 **** typedef int Py_ssize_t; --- 84,101 ---- PyObject_HEAD_INIT(type) size, #endif + /* + * Some Python headers define these two symbols (e.g. on Windows) which is + * possibly a bit unfriendly. Use the Postgres definitions (or lack thereof). + */ + #ifdef HAVE_STRERROR + #undef HAVE_STRERROR + #endif + + #ifdef HAVE_TZNAME + #undef HAVE_TZNAME + #endif + #include "postgres.h" /* system stuff */ *** a/src/port/getopt.c --- b/src/port/getopt.c *************** *** 61,66 **** extern char *optarg; --- 61,68 ---- #define BADARG (int)':' #define EMSG "" + int getopt(int nargc, char *const * nargv, const char * ostr); + /* * getopt * Parse argc/argv argument vector. *************** *** 72,81 **** extern char *optarg; * returning -1.) */ int ! getopt(nargc, nargv, ostr) ! int nargc; ! char *const * nargv; ! const char *ostr; { static char *place = EMSG; /* option letter processing */ char *oli; /* option letter list index */ --- 74,80 ---- * returning -1.) */ int ! getopt(int nargc, char *const * nargv, const char * ostr) { static char *place = EMSG; /* option letter processing */ char *oli; /* option letter list index */ *** a/src/port/noblock.c --- b/src/port/noblock.c *************** *** 23,29 **** pg_set_noblock(pgsocket sock) #if !defined(WIN32) return (fcntl(sock, F_SETFL, O_NONBLOCK) != -1); #else ! long ioctlsocket_ret = 1; /* Returns non-0 on failure, while fcntl() returns -1 on failure */ return (ioctlsocket(sock, FIONBIO, &ioctlsocket_ret) == 0); --- 23,29 ---- #if !defined(WIN32) return (fcntl(sock, F_SETFL, O_NONBLOCK) != -1); #else ! unsigned long ioctlsocket_ret = 1; /* Returns non-0 on failure, while fcntl() returns -1 on failure */ return (ioctlsocket(sock, FIONBIO, &ioctlsocket_ret) == 0); *************** *** 42,48 **** pg_set_block(pgsocket sock) return false; return true; #else ! long ioctlsocket_ret = 0; /* Returns non-0 on failure, while fcntl() returns -1 on failure */ return (ioctlsocket(sock, FIONBIO, &ioctlsocket_ret) == 0); --- 42,48 ---- return false; return true; #else ! unsigned long ioctlsocket_ret = 0; /* Returns non-0 on failure, while fcntl() returns -1 on failure */ return (ioctlsocket(sock, FIONBIO, &ioctlsocket_ret) == 0); *** a/src/test/regress/pg_regress.c --- b/src/test/regress/pg_regress.c *************** *** 140,148 **** __attribute__((format(printf, 2, 3))); #ifdef WIN32 typedef BOOL (WINAPI * __CreateRestrictedToken) (HANDLE, DWORD, DWORD, PSID_AND_ATTRIBUTES, DWORD, PLUID_AND_ATTRIBUTES, DWORD, PSID_AND_ATTRIBUTES, PHANDLE); ! /* Windows API define missing from MingW headers */ #define DISABLE_MAX_PRIVILEGE 0x1 #endif /* * allow core files if possible. --- 140,150 ---- #ifdef WIN32 typedef BOOL (WINAPI * __CreateRestrictedToken) (HANDLE, DWORD, DWORD, PSID_AND_ATTRIBUTES, DWORD, PLUID_AND_ATTRIBUTES, DWORD, PSID_AND_ATTRIBUTES, PHANDLE); ! /* Windows API define missing from some versions of MingW headers */ ! #ifndef DISABLE_MAX_PRIVILEGE #define DISABLE_MAX_PRIVILEGE 0x1 #endif + #endif /* * allow core files if possible. *** a/src/timezone/pgtz.c --- b/src/timezone/pgtz.c *************** *** 1125,1131 **** identify_system_timezone(void) for (idx = 0;; idx++) { char keyname[256]; ! char zonename[256]; DWORD namesize; FILETIME lastwrite; HKEY key; --- 1125,1131 ---- for (idx = 0;; idx++) { char keyname[256]; ! unsigned char zonename[256]; DWORD namesize; FILETIME lastwrite; HKEY key;
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers