Back out win32 patch so we can apply it separately.

This commit is contained in:
Bruce Momjian 2004-01-26 22:54:58 +00:00
parent f4921e5ca3
commit ede3b762a3
8 changed files with 40 additions and 266 deletions

View File

@ -13,7 +13,7 @@
* *
* Copyright (c) 2001-2003, PostgreSQL Global Development Group * Copyright (c) 2001-2003, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.54 2004/01/26 22:51:55 momjian Exp $ * $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.55 2004/01/26 22:54:56 momjian Exp $
* ---------- * ----------
*/ */
#include "postgres.h" #include "postgres.h"
@ -147,7 +147,7 @@ static void pgstat_recv_resetcounter(PgStat_MsgResetcounter *msg, int len);
#define piperead(a,b,c) read(a,b,c) #define piperead(a,b,c) read(a,b,c)
#define pipewrite(a,b,c) write(a,b,c) #define pipewrite(a,b,c) write(a,b,c)
#else #else
extern int pgpipe(int handles[2]); /* pgpipe() is in /src/port */ /* pgpipe() is in /src/port */
#define piperead(a,b,c) recv(a,b,c,0) #define piperead(a,b,c) recv(a,b,c,0)
#define pipewrite(a,b,c) send(a,b,c,0) #define pipewrite(a,b,c) send(a,b,c,0)
#endif #endif
@ -322,7 +322,7 @@ pgstat_init(void)
/* /*
* Create the pipe that controls the statistics collector shutdown * Create the pipe that controls the statistics collector shutdown
*/ */
if (pgpipe(pgStatPmPipe) < 0) if (pipe(pgStatPmPipe) < 0)
{ {
ereport(LOG, ereport(LOG,
(errcode_for_socket_access(), (errcode_for_socket_access(),

View File

@ -37,7 +37,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.360 2004/01/26 22:51:55 momjian Exp $ * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.361 2004/01/26 22:54:56 momjian Exp $
* *
* NOTES * NOTES
* *
@ -141,11 +141,6 @@ typedef struct bkend
static Dllist *BackendList; static Dllist *BackendList;
#ifdef EXEC_BACKEND
#define NUM_BACKENDARRAY_ELEMS (2*MaxBackends)
static Backend *ShmemBackendArray;
#endif
/* The socket number we are listening for connections on */ /* The socket number we are listening for connections on */
int PostPortNumber; int PostPortNumber;
char *UnixSocketDir; char *UnixSocketDir;
@ -304,14 +299,6 @@ __attribute__((format(printf, 1, 2)));
#ifdef EXEC_BACKEND #ifdef EXEC_BACKEND
#ifdef WIN32 #ifdef WIN32
pid_t win32_forkexec(const char* path, char *argv[]); pid_t win32_forkexec(const char* path, char *argv[]);
static void win32_AddChild(pid_t pid, HANDLE handle);
static void win32_RemoveChild(pid_t pid);
static pid_t win32_waitpid(int *exitstatus);
static pid_t *win32_childPIDArray;
static HANDLE *win32_childHNDArray;
static unsigned long win32_numChildren = 0;
#endif #endif
static pid_t Backend_forkexec(Port *port); static pid_t Backend_forkexec(Port *port);
@ -319,11 +306,6 @@ static pid_t Backend_forkexec(Port *port);
static unsigned long tmpBackendFileNum = 0; static unsigned long tmpBackendFileNum = 0;
void read_backend_variables(unsigned long id, Port *port); void read_backend_variables(unsigned long id, Port *port);
static bool write_backend_variables(Port *port); static bool write_backend_variables(Port *port);
size_t ShmemBackendArraySize(void);
void ShmemBackendArrayAllocation(void);
static void ShmemBackendArrayAdd(Backend *bn);
static void ShmemBackendArrayRemove(pid_t pid);
#endif #endif
#define StartupDataBase() SSDataBase(BS_XLOG_STARTUP) #define StartupDataBase() SSDataBase(BS_XLOG_STARTUP)
@ -448,7 +430,7 @@ PostmasterMain(int argc, char *argv[])
*/ */
umask((mode_t) 0077); umask((mode_t) 0077);
MyProcPid = PostmasterPid = getpid(); MyProcPid = getpid();
/* /*
* Fire up essential subsystems: memory management * Fire up essential subsystems: memory management
@ -843,21 +825,6 @@ PostmasterMain(int argc, char *argv[])
*/ */
BackendList = DLNewList(); BackendList = DLNewList();
#ifdef WIN32
/*
* Initialize the child pid/HANDLE arrays
*/
/* FIXME: [fork/exec] Ideally, we would resize these arrays with changes
* in MaxBackends, but this'll do as a first order solution.
*/
win32_childPIDArray = (HANDLE*)malloc(NUM_BACKENDARRAY_ELEMS*sizeof(pid_t));
win32_childHNDArray = (HANDLE*)malloc(NUM_BACKENDARRAY_ELEMS*sizeof(HANDLE));
if (!win32_childPIDArray || !win32_childHNDArray)
ereport(LOG,
(errcode(ERRCODE_OUT_OF_MEMORY),
errmsg("out of memory")));
#endif
/* /*
* Record postmaster options. We delay this till now to avoid * Record postmaster options. We delay this till now to avoid
* recording bogus options (eg, NBuffers too high for available * recording bogus options (eg, NBuffers too high for available
@ -1290,7 +1257,11 @@ ProcessStartupPacket(Port *port, bool SSLdone)
if (proto == CANCEL_REQUEST_CODE) if (proto == CANCEL_REQUEST_CODE)
{ {
#ifdef EXEC_BACKEND
abort(); /* FIXME: [fork/exec] Whoops. Not handled... yet */
#else
processCancelRequest(port, buf); processCancelRequest(port, buf);
#endif
return 127; /* XXX */ return 127; /* XXX */
} }
@ -1523,12 +1494,8 @@ processCancelRequest(Port *port, void *pkt)
CancelRequestPacket *canc = (CancelRequestPacket *) pkt; CancelRequestPacket *canc = (CancelRequestPacket *) pkt;
int backendPID; int backendPID;
long cancelAuthCode; long cancelAuthCode;
Backend *bp;
#ifndef EXEC_BACKEND
Dlelem *curr; Dlelem *curr;
#else Backend *bp;
int i;
#endif
backendPID = (int) ntohl(canc->backendPID); backendPID = (int) ntohl(canc->backendPID);
cancelAuthCode = (long) ntohl(canc->cancelAuthCode); cancelAuthCode = (long) ntohl(canc->cancelAuthCode);
@ -1547,17 +1514,16 @@ processCancelRequest(Port *port, void *pkt)
backendPID))); backendPID)));
return; return;
} }
#ifdef EXEC_BACKEND
else
AttachSharedMemoryAndSemaphores();
#endif
/* See if we have a matching backend */ /* See if we have a matching backend */
#ifndef EXEC_BACKEND
for (curr = DLGetHead(BackendList); curr; curr = DLGetSucc(curr)) for (curr = DLGetHead(BackendList); curr; curr = DLGetSucc(curr))
{ {
bp = (Backend *) DLE_VAL(curr); bp = (Backend *) DLE_VAL(curr);
#else
for (i = 0; i < NUM_BACKENDARRAY_ELEMS; i++)
{
bp = (Backend*) &ShmemBackendArray[i];
#endif
if (bp->pid == backendPID) if (bp->pid == backendPID)
{ {
if (bp->cancel_key == cancelAuthCode) if (bp->cancel_key == cancelAuthCode)
@ -1880,12 +1846,14 @@ reaper(SIGNAL_ARGS)
{ {
int save_errno = errno; int save_errno = errno;
#ifdef WIN32
#warning fix waidpid for Win32
#else
#ifdef HAVE_WAITPID #ifdef HAVE_WAITPID
int status; /* backend exit status */ int status; /* backend exit status */
#else #else
#ifndef WIN32
union wait status; /* backend exit status */ union wait status; /* backend exit status */
#endif
#endif #endif
int exitstatus; int exitstatus;
int pid; /* process id of dead backend */ int pid; /* process id of dead backend */
@ -1899,21 +1867,9 @@ reaper(SIGNAL_ARGS)
{ {
exitstatus = status; exitstatus = status;
#else #else
#ifndef WIN32
while ((pid = wait3(&status, WNOHANG, NULL)) > 0) while ((pid = wait3(&status, WNOHANG, NULL)) > 0)
{ {
exitstatus = status.w_status; exitstatus = status.w_status;
#else
while ((pid = win32_waitpid(&exitstatus)) > 0)
{
/*
* We need to do this here, and not in CleanupProc, since this
* is to be called on all children when we are done with them.
* Could move to LogChildExit, but that seems like asking for
* future trouble...
*/
win32_RemoveChild(pid);
#endif
#endif #endif
/* /*
@ -2001,6 +1957,7 @@ reaper(SIGNAL_ARGS)
CleanupProc(pid, exitstatus); CleanupProc(pid, exitstatus);
} /* loop over pending child-death reports */ } /* loop over pending child-death reports */
#endif
if (FatalError) if (FatalError)
{ {
@ -2065,9 +2022,6 @@ CleanupProc(int pid,
bp = (Backend *) DLE_VAL(curr); bp = (Backend *) DLE_VAL(curr);
if (bp->pid == pid) if (bp->pid == pid)
{ {
#ifdef EXEC_BACKEND
ShmemBackendArrayRemove(bp->pid);
#endif
DLRemove(curr); DLRemove(curr);
free(bp); free(bp);
DLFreeElem(curr); DLFreeElem(curr);
@ -2138,9 +2092,6 @@ CleanupProc(int pid,
/* /*
* Found entry for freshly-dead backend, so remove it. * Found entry for freshly-dead backend, so remove it.
*/ */
#ifdef EXEC_BACKEND
ShmemBackendArrayRemove(bp->pid);
#endif
DLRemove(curr); DLRemove(curr);
free(bp); free(bp);
DLFreeElem(curr); DLFreeElem(curr);
@ -2345,9 +2296,6 @@ BackendStartup(Port *port)
*/ */
bn->pid = pid; bn->pid = pid;
bn->cancel_key = MyCancelKey; bn->cancel_key = MyCancelKey;
#ifdef EXEC_BACKEND
ShmemBackendArrayAdd(bn);
#endif
DLAddHead(BackendList, DLNewElem(bn)); DLAddHead(BackendList, DLNewElem(bn));
return STATUS_OK; return STATUS_OK;
@ -2694,9 +2642,6 @@ SubPostmasterMain(int argc, char* argv[])
memset((void*)&port, 0, sizeof(Port)); memset((void*)&port, 0, sizeof(Port));
Assert(argc == 2); Assert(argc == 2);
/* Do this sooner rather than later... */
IsUnderPostmaster = true; /* we are a postmaster subprocess now */
/* Setup global context */ /* Setup global context */
MemoryContextInit(); MemoryContextInit();
InitializeGUCOptions(); InitializeGUCOptions();
@ -2716,9 +2661,6 @@ SubPostmasterMain(int argc, char* argv[])
load_user(); load_user();
load_group(); load_group();
/* Attach process to shared segments */
AttachSharedMemoryAndSemaphores();
/* Run backend */ /* Run backend */
proc_exit(BackendRun(&port)); proc_exit(BackendRun(&port));
} }
@ -3187,9 +3129,6 @@ SSDataBase(int xlop)
bn->pid = pid; bn->pid = pid;
bn->cancel_key = PostmasterRandom(); bn->cancel_key = PostmasterRandom();
#ifdef EXEC_BACKEND
ShmemBackendArrayAdd(bn);
#endif
DLAddHead(BackendList, DLNewElem(bn)); DLAddHead(BackendList, DLNewElem(bn));
/* /*
@ -3339,7 +3278,6 @@ write_backend_variables(Port *port)
write_var(ShmemIndexLock,fp); write_var(ShmemIndexLock,fp);
write_var(ShmemVariableCache,fp); write_var(ShmemVariableCache,fp);
write_var(ShmemIndexAlloc,fp); write_var(ShmemIndexAlloc,fp);
write_var(ShmemBackendArray,fp);
write_var(LWLockArray,fp); write_var(LWLockArray,fp);
write_var(ProcStructLock,fp); write_var(ProcStructLock,fp);
@ -3347,7 +3285,6 @@ write_backend_variables(Port *port)
write_var(PreAuthDelay,fp); write_var(PreAuthDelay,fp);
write_var(debug_flag,fp); write_var(debug_flag,fp);
write_var(PostmasterPid,fp);
/* Release file */ /* Release file */
if (FreeFile(fp)) if (FreeFile(fp))
@ -3401,7 +3338,6 @@ read_backend_variables(unsigned long id, Port *port)
read_var(ShmemIndexLock,fp); read_var(ShmemIndexLock,fp);
read_var(ShmemVariableCache,fp); read_var(ShmemVariableCache,fp);
read_var(ShmemIndexAlloc,fp); read_var(ShmemIndexAlloc,fp);
read_var(ShmemBackendArray,fp);
read_var(LWLockArray,fp); read_var(LWLockArray,fp);
read_var(ProcStructLock,fp); read_var(ProcStructLock,fp);
@ -3409,7 +3345,6 @@ read_backend_variables(unsigned long id, Port *port)
read_var(PreAuthDelay,fp); read_var(PreAuthDelay,fp);
read_var(debug_flag,fp); read_var(debug_flag,fp);
read_var(PostmasterPid,fp);
/* Release file */ /* Release file */
FreeFile(fp); FreeFile(fp);
@ -3419,55 +3354,6 @@ read_backend_variables(unsigned long id, Port *port)
errmsg("could not remove file \"%s\": %m", filename))); errmsg("could not remove file \"%s\": %m", filename)));
} }
size_t ShmemBackendArraySize(void)
{
return (NUM_BACKENDARRAY_ELEMS*sizeof(Backend));
}
void ShmemBackendArrayAllocation(void)
{
size_t size = ShmemBackendArraySize();
ShmemBackendArray = (Backend*)ShmemAlloc(size);
memset(ShmemBackendArray, 0, size);
}
static void ShmemBackendArrayAdd(Backend *bn)
{
int i;
for (i = 0; i < NUM_BACKENDARRAY_ELEMS; i++)
{
/* Find an empty slot */
if (ShmemBackendArray[i].pid == 0)
{
ShmemBackendArray[i] = *bn;
return;
}
}
/* FIXME: [fork/exec] some sort of error */
abort();
}
static void ShmemBackendArrayRemove(pid_t pid)
{
int i;
for (i = 0; i < NUM_BACKENDARRAY_ELEMS; i++)
{
if (ShmemBackendArray[i].pid == pid)
{
/* Mark the slot as empty */
ShmemBackendArray[i].pid = 0;
return;
}
}
/* Something stronger than WARNING here? */
ereport(WARNING,
(errmsg_internal("unable to find backend entry with pid %d",
pid)));
}
#endif #endif
#ifdef WIN32 #ifdef WIN32
@ -3507,111 +3393,14 @@ pid_t win32_forkexec(const char* path, char *argv[])
return -1; return -1;
} }
if (!IsUnderPostmaster) /*
/* We are the Postmaster creating a child... */ FIXME: [fork/exec] we might need to keep the following handle/s,
win32_AddChild(pi.dwProcessId,pi.hProcess); depending on how we implement signalling.
else */
CloseHandle(pi.hProcess); CloseHandle(pi.hProcess);
CloseHandle(pi.hThread); CloseHandle(pi.hThread);
return pi.dwProcessId; return pi.dwProcessId;
} }
/*
* Note: The following three functions must not be interrupted (eg. by signals).
* As the Postgres Win32 signalling architecture (currently) requires polling,
* or APC checking functions which aren't used here, this is not an issue.
*
* We keep two separate arrays, instead of a single array of pid/HANDLE structs,
* to avoid having to re-create a handle array for WaitForMultipleObjects on
* each call to win32_waitpid.
*/
static void win32_AddChild(pid_t pid, HANDLE handle)
{
Assert(win32_childPIDArray && win32_childHNDArray);
if (win32_numChildren < NUM_BACKENDARRAY_ELEMS)
{
win32_childPIDArray[win32_numChildren] = pid;
win32_childHNDArray[win32_numChildren] = handle;
++win32_numChildren;
}
else
/* FIXME: [fork/exec] some sort of error */
abort();
}
static void win32_RemoveChild(pid_t pid)
{
int i;
Assert(win32_childPIDArray && win32_childHNDArray);
for (i = 0; i < win32_numChildren; i++)
{
if (win32_childPIDArray[i] == pid)
{
CloseHandle(win32_childHNDArray[i]);
/* Swap last entry into the "removed" one */
--win32_numChildren;
win32_childPIDArray[win32_numChildren] = win32_childPIDArray[i];
win32_childHNDArray[win32_numChildren] = win32_childHNDArray[i];
return;
}
}
/* Something stronger than WARNING here? */
ereport(WARNING,
(errmsg_internal("unable to find child entry with pid %d",
pid)));
}
static pid_t win32_waitpid(int *exitstatus)
{
Assert(win32_childPIDArray && win32_childHNDArray);
elog(DEBUG3,"waiting on %d children",win32_numChildren);
if (win32_numChildren > 0)
{
/*
* Note: Do NOT use WaitForMultipleObjectsEx, as we don't
* want to run queued APCs here.
*/
int index;
DWORD exitCode;
DWORD ret = WaitForMultipleObjects(win32_numChildren,win32_childHNDArray,FALSE,0);
switch (ret)
{
case WAIT_FAILED:
ereport(ERROR,
(errmsg_internal("failed to wait on %d children",
win32_numChildren)));
/* Fall through to WAIT_TIMEOUTs return */
case WAIT_TIMEOUT:
/* No children have finished */
return -1;
default:
/* Get the exit code, and return the PID of, the respective process */
index = ret-WAIT_OBJECT_0;
Assert(index >= 0 && index < win32_numChildren);
if (!GetExitCodeProcess(win32_childHNDArray[index],&exitCode))
/*
* If we get this far, this should never happen, but, then again...
* No choice other than to assume a catastrophic failure.
*/
ereport(FATAL,
(errmsg_internal("failed to get exit code for child %d",
win32_childPIDArray[index])));
*exitstatus = (int)exitCode;
return win32_childPIDArray[index];
}
}
/* No children */
return -1;
}
#endif #endif

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/storage/ipc/ipci.c,v 1.61 2004/01/26 22:51:56 momjian Exp $ * $PostgreSQL: pgsql/src/backend/storage/ipc/ipci.c,v 1.62 2004/01/26 22:54:57 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -63,9 +63,6 @@ CreateSharedMemoryAndSemaphores(bool makePrivate,
size += LWLockShmemSize(); size += LWLockShmemSize();
size += SInvalShmemSize(maxBackends); size += SInvalShmemSize(maxBackends);
size += FreeSpaceShmemSize(); size += FreeSpaceShmemSize();
#ifdef EXEC_BACKEND
size += ShmemBackendArraySize();
#endif
#ifdef STABLE_MEMORY_STORAGE #ifdef STABLE_MEMORY_STORAGE
size += MMShmemSize(); size += MMShmemSize();
#endif #endif
@ -135,13 +132,6 @@ CreateSharedMemoryAndSemaphores(bool makePrivate,
* Set up child-to-postmaster signaling mechanism * Set up child-to-postmaster signaling mechanism
*/ */
PMSignalInit(); PMSignalInit();
#ifdef EXEC_BACKEND
/*
* Alloc the win32 shared backend array
*/
ShmemBackendArrayAllocation();
#endif
} }

View File

@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/storage/ipc/pmsignal.c,v 1.9 2004/01/26 22:51:56 momjian Exp $ * $PostgreSQL: pgsql/src/backend/storage/ipc/pmsignal.c,v 1.10 2004/01/26 22:54:57 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -63,8 +63,8 @@ SendPostmasterSignal(PMSignalReason reason)
return; return;
/* Atomically set the proper flag */ /* Atomically set the proper flag */
PMSignalFlags[reason] = true; PMSignalFlags[reason] = true;
/* Send signal to postmaster */ /* Send signal to postmaster (assume it is our direct parent) */
kill(PostmasterPid, SIGUSR1); kill(getppid(), SIGUSR1);
} }
/* /*

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.384 2004/01/26 22:51:56 momjian Exp $ * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.385 2004/01/26 22:54:57 momjian Exp $
* *
* NOTES * NOTES
* this is the "main" module of the postgres backend and * this is the "main" module of the postgres backend and
@ -2535,7 +2535,9 @@ PostgresMain(int argc, char *argv[], const char *username)
errmsg("invalid command-line arguments for server process"), errmsg("invalid command-line arguments for server process"),
errhint("Try \"%s --help\" for more information.", argv[0]))); errhint("Try \"%s --help\" for more information.", argv[0])));
} }
#ifdef EXEC_BACKEND
AttachSharedMemoryAndSemaphores();
#endif
XLOGPathInit(); XLOGPathInit();
BaseInit(); BaseInit();

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/init/globals.c,v 1.78 2004/01/26 22:51:56 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/init/globals.c,v 1.79 2004/01/26 22:54:57 momjian Exp $
* *
* NOTES * NOTES
* Globals used all over the place should be declared here and not * Globals used all over the place should be declared here and not
@ -53,8 +53,6 @@ BackendId MyBackendId;
char *DatabasePath = NULL; char *DatabasePath = NULL;
Oid MyDatabaseId = InvalidOid; Oid MyDatabaseId = InvalidOid;
pid_t PostmasterPid = 0;
/* these are initialized for the bootstrap/standalone case: */ /* these are initialized for the bootstrap/standalone case: */
bool IsPostmasterEnvironment = false; bool IsPostmasterEnvironment = false;
bool IsUnderPostmaster = false; bool IsUnderPostmaster = false;

View File

@ -12,7 +12,7 @@
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.146 2004/01/26 22:51:56 momjian Exp $ * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.147 2004/01/26 22:54:57 momjian Exp $
* *
* NOTES * NOTES
* some of the information in this file should be moved to * some of the information in this file should be moved to
@ -109,14 +109,10 @@ do { \
#else #else
#define PG_USLEEP(_usec) \ #define PG_USLEEP(_usec) \
do { \ do { \
Sleep((_usec) < 500 ? 1 : ((_usec)+500)/ 1000); \ Sleep(_usec < 500) ? 1 : (_usec+500)/ 1000); \
} while(0) } while(0)
#endif #endif
#ifdef WIN32
#define ftruncate(a,b) chsize(a,b)
#endif
/***************************************************************************** /*****************************************************************************
* globals.h -- * * globals.h -- *
*****************************************************************************/ *****************************************************************************/
@ -136,7 +132,6 @@ extern void ClosePostmasterPorts(bool pgstat_too);
/* /*
* from utils/init/globals.c * from utils/init/globals.c
*/ */
extern pid_t PostmasterPid;
extern bool IsPostmasterEnvironment; extern bool IsPostmasterEnvironment;
extern bool IsUnderPostmaster; extern bool IsUnderPostmaster;

View File

@ -1,4 +1,4 @@
/* $PostgreSQL: pgsql/src/include/port/win32.h,v 1.14 2004/01/26 22:51:56 momjian Exp $ */ /* $PostgreSQL: pgsql/src/include/port/win32.h,v 1.15 2004/01/26 22:54:58 momjian Exp $ */
/* undefine and redefine after #include */ /* undefine and redefine after #include */
#undef mkdir #undef mkdir
@ -15,7 +15,7 @@
#define NOFILE 100 #define NOFILE 100
/* defines for dynamic linking on Win32 platform */ /* defines for dynamic linking on Win32 platform */
#if defined(__CYGWIN__) || defined(__MINGW32__) #ifdef __CYGWIN__
#if __GNUC__ && ! defined (__declspec) #if __GNUC__ && ! defined (__declspec)
#error You need egcs 1.1 or newer for compiling! #error You need egcs 1.1 or newer for compiling!
@ -27,7 +27,7 @@
#define DLLIMPORT __declspec (dllimport) #define DLLIMPORT __declspec (dllimport)
#endif #endif
#elif defined(WIN32) && defined(_MSC_VER) /* not CYGWIN or MingW */ #elif defined(WIN32) && defined(_MSC_VER) /* not CYGWIN */
#if defined(_DLL) #if defined(_DLL)
#define DLLIMPORT __declspec (dllexport) #define DLLIMPORT __declspec (dllexport)
@ -35,7 +35,7 @@
#define DLLIMPORT __declspec (dllimport) #define DLLIMPORT __declspec (dllimport)
#endif #endif
#else /* not CYGWIN, not MSVC, not MingW */ #else /* not CYGWIN, not MSVC */
#define DLLIMPORT #define DLLIMPORT
#endif #endif