aboutsummaryrefslogtreecommitdiff
path: root/lib/ARCMigrate/FileRemapper.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-08-26 22:40:55 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-08-26 22:40:55 +0000
commit56773de654224ef1504ae67a3aa87ffed189e6fe (patch)
treea2515aeed7c35aa714f657f8d7c2b687bb9eda66 /lib/ARCMigrate/FileRemapper.cpp
parentf43b5e84aa982afacd87a225440ec88a9b66c1a0 (diff)
[arcmt] Fix horrible bug where migrating files if there is a space in the paths
of the migrated files. rdar://10022801 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138671 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ARCMigrate/FileRemapper.cpp')
-rw-r--r--lib/ARCMigrate/FileRemapper.cpp27
1 files changed, 15 insertions, 12 deletions
diff --git a/lib/ARCMigrate/FileRemapper.cpp b/lib/ARCMigrate/FileRemapper.cpp
index 55ba371060..e255e40c19 100644
--- a/lib/ARCMigrate/FileRemapper.cpp
+++ b/lib/ARCMigrate/FileRemapper.cpp
@@ -59,21 +59,22 @@ bool FileRemapper::initFromDisk(StringRef outputDir, Diagnostic &Diag,
return false;
std::vector<std::pair<const FileEntry *, const FileEntry *> > pairs;
-
- std::ifstream fin(infoFile.c_str());
- if (!fin.good())
+
+ llvm::OwningPtr<llvm::MemoryBuffer> fileBuf;
+ if (llvm::error_code ec = llvm::MemoryBuffer::getFile(infoFile.c_str(),
+ fileBuf))
return report(std::string("Error opening file: ") + infoFile, Diag);
+
+ SmallVector<StringRef, 64> lines;
+ fileBuf->getBuffer().split(lines, "\n");
- while (true) {
- std::string fromFilename, toFilename;
+ unsigned idx = 0;
+ while (idx+3 <= lines.size()) {
+ std::string fromFilename = lines[idx];
uint64_t timeModified;
-
- fin >> fromFilename >> timeModified >> toFilename;
- if (fin.eof())
- break;
- if (!fin.good())
- return report(std::string("Error in format of file: ") + infoFile, Diag);
-
+ lines[idx+1].getAsInteger(10, timeModified);
+ std::string toFilename = lines[idx+2];
+
const FileEntry *origFE = FileMgr->getFile(fromFilename);
if (!origFE) {
if (ignoreIfFilesChanged)
@@ -94,6 +95,8 @@ bool FileRemapper::initFromDisk(StringRef outputDir, Diagnostic &Diag,
}
pairs.push_back(std::make_pair(origFE, newFE));
+
+ idx += 3;
}
for (unsigned i = 0, e = pairs.size(); i != e; ++i)