ソースを参照

loadFileText: Don't abuse stack to hold entire files. Don't silently ignore failed fread calls. Convert line endings.

git-svn-id: file:///var/svn/tigccpp/trunk@458 9552661e-59e3-4036-b4f2-dbe53926924f
kevinkofler 18 年 前
コミット
0b912721f6
1 ファイル変更16 行追加4 行削除
  1. 16 4
      ktigcc/tpr.cxx

+ 16 - 4
ktigcc/tpr.cxx

@@ -477,10 +477,22 @@ QString loadFileText(const char *fileName)
   fseek(f,0,SEEK_END);
   size_t flen=ftell(f);
   fseek(f,0,SEEK_SET);
-  char buffer[flen+1];
-  memset(buffer,0,flen+1);
-  fread(buffer,1,flen,f);
-  return QString(buffer);
+  char *buffer = new(std::nothrow) char[flen+1]();
+  if (!buffer)
+    return QString::null;
+  QString ret;
+  if (fread(buffer,1,flen,f)<flen)
+    ret=QString::null;
+  else
+    ret=buffer;
+  delete[] buffer;
+  if (!ret.isNull()) {
+    // convert Windows line endings
+    ret=ret.replace("\r\n","\n");
+    // interpret remaining \r characters as Mac line endings
+    ret=ret.replace('\r','\n');
+  }
+  return ret;
 }