]> granicus.if.org Git - postgresql/commitdiff
Allow input from stdin and output to stdout.
authorMichael Meskes <meskes@postgresql.org>
Tue, 27 May 2003 14:36:00 +0000 (14:36 +0000)
committerMichael Meskes <meskes@postgresql.org>
Tue, 27 May 2003 14:36:00 +0000 (14:36 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/preproc/ecpg.c
src/interfaces/ecpg/preproc/pgc.l

index a2a97d0df727d0bbe077b237b840921bf5a0c956..02fe1e9d41ff78b630bcc0a8ba326c703b2085b7 100644 (file)
@@ -1445,6 +1445,10 @@ Fri May 23 11:46:15 CEST 2003
 Tue May 27 13:29:28 CEST 2003
 
        - Fixed incorrect output for some structs.
+       
+Tue May 27 16:33:36 CEST 2003
+
+       - Accept stdin/stdout as input/output file.
        - Set ecpg version to 2.12.0.
        - Set ecpg library to 3.4.2.
        - Set pgtypes library to 1.0.0
index d40779b112020d04a5f41e013bda421aa4f24ec5..740703faf6e31a80f7241b09c2546cf8060211fd 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.70 2003/05/14 14:37:35 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.71 2003/05/27 14:36:00 meskes Exp $ */
 
 /* New main for ecpg, the PostgreSQL embedded SQL precompiler. */
 /* (C) Michael Meskes <meskes@postgresql.org> Feb 5th, 1998 */
@@ -137,7 +137,11 @@ main(int argc, char *const argv[])
                switch (c)
                {
                        case 'o':
-                               yyout = fopen(optarg, PG_BINARY_W);
+                               if (strcmp(optarg, "-") == 0) 
+                                       yyout = stdout;
+                               else
+                                       yyout = fopen(optarg, PG_BINARY_W);
+                               
                                if (yyout == NULL)
                                        perror(optarg);
                                else
@@ -219,47 +223,62 @@ main(int argc, char *const argv[])
                        char       *output_filename = NULL,
                                           *ptr2ext;
 
-                       input_filename = mm_alloc(strlen(argv[fnr]) + 5);
-
-                       strcpy(input_filename, argv[fnr]);
+                       /* If argv[fnr] is "-" we have to read from stdin */
+                       if (strcmp(argv[fnr], "-") == 0)
+                       {
+                               input_filename = mm_alloc(strlen("stdin")+1);
+                               strcpy(input_filename, "stdin");
+                               yyin = stdin;
+                       }
+                       else
+                       {
+                               input_filename = mm_alloc(strlen(argv[fnr]) + 5);
+                               strcpy(input_filename, argv[fnr]);
 
-                       /* take care of relative paths */
-                       ptr2ext = last_path_separator(input_filename);
-                       ptr2ext = (ptr2ext ? strrchr(ptr2ext, '.') : strrchr(input_filename, '.'));
+                               /* take care of relative paths */
+                               ptr2ext = last_path_separator(input_filename);
+                               ptr2ext = (ptr2ext ? strrchr(ptr2ext, '.') : strrchr(input_filename, '.'));
 
-                       /* no extension? */
-                       if (ptr2ext == NULL)
-                       {
-                               ptr2ext = input_filename + strlen(input_filename);
-
-                               /* no extension => add .pgc */
-                               ptr2ext[0] = '.';
-                               ptr2ext[1] = 'p';
-                               ptr2ext[2] = 'g';
-                               ptr2ext[3] = 'c';
-                               ptr2ext[4] = '\0';
+                               /* no extension? */
+                               if (ptr2ext == NULL)
+                               {
+                                       ptr2ext = input_filename + strlen(input_filename);
+
+                                       /* no extension => add .pgc */
+                                       ptr2ext[0] = '.';
+                                       ptr2ext[1] = 'p';
+                                       ptr2ext[2] = 'g';
+                                       ptr2ext[3] = 'c';
+                                       ptr2ext[4] = '\0';
+                               }
+                               
+                               yyin = fopen(input_filename, PG_BINARY_R);
                        }
 
                        if (out_option == 0)    /* calculate the output name */
                        {
-                               output_filename = strdup(input_filename);
+                               if (strcmp(input_filename, "stdin") == 0)
+                                       yyout = stdout;
+                               else
+                               {
+                                       output_filename = strdup(input_filename);
 
-                               ptr2ext = strrchr(output_filename, '.');
-                               /* make extension = .c */
-                               ptr2ext[1] = 'c';
-                               ptr2ext[2] = '\0';
+                                       ptr2ext = strrchr(output_filename, '.');
+                                       /* make extension = .c */
+                                       ptr2ext[1] = 'c';
+                                       ptr2ext[2] = '\0';
 
-                               yyout = fopen(output_filename, PG_BINARY_W);
-                               if (yyout == NULL)
-                               {
-                                       perror(output_filename);
-                                       free(output_filename);
-                                       free(input_filename);
-                                       continue;
+                                       yyout = fopen(output_filename, PG_BINARY_W);
+                                       if (yyout == NULL)
+                                       {
+                                               perror(output_filename);
+                                               free(output_filename);
+                                               free(input_filename);
+                                               continue;
+                                       }
                                }
                        }
 
-                       yyin = fopen(input_filename, PG_BINARY_R);
                        if (yyin == NULL)
                                perror(argv[fnr]);
                        else
@@ -341,7 +360,7 @@ main(int argc, char *const argv[])
 
                                /* finally the actual connection */
                                connection = NULL;
-
+                               
                                /* initialize lex */
                                lex_init();
 
@@ -355,9 +374,9 @@ main(int argc, char *const argv[])
                                /* and parse the source */
                                yyparse();
 
-                               if (yyin != NULL)
+                               if (yyin != NULL && yyin != stdin)
                                        fclose(yyin);
-                               if (out_option == 0)
+                               if (out_option == 0 && yyout != stdout)
                                        fclose(yyout);
                        }
 
index 6b197e5655d52bd7f6d41ff95940f76ce2376c05..c489f64dcb9529db6cbe52d4714aad091d76f274 100644 (file)
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.110 2003/05/22 07:58:41 meskes Exp $
+ *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.111 2003/05/27 14:36:00 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -399,14 +399,6 @@ cppline                    {space}*#(.*\\{space})+.*
                                                BEGIN(state_before);
                                                if (literallen == 0)
                                                        mmerror(PARSE_ERROR, ET_ERROR, "zero-length delimited identifier");
-                                               if (literallen >= NAMEDATALEN)
-                                               {
-                                                       snprintf(errortext, sizeof(errortext), "identifier \"%s\" will be truncated to \"%.*s\"",
-                                                                       literalbuf, NAMEDATALEN-1, literalbuf);
-                                                       literalbuf[NAMEDATALEN-1] = '\0';
-                                                       mmerror(PARSE_ERROR, ET_WARNING, errortext);
-                                               }
-                                       
                                                yylval.str = mm_strdup(literalbuf);
                                                return CSTRING;
                                        }