diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog index a2a97d0df7..02fe1e9d41 100644 --- a/src/interfaces/ecpg/ChangeLog +++ b/src/interfaces/ecpg/ChangeLog @@ -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 diff --git a/src/interfaces/ecpg/preproc/ecpg.c b/src/interfaces/ecpg/preproc/ecpg.c index d40779b112..740703faf6 100644 --- a/src/interfaces/ecpg/preproc/ecpg.c +++ b/src/interfaces/ecpg/preproc/ecpg.c @@ -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 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]); - - /* take care of relative paths */ - ptr2ext = last_path_separator(input_filename); - ptr2ext = (ptr2ext ? strrchr(ptr2ext, '.') : strrchr(input_filename, '.')); - - /* no extension? */ - if (ptr2ext == NULL) + /* If argv[fnr] is "-" we have to read from stdin */ + if (strcmp(argv[fnr], "-") == 0) { - ptr2ext = input_filename + strlen(input_filename); + 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]); - /* no extension => add .pgc */ - ptr2ext[0] = '.'; - ptr2ext[1] = 'p'; - ptr2ext[2] = 'g'; - ptr2ext[3] = 'c'; - ptr2ext[4] = '\0'; + /* 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'; + } + + yyin = fopen(input_filename, PG_BINARY_R); } if (out_option == 0) /* calculate the output name */ { - output_filename = strdup(input_filename); - - ptr2ext = strrchr(output_filename, '.'); - /* make extension = .c */ - ptr2ext[1] = 'c'; - ptr2ext[2] = '\0'; - - yyout = fopen(output_filename, PG_BINARY_W); - if (yyout == NULL) + if (strcmp(input_filename, "stdin") == 0) + yyout = stdout; + else { - perror(output_filename); - free(output_filename); - free(input_filename); - continue; + output_filename = strdup(input_filename); + + 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; + } } } - 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); } diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l index 6b197e5655..c489f64dcb 100644 --- a/src/interfaces/ecpg/preproc/pgc.l +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -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; }