summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2013-09-07 14:23:07 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2013-09-07 14:23:07 (GMT)
commit5386a768aad6ae7f00353f20bbd3cb60ccb0349e (patch)
treebfba203c1497f8fa843f9b83553c86b998eccc70
parentec9d0e3753d2197e4138ab717182a20dd6f05f8b (diff)
parent2e03209d4579b239ce5abe59c8cd2a0fe7086ea0 (diff)
downloadDoxygen-5386a768aad6ae7f00353f20bbd3cb60ccb0349e.zip
Doxygen-5386a768aad6ae7f00353f20bbd3cb60ccb0349e.tar.gz
Doxygen-5386a768aad6ae7f00353f20bbd3cb60ccb0349e.tar.bz2
Merge pull request #31 from albert-github/feature/bug_707685
Feature/bug 707685
-rw-r--r--addon/doxywizard/doxywizard.cpp8
-rwxr-xr-x[-rw-r--r--]src/fortranscanner.l32
2 files changed, 37 insertions, 3 deletions
diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp
index 11bd8f2..ce764e0 100644
--- a/addon/doxywizard/doxywizard.cpp
+++ b/addon/doxywizard/doxywizard.cpp
@@ -224,9 +224,13 @@ void MainWindow::updateConfigFileName(const QString &fileName)
void MainWindow::loadConfigFromFile(const QString & fileName)
{
- m_expert->loadConfig(fileName);
- m_wizard->refresh();
+ // save full path info of original file
+ QString absFileName = QFileInfo(fileName).absoluteFilePath();
+ // updates the current directory
updateConfigFileName(fileName);
+ // open the specified configuration file
+ m_expert->loadConfig(absFileName);
+ m_wizard->refresh();
updateLaunchButtonState();
m_modified = false;
updateTitle();
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;