diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-08-26 22:40:55 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-08-26 22:40:55 +0000 |
commit | 3da6bc16bbdddb51d69d1f36034fecfd6145488e (patch) | |
tree | c809147113fdc9f63bf561fad0653ff7760ffcec /clang/lib/ARCMigrate/FileRemapper.cpp | |
parent | 97c373793bd73c09c27bd59ba9ed15197cc20558 (diff) | |
download | bcm5719-llvm-3da6bc16bbdddb51d69d1f36034fecfd6145488e.tar.gz bcm5719-llvm-3da6bc16bbdddb51d69d1f36034fecfd6145488e.zip |
[arcmt] Fix horrible bug where migrating files if there is a space in the paths
of the migrated files. rdar://10022801
llvm-svn: 138671
Diffstat (limited to 'clang/lib/ARCMigrate/FileRemapper.cpp')
-rw-r--r-- | clang/lib/ARCMigrate/FileRemapper.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/clang/lib/ARCMigrate/FileRemapper.cpp b/clang/lib/ARCMigrate/FileRemapper.cpp index 55ba3710604..e255e40c19c 100644 --- a/clang/lib/ARCMigrate/FileRemapper.cpp +++ b/clang/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) |