Parcourir la source

Don't load the file text twice, once by hand and once in the KatePart. Use a faster peekFirstChar in the external source file case, and just remove the call in the others.

git-svn-id: file:///var/svn/tigccpp/trunk@1023 9552661e-59e3-4036-b4f2-dbe53926924f
kevinkofler il y a 17 ans
Parent
commit
fd293d03d9
3 fichiers modifiés avec 17 ajouts et 16 suppressions
  1. 4 16
      ktigcc/mainform.cpp
  2. 12 0
      ktigcc/tpr.cpp
  3. 1 0
      ktigcc/tpr.h

+ 4 - 16
ktigcc/mainform.cpp

@@ -552,11 +552,6 @@ void DnDListView::dropEvent(QDropEvent *e) {
           // moving from non-editable to editable category
           if (!IS_EDITABLE_CATEGORY(srcCategory)
               && IS_EDITABLE_CATEGORY(destCategory)) {
-            QString fileText=loadFileText(static_cast<ListViewFile *>(currItem)->fileName);
-            if (fileText.isNull()) {
-              KMessageBox::error(this,QString("Can't open \'%1\'").arg(static_cast<ListViewFile *>(currItem)->fileName));
-              goto ignore2;
-            }
             static_cast<ListViewFile *>(currItem)->kateView=reinterpret_cast<KTextEditor::View *>(static_cast<MainForm *>(parent()->parent()->parent())->createView(static_cast<ListViewFile *>(currItem)->fileName,QString::null,destCategory));
             MainForm::createErrorCursorsForSourceFile(currItem);
             // force reloading the text buffer
@@ -1703,13 +1698,6 @@ Q3ListViewItem * MainForm::openFile(Q3ListViewItem * category, Q3ListViewItem *
     KMessageBox::error(this,QString("\'%1\' is not a regular file").arg(fileName));
     return NULL;
   }
-  if (IS_EDITABLE_CATEGORY(category)) {
-    QString fileText=loadFileText(fileName);
-    if (fileText.isNull()) {
-      KMessageBox::error(this,QString("Can't open \'%1\'").arg(fileName));
-      return NULL;
-    }
-  }
   Q3ListViewItem *item=NULL, *next=parent->firstChild();
   for (; IS_FILE(next); next=item->nextSibling())
     item=next;
@@ -2079,14 +2067,14 @@ bool MainForm::openProject(const QString &fileName)
       KMessageBox::error(this,QString("\'%1\' is not a valid file for opening.").arg(fileName));
       return FALSE;
     }
-    QString fileText=loadFileText(fileName);
-    if (fileText.isNull()) {
+    int firstChar=peekFirstChar(fileName);
+    if (firstChar==-2) {
       KMessageBox::error(this,QString("Can't open \'%1\'").arg(fileName));
       return FALSE;
     }
-    int type=((category==sFilesListItem||(category==hFilesListItem&&!fileText.isNull()&&!fileText.isEmpty()&&fileText[0]=='|'))?
+    int type=((category==sFilesListItem||(category==hFilesListItem&&firstChar=='|'))?
                 2:
-              (category==asmFilesListItem||(category==hFilesListItem&&!fileText.isNull()&&!fileText.isEmpty()&&fileText[0]==';'))?
+              (category==asmFilesListItem||(category==hFilesListItem&&firstChar==';'))?
                 3:
               (category==cFilesListItem||category==qllFilesListItem||category==hFilesListItem)?
                 1:

+ 12 - 0
ktigcc/tpr.cpp

@@ -563,6 +563,18 @@ QString loadFileText(const char *fileName)
   return ret;
 }
 
+// Returns -1 if the file is empty, -2 on error.
+int peekFirstChar(const char *fileName)
+{
+  FILE *f;
+  f=fopen(fileName,"rb");
+  if (!f)
+    return -2;
+  int result=getc(f);
+  if (result==EOF) result=feof(f)?-1:-2;
+  fclose(f);
+  return result;
+}
 
 static QString convert_path_separators_save(QString s)
 {

+ 1 - 0
ktigcc/tpr.h

@@ -168,6 +168,7 @@ void newSettings(tprSettings *settings,tprLibOpts *libopts);
 
 int loadTPR(const QString &fileName,TPRDataStruct *dest);
 QString loadFileText(const char *fileName);
+int peekFirstChar(const char *fileName);
 
 int saveTPR(const QString &fileName,TPRDataStruct *src);
 void mkdir_multi(const char *fileName);