diff options
author | Marc G. Fournier <scrappy@hub.org> | 1998-08-27 13:25:40 +0000 |
---|---|---|
committer | Marc G. Fournier <scrappy@hub.org> | 1998-08-27 13:25:40 +0000 |
commit | 602ac52d3ee453158c16b655835379c9a110f095 (patch) | |
tree | 805fabd8a381d40b465be74ecb419fdb26c6c8f8 /src | |
parent | 50ad4a70b97d82977fa2f539ea29abd3e2804697 (diff) | |
download | postgresql-602ac52d3ee453158c16b655835379c9a110f095.tar.gz postgresql-602ac52d3ee453158c16b655835379c9a110f095.zip |
From: Magnus Hagander <mha@edu.sollentuna.se>
Ok. Here is a patch to make psql work on Win32 (as a console mode
application, of course).
It requires getopt.c to be in src/utils - works fine with the FreeBSD
version of it.
Also, the file win32.mak should go into src/bin/psql.
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/psql/psql.c | 43 | ||||
-rw-r--r-- | src/bin/psql/win32.mak | 64 | ||||
-rw-r--r-- | src/utils/getopt.c | 117 | ||||
-rw-r--r-- | src/win32.mak | 2 |
4 files changed, 223 insertions, 3 deletions
diff --git a/src/bin/psql/psql.c b/src/bin/psql/psql.c index 96f8269e8e7..d9c3fd1e5ee 100644 --- a/src/bin/psql/psql.c +++ b/src/bin/psql/psql.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.155 1998/08/22 04:49:05 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.156 1998/08/27 13:25:18 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -17,10 +17,16 @@ #include <signal.h> #include <errno.h> #include <sys/types.h> +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <io.h> +#else #include <sys/param.h> /* for MAXPATHLEN */ -#include <sys/stat.h> #include <sys/ioctl.h> #include <unistd.h> +#endif +#include <sys/stat.h> #include <fcntl.h> #include <ctype.h> #include "postgres.h" @@ -58,6 +64,23 @@ #endif #endif + +#ifdef WIN32 +#define popen(x,y) _popen(x,y) +#define pclose(x) _pclose(x) +#define open(x,y,z) _open(x,y,z) +#define strcasecmp(x,y) stricmp(x,y) +#define pqsignal(x,y) +#define MAXPATHLEN MAX_PATH +#define R_OK 0 + +/* getopt is not in the standard includes on Win32 */ +extern char *optarg; +extern int optind, opterr, optopt; +int getopt (int, char * const [], const char *); +char *__progname = "psql"; +#endif + /* This prompt string is assumed to have at least 3 characters by code in MainLoop(). * A character two characters from the end is replaced each time by a mode character. */ @@ -1468,7 +1491,11 @@ do_edit(const char *filename_arg, char *query, int *status_p) } else { +#ifndef WIN32 sprintf(tmp, "/tmp/psql.%ld.%ld", (long) geteuid(), (long) getpid()); +#else + GetTempFileName(".","psql",0,tmp); +#endif fname = tmp; unlink(tmp); if (ql > 0) @@ -1503,7 +1530,7 @@ do_edit(const char *filename_arg, char *query, int *status_p) else { editFile(fname); - if ((fd = open(fname, O_RDONLY)) == -1) + if ((fd = open(fname, O_RDONLY, 0)) == -1) { perror(fname); if (!filename_arg) @@ -2648,6 +2675,16 @@ main(int argc, char **argv) char *home = NULL; /* Used to store $HOME */ +#ifdef WIN32 + { + WSADATA wsaData; + if (WSAStartup(MAKEWORD(1,1),&wsaData)) { + fprintf(stderr,"Failed to start winsock: %i\n",WSAGetLastError()); + exit(1); + } + } +#endif + MemSet(&settings, 0, sizeof settings); settings.opt.align = 1; settings.opt.header = 1; diff --git a/src/bin/psql/win32.mak b/src/bin/psql/win32.mak new file mode 100644 index 00000000000..4a2bb95e569 --- /dev/null +++ b/src/bin/psql/win32.mak @@ -0,0 +1,64 @@ +# Makefile for Microsoft Visual C++ 5.0 (or compat)
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+CPP=cl.exe
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\psql.exe"
+
+CLEAN :
+ -@erase "$(INTDIR)\psql.obj"
+ -@erase "$(INTDIR)\stringutils.obj"
+ -@erase "$(INTDIR)\getopt.obj"
+ -@erase "$(INTDIR)\vc50.idb"
+ -@erase "$(OUTDIR)\psql.exe"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D\
+ "_MBCS" /Fp"$(INTDIR)\psql.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c \
+ /I ..\..\include /I ..\..\interfaces\libpq
+CPP_OBJS=.\Release/
+CPP_SBRS=.
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
+ odbccp32.lib wsock32.lib /nologo /subsystem:console /incremental:no\
+ /pdb:"$(OUTDIR)\psql.pdb" /machine:I386 /out:"$(OUTDIR)\psql.exe"
+LINK32_OBJS= \
+ "$(INTDIR)\psql.obj" \
+ "$(INTDIR)\stringutils.obj" \
+ "$(INTDIR)\getopt.obj" \
+ "..\..\interfaces\libpq\Release\libpqdll.lib"
+
+"$(OUTDIR)\psql.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+"$(OUTDIR)\getopt.obj" : "$(OUTDIR)" ..\..\utils\getopt.c
+ $(CPP) @<<
+ $(CPP_PROJ) ..\..\utils\getopt.c
+<<
+
+.c{$(CPP_OBJS)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(CPP_OBJS)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
diff --git a/src/utils/getopt.c b/src/utils/getopt.c new file mode 100644 index 00000000000..5dddf86072a --- /dev/null +++ b/src/utils/getopt.c @@ -0,0 +1,117 @@ +/* + * Copyright (c) 1987, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95"; +#endif /* LIBC_SCCS and not lint */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int opterr = 1, /* if error message should be printed */ + optind = 1, /* index into parent argv vector */ + optopt, /* character checked for validity */ + optreset; /* reset getopt */ +char *optarg; /* argument associated with option */ + +#define BADCH (int)'?' +#define BADARG (int)':' +#define EMSG "" + +/* + * getopt -- + * Parse argc/argv argument vector. + */ +int +getopt(nargc, nargv, ostr) + int nargc; + char * const *nargv; + const char *ostr; +{ + extern char *__progname; + static char *place = EMSG; /* option letter processing */ + char *oli; /* option letter list index */ + + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc || *(place = nargv[optind]) != '-') { + place = EMSG; + return (-1); + } + if (place[1] && *++place == '-') { /* found "--" */ + ++optind; + place = EMSG; + return (-1); + } + } /* option letter okay? */ + if ((optopt = (int)*place++) == (int)':' || + !(oli = strchr(ostr, optopt))) { + /* + * if the user didn't specify '-' as an option, + * assume it means -1. + */ + if (optopt == (int)'-') + return (-1); + if (!*place) + ++optind; + if (opterr && *ostr != ':') + (void)fprintf(stderr, + "%s: illegal option -- %c\n", __progname, optopt); + return (BADCH); + } + if (*++oli != ':') { /* don't need argument */ + optarg = NULL; + if (!*place) + ++optind; + } + else { /* need an argument */ + if (*place) /* no white space */ + optarg = place; + else if (nargc <= ++optind) { /* no arg */ + place = EMSG; + if (*ostr == ':') + return (BADARG); + if (opterr) + (void)fprintf(stderr, + "%s: option requires an argument -- %c\n", + __progname, optopt); + return (BADCH); + } + else /* white space */ + optarg = nargv[optind]; + place = EMSG; + ++optind; + } + return (optopt); /* dump back option letter */ +} diff --git a/src/win32.mak b/src/win32.mak index fbfc35048ae..48edd8e33d5 100644 --- a/src/win32.mak +++ b/src/win32.mak @@ -13,5 +13,7 @@ NULL=nul ALL: cd interfaces\libpq nmake /f win32.mak + cd ..\..\bin\psql + nmake /f win32.mak cd ..\.. echo All Win32 parts have been built! |