summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/preproc/ecpg.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1998-03-20 03:08:11 +0000
committerBruce Momjian <bruce@momjian.us>1998-03-20 03:08:11 +0000
commit80f7c4138859543e447b5358623eb63bca1bbd68 (patch)
tree03fc37441dbd3f31f2ecfe4ee15aa803f652c9a0 /src/interfaces/ecpg/preproc/ecpg.c
parent561aead3f163549bfd8fa86c8cf98a38a9bb6981 (diff)
Here's my next patch to bring ecpg to version 1.1. It now correctly
handles all transaction commands and the exec sql include command. Michael Meskes
Diffstat (limited to 'src/interfaces/ecpg/preproc/ecpg.c')
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.c99
1 files changed, 64 insertions, 35 deletions
diff --git a/src/interfaces/ecpg/preproc/ecpg.c b/src/interfaces/ecpg/preproc/ecpg.c
index e31d4cfd422..321406f85bc 100644
--- a/src/interfaces/ecpg/preproc/ecpg.c
+++ b/src/interfaces/ecpg/preproc/ecpg.c
@@ -9,6 +9,8 @@
#include <getopt.h>
#else
#include <unistd.h>
+extern int optind;
+extern char *optarg;
#endif
#include <stdlib.h>
#if defined(HAVE_STRING_H)
@@ -19,19 +21,37 @@
#include "extern.h"
+struct _include_path *include_paths;
+
static void
usage(char *progname)
{
fprintf(stderr, "ecpg - the postgresql preprocessor, version: %d.%d.%d\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL);
- fprintf(stderr, "Usage: %s: [-v] [-d] [ -o outout file name] file1 [file2] ...\n", progname);
+ fprintf(stderr, "Usage: %s: [-v] [-d] [-I include path] [ -o output file name] file1 [file2] ...\n", progname);
+}
+
+static void
+add_include_path(char * path)
+{
+ struct _include_path *ip = include_paths;
+
+ include_paths = mm_alloc(sizeof(struct _include_path));
+ include_paths->path = path;
+ include_paths->next = ip;
}
int
main(int argc, char *const argv[])
{
int fnr, c, out_option = 0;
-
- while ((c = getopt(argc, argv, "vdo:")) != EOF)
+ struct _include_path *ip;
+
+ add_include_path("/usr/include");
+ add_include_path(INCLUDE_PATH);
+ add_include_path("/usr/local/include");
+ add_include_path(".");
+
+ while ((c = getopt(argc, argv, "vdo:I:")) != EOF)
{
switch (c)
{
@@ -45,64 +65,71 @@ main(int argc, char *const argv[])
case 'd':
debugging = 1;
break;
+ case 'I':
+ add_include_path(optarg);
+ break;
case 'v':
+ fprintf(stderr, "ecpg - the postgresql preprocessor, version: %d.%d.%d\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL);
+ fprintf(stderr, "exec sql include ... search starts here:\n");
+ for (ip = include_paths; ip != NULL; ip = ip->next)
+ fprintf(stderr, " %s\n", ip->path);
+ fprintf(stderr, "End of search list.\n");
+ return (0);
default:
usage(argv[0]);
+ return (1);
}
}
if (optind >= argc) /* no files specified */
+ {
usage(argv[0]);
+ return(1);
+ }
else
{
/* after the options there must not be anything but filenames */
for (fnr = optind; fnr < argc; fnr++)
{
- char *filename,
- *ptr2ext;
- int ext = 0;
+ char *output_filename, *ptr2ext;
- filename = mm_alloc(strlen(argv[fnr]) + 4);
+ input_filename = mm_alloc(strlen(argv[fnr]) + 5);
- strcpy(filename, argv[fnr]);
+ strcpy(input_filename, argv[fnr]);
- ptr2ext = strrchr(filename, '.');
- /* no extension or extension not equal .pgc */
- if (ptr2ext == NULL || strcmp(ptr2ext, ".pgc") != 0)
+ ptr2ext = strrchr(input_filename, '.');
+ /* no extension? */
+ if (ptr2ext == NULL)
{
- if (ptr2ext == NULL)
- ext = 1; /* we need this information a while later */
- ptr2ext = filename + strlen(filename);
+ ptr2ext = input_filename + strlen(input_filename);
+
+ /* no extension => add .pgc */
ptr2ext[0] = '.';
+ ptr2ext[1] = 'p';
+ ptr2ext[2] = 'g';
+ ptr2ext[3] = 'c';
+ ptr2ext[4] = '\0';
}
- /* make extension = .c */
- ptr2ext[1] = 'c';
- ptr2ext[2] = '\0';
-
if (out_option == 0)/* calculate the output name */
{
- yyout = fopen(filename, "w");
+ output_filename = strdup(input_filename);
+
+ ptr2ext = strrchr(output_filename, '.');
+ /* make extension = .c */
+ ptr2ext[1] = 'c';
+ ptr2ext[2] = '\0';
+
+ yyout = fopen(output_filename, "w");
if (yyout == NULL)
{
- perror(filename);
- free(filename);
+ perror(output_filename);
+ free(output_filename);
+ free(input_filename);
continue;
}
}
- if (ext == 1)
- {
- /* no extension => add .pgc */
- ptr2ext = strrchr(filename, '.');
- ptr2ext[1] = 'p';
- ptr2ext[2] = 'g';
- ptr2ext[3] = 'c';
- ptr2ext[4] = '\0';
- input_filename = filename;
- }
- else
- input_filename = argv[fnr];
yyin = fopen(input_filename, "r");
if (yyin == NULL)
perror(argv[fnr]);
@@ -117,12 +144,14 @@ main(int argc, char *const argv[])
/* and parse the source */
yyparse();
- fclose(yyin);
+ if (yyin != NULL)
+ fclose(yyin);
if (out_option == 0)
fclose(yyout);
}
- free(filename);
+ free(output_filename);
+ free(input_filename);
}
}
return (0);