diff options
author | albert-github <albert.tests@gmail.com> | 2013-09-07 14:03:07 (GMT) |
---|---|---|
committer | albert-github <albert.tests@gmail.com> | 2013-09-07 14:03:07 (GMT) |
commit | 2e03209d4579b239ce5abe59c8cd2a0fe7086ea0 (patch) | |
tree | bfba203c1497f8fa843f9b83553c86b998eccc70 | |
parent | 48676b42611b981c1845c7426f22422b9d94cb13 (diff) | |
download | Doxygen-2e03209d4579b239ce5abe59c8cd2a0fe7086ea0.zip Doxygen-2e03209d4579b239ce5abe59c8cd2a0fe7086ea0.tar.gz Doxygen-2e03209d4579b239ce5abe59c8cd2a0fe7086ea0.tar.bz2 |
Bug 707685 - Fortran: error message when missing last EOL
In case the original buffer in either fixed or free format code does not contain an EOL as last character, add it.
-rwxr-xr-x[-rw-r--r--] | src/fortranscanner.l | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/fortranscanner.l b/src/fortranscanner.l index c6b47d3..6d64cb9 100644..100755 --- a/src/fortranscanner.l +++ b/src/fortranscanner.l @@ -1366,7 +1366,7 @@ static const char* prepassFixedForm(const char* contents) int prevLineLength=0; int prevLineAmpOrExclIndex=-1; bool emptyLabel=TRUE; - int newContentsSize = strlen(contents)+2; // \000 and one spare character (to avoid reallocation) + int newContentsSize = strlen(contents)+3; // \000, \n (when necessary) and one spare character (to avoid reallocation) char* newContents = (char*)malloc(newContentsSize); for(int i=0, j=0;;i++,j++) { @@ -1390,6 +1390,14 @@ static const char* prepassFixedForm(const char* contents) break; case '\000': newContents[j]='\000'; + newContentsSize = strlen(newContents); + if (newContents[newContentsSize - 1] != '\n') + { + // to be on the safe side + newContents = (char*)realloc(newContents, newContentsSize+2); + newContents[newContentsSize] = '\n'; + newContents[newContentsSize + 1] = '\000'; + } return newContents; case 'C': case 'c': @@ -1425,6 +1433,15 @@ static const char* prepassFixedForm(const char* contents) break; } } + + newContentsSize = strlen(newContents); + if (newContents[newContentsSize - 1] != '\n') + { + // to be on the safe side + newContents = (char*)realloc(newContents, newContentsSize+2); + newContents[newContentsSize] = '\n'; + newContents[newContentsSize + 1] = '\000'; + } return newContents; } @@ -2228,6 +2245,7 @@ level--; static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) { + char *tmpBuf = NULL; initParser(); defaultProtection = Public; @@ -2258,6 +2276,14 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) //clock_t end=clock(); //printf("CPU time used=%f\n", ((double) (end-start))/CLOCKS_PER_SEC); } + else if (inputString[strlen(fileBuf)-1] != '\n') + { + tmpBuf = (char *)malloc(strlen(fileBuf)+2); + strcpy(tmpBuf,fileBuf); + tmpBuf[strlen(fileBuf)]= '\n'; + tmpBuf[strlen(fileBuf)+1]= '\000'; + inputString = tmpBuf; + } yyLineNr= 1 ; yyFileName = fileName; @@ -2291,6 +2317,10 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) rt->program.resize(0); delete current; current=0; moduleProcedures.clear(); + if (tmpBuf) { + free((char*)tmpBuf); + inputString=NULL; + } if (isFixedForm) { free((char*)inputString); inputString=NULL; |