|
12 | 12 | * |
13 | 13 | * |
14 | 14 | * IDENTIFICATION |
15 | | - * $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.103 2003/02/13 20:37:28 meskes Exp $ |
| 15 | + * $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.104 2003/02/14 13:17:13 meskes Exp $ |
16 | 16 | * |
17 | 17 | *------------------------------------------------------------------------- |
18 | 18 | */ |
@@ -423,7 +423,6 @@ cppline{space}*#(.*\\{space})*.* |
423 | 423 | /* are we simulating Informix? */ |
424 | 424 | if (compat == ECPG_COMPAT_INFORMIX) |
425 | 425 | { |
426 | | -printf ("unput $\n"); |
427 | 426 | unput(':'); |
428 | 427 | } |
429 | 428 | else |
@@ -560,6 +559,12 @@ cppline{space}*#(.*\\{space})*.* |
560 | 559 | if (keyword !=NULL) |
561 | 560 | return keyword->value; |
562 | 561 |
|
| 562 | +/* Is it a C keyword? */ |
| 563 | +keyword =ScanCKeywordLookup(yytext); |
| 564 | +if (keyword !=NULL) |
| 565 | +return keyword->value; |
| 566 | + |
| 567 | + |
563 | 568 | /* How about a DEFINE? */ |
564 | 569 | for (ptr = defines; ptr; ptr = ptr->next) |
565 | 570 | { |
@@ -697,6 +702,7 @@ cppline{space}*#(.*\\{space})*.* |
697 | 702 |
|
698 | 703 | <C>{exec_sql}{define}{space}*{BEGIN(def_ident); } |
699 | 704 | <C>{exec_sql}{include}{space}*{BEGIN(incl); } |
| 705 | +<C>{informix_special}{include}{space}*{BEGIN(incl); } |
700 | 706 |
|
701 | 707 | <C,xskip>{exec_sql}{ifdef}{space}*{ ifcond =TRUE;BEGIN(xcond); } |
702 | 708 | <C,xskip>{exec_sql}{ifndef}{space}* { ifcond =FALSE;BEGIN(xcond); } |
@@ -832,32 +838,45 @@ cppline{space}*#(.*\\{space})*.* |
832 | 838 | i-- ) |
833 | 839 | {} |
834 | 840 |
|
835 | | -/* Remove trailing '"' if it exists */ |
836 | | -if (yytext[i] =='"') |
837 | | -yytext[i] ='\0'; |
838 | | -else |
839 | | - yytext[i+1] ='\0'; |
| 841 | +yytext[i+1] ='\0'; |
| 842 | +yyin =NULL; |
840 | 843 |
|
841 | | -/* also remove starting '"' */ |
842 | | -if (yytext[0] =='"') |
| 844 | +/* If file name is enclosed in '"' remove these and look only in '.' */ |
| 845 | +if (yytext[0] =='"' && yytext[i] =='"') |
| 846 | +{ |
| 847 | +yytext[i] ='\0'; |
843 | 848 | memmove(yytext, yytext+1,strlen(yytext)); |
844 | | - |
845 | | - yyin =NULL; |
846 | | -for (ip = include_paths; yyin ==NULL && ip !=NULL; ip = ip->next) |
847 | | - { |
848 | | -if (strlen(ip->path) +strlen(yytext) +3 > MAXPGPATH) |
849 | | -{ |
850 | | -fprintf(stderr,"Error: Path %s/%s is too long in line %d, skipping.\n", ip->path, yytext, yylineno); |
851 | | -continue; |
852 | | -} |
853 | | -snprintf (inc_file,sizeof(inc_file),"%s/%s", ip->path, yytext); |
854 | | -yyin =fopen( inc_file,"r" ); |
| 849 | + |
| 850 | +strncpy(inc_file, yytext,sizeof(inc_file)); |
| 851 | +yyin =fopen(inc_file,"r"); |
855 | 852 | if (!yyin) |
856 | 853 | { |
857 | 854 | if (strcmp(inc_file +strlen(inc_file) -2,".h")) |
858 | 855 | { |
859 | 856 | strcat(inc_file,".h"); |
860 | | -yyin =fopen( inc_file,"r" ); |
| 857 | +yyin =fopen(inc_file,"r"); |
| 858 | +} |
| 859 | +} |
| 860 | + |
| 861 | +} |
| 862 | +else |
| 863 | +{ |
| 864 | +for (ip = include_paths; yyin ==NULL && ip !=NULL; ip = ip->next) |
| 865 | + { |
| 866 | +if (strlen(ip->path) +strlen(yytext) +3 > MAXPGPATH) |
| 867 | +{ |
| 868 | +fprintf(stderr,"Error: Path %s/%s is too long in line %d, skipping.\n", ip->path, yytext, yylineno); |
| 869 | +continue; |
| 870 | +} |
| 871 | +snprintf (inc_file,sizeof(inc_file),"%s/%s", ip->path, yytext); |
| 872 | +yyin =fopen(inc_file,"r"); |
| 873 | +if (!yyin) |
| 874 | +{ |
| 875 | +if (strcmp(inc_file +strlen(inc_file) -2,".h")) |
| 876 | +{ |
| 877 | +strcat(inc_file,".h"); |
| 878 | +yyin =fopen( inc_file,"r" ); |
| 879 | +} |
861 | 880 | } |
862 | 881 | } |
863 | 882 | } |
|