diff options
author | Vedant Kumar <vsk@apple.com> | 2016-08-03 19:02:50 +0000 |
---|---|---|
committer | Vedant Kumar <vsk@apple.com> | 2016-08-03 19:02:50 +0000 |
commit | 4031d9f80e67c4e36c233e1c390dabed994e9316 (patch) | |
tree | e5242d81491fb0453dfb82b7a611a176368ae75a /llvm/tools/llvm-ar/llvm-ar.cpp | |
parent | 43aeb001c959098167dec6272160ee73d187067c (diff) | |
download | bcm5719-llvm-4031d9f80e67c4e36c233e1c390dabed994e9316.tar.gz bcm5719-llvm-4031d9f80e67c4e36c233e1c390dabed994e9316.zip |
Reapply "More fixes to get good error messages for bad archives."
This reverts commit the revert commit r277627. The build errors
mentioned in r277627 were likely caused by an unclean build directory.
Sorry for the noise.
llvm-svn: 277630
Diffstat (limited to 'llvm/tools/llvm-ar/llvm-ar.cpp')
-rw-r--r-- | llvm/tools/llvm-ar/llvm-ar.cpp | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp index f52f9c376c1..cf2f98f83e1 100644 --- a/llvm/tools/llvm-ar/llvm-ar.cpp +++ b/llvm/tools/llvm-ar/llvm-ar.cpp @@ -338,16 +338,24 @@ static void printMode(unsigned mode) { // modification time are also printed. static void doDisplayTable(StringRef Name, const object::Archive::Child &C) { if (Verbose) { - sys::fs::perms Mode = C.getAccessMode(); + Expected<sys::fs::perms> ModeOrErr = C.getAccessMode(); + failIfError(ModeOrErr.takeError()); + sys::fs::perms Mode = ModeOrErr.get(); printMode((Mode >> 6) & 007); printMode((Mode >> 3) & 007); printMode(Mode & 007); - outs() << ' ' << C.getUID(); - outs() << '/' << C.getGID(); + Expected<unsigned> UIDOrErr = C.getUID(); + failIfError(UIDOrErr.takeError()); + outs() << ' ' << UIDOrErr.get(); + Expected<unsigned> GIDOrErr = C.getGID(); + failIfError(GIDOrErr.takeError()); + outs() << '/' << GIDOrErr.get(); Expected<uint64_t> Size = C.getSize(); failIfError(Size.takeError()); outs() << ' ' << format("%6llu", Size.get()); - outs() << ' ' << C.getLastModified().str(); + Expected<sys::TimeValue> ModTimeOrErr = C.getLastModified(); + failIfError(ModTimeOrErr.takeError()); + outs() << ' ' << ModTimeOrErr.get().str(); outs() << ' '; } outs() << Name << "\n"; @@ -357,7 +365,9 @@ static void doDisplayTable(StringRef Name, const object::Archive::Child &C) { // system. static void doExtract(StringRef Name, const object::Archive::Child &C) { // Retain the original mode. - sys::fs::perms Mode = C.getAccessMode(); + Expected<sys::fs::perms> ModeOrErr = C.getAccessMode(); + failIfError(ModeOrErr.takeError()); + sys::fs::perms Mode = ModeOrErr.get(); int FD; failIfError(sys::fs::openFileForWrite(Name, FD, sys::fs::F_None, Mode), Name); @@ -374,9 +384,12 @@ static void doExtract(StringRef Name, const object::Archive::Child &C) { // If we're supposed to retain the original modification times, etc. do so // now. - if (OriginalDates) + if (OriginalDates) { + Expected<sys::TimeValue> ModTimeOrErr = C.getLastModified(); + failIfError(ModTimeOrErr.takeError()); failIfError( - sys::fs::setLastModificationAndAccessTime(FD, C.getLastModified())); + sys::fs::setLastModificationAndAccessTime(FD, ModTimeOrErr.get())); + } if (close(FD)) fail("Could not close the file"); @@ -511,7 +524,9 @@ static InsertAction computeInsertAction(ArchiveOperation Operation, // operation. sys::fs::file_status Status; failIfError(sys::fs::status(*MI, Status), *MI); - if (Status.getLastModificationTime() < Member.getLastModified()) { + Expected<sys::TimeValue> ModTimeOrErr = Member.getLastModified(); + failIfError(ModTimeOrErr.takeError()); + if (Status.getLastModificationTime() < ModTimeOrErr.get()) { if (PosName.empty()) return IA_AddOldMember; return IA_MoveOldMember; |