X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FSupport%2Fraw_ostream.cpp;h=c2be517a6ad612bd8744eaee9e0403c3dd128c8a;hb=52fa0d066a8fb81716713b85841b1aa031dbf8fc;hp=b8a1537ae8ad2b9ad2080d0414ac2cf691850acc;hpb=81bc6fb854c94bac32b2d687ebab92329ed1cc90;p=oota-llvm.git diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp index b8a1537ae8a..c2be517a6ad 100644 --- a/lib/Support/raw_ostream.cpp +++ b/lib/Support/raw_ostream.cpp @@ -426,20 +426,14 @@ void format_object_base::home() { // raw_fd_ostream //===----------------------------------------------------------------------===// -/// raw_fd_ostream - Open the specified file for writing. If an error -/// occurs, information about the error is put into ErrorInfo, and the -/// stream should be immediately destroyed; the string will be empty -/// if no error occurred. -raw_fd_ostream::raw_fd_ostream(const char *Filename, std::string &ErrorInfo, +raw_fd_ostream::raw_fd_ostream(StringRef Filename, std::error_code &EC, sys::fs::OpenFlags Flags) : Error(false), UseAtomicWrites(false), pos(0) { - assert(Filename && "Filename is null"); - ErrorInfo.clear(); - + EC = std::error_code(); // Handle "-" as stdout. Note that when we do this, we consider ourself // the owner of stdout. This means that we can do things like close the // file descriptor when we're done and set the "binary" flag globally. - if (Filename[0] == '-' && Filename[1] == 0) { + if (Filename == "-") { FD = STDOUT_FILENO; // If user requested binary then put stdout into binary mode if // possible. @@ -450,11 +444,9 @@ raw_fd_ostream::raw_fd_ostream(const char *Filename, std::string &ErrorInfo, return; } - std::error_code EC = sys::fs::openFileForWrite(Filename, FD, Flags); + EC = sys::fs::openFileForWrite(Filename, FD, Flags); if (EC) { - ErrorInfo = "Error opening output file '" + std::string(Filename) + "': " + - EC.message(); ShouldClose = false; return; } @@ -660,7 +652,7 @@ bool raw_fd_ostream::has_colors() const { /// Use it like: outs() << "foo" << "bar"; raw_ostream &llvm::outs() { // Set buffer settings to model stdout behavior. - // Delete the file descriptor when the program exists, forcing error + // Delete the file descriptor when the program exits, forcing error // detection. If you don't want this behavior, don't use outs(). static raw_fd_ostream S(STDOUT_FILENO, true); return S; @@ -729,26 +721,17 @@ void raw_svector_ostream::resync() { } void raw_svector_ostream::write_impl(const char *Ptr, size_t Size) { - size_t NewSize = OS.size() + Size; - size_t NewReservation = NewSize + 64; - - bool NoOverlap = Ptr + Size < OS.begin() || Ptr > OS.begin() + OS.capacity(); - - if (NoOverlap) { - assert(!GetNumBytesInBuffer()); - OS.reserve(NewReservation); - memcpy(OS.end(), Ptr, Size); - OS.set_size(NewSize); - } else if (Ptr == OS.end()) { + if (Ptr == OS.end()) { // Grow the buffer to include the scratch area without copying. + size_t NewSize = OS.size() + Size; assert(NewSize <= OS.capacity() && "Invalid write_impl() call!"); OS.set_size(NewSize); - OS.reserve(NewReservation); } else { + assert(!GetNumBytesInBuffer()); OS.append(Ptr, Ptr + Size); - OS.reserve(NewReservation); } + OS.reserve(OS.size() + 64); SetBuffer(OS.end(), OS.capacity() - OS.size()); }