summaryrefslogtreecommitdiff
path: root/src/mongo/logger/rotatable_file_writer.cpp
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2016-09-09 14:09:38 -0400
committerMark Benvenuto <mark.benvenuto@mongodb.com>2016-09-09 14:09:38 -0400
commit25c6eb9a0c87709ad80a896d737e8ab977eac883 (patch)
tree781d2208fcb3fe39aa900b8d3a9d0c438a6be43b /src/mongo/logger/rotatable_file_writer.cpp
parent25ff17991ee95d996642eb6684ce37d927863ce7 (diff)
downloadmongo-25c6eb9a0c87709ad80a896d737e8ab977eac883.tar.gz
SERVER-25926 Windows audit bson output erroneously translates LF to CR LF
Diffstat (limited to 'src/mongo/logger/rotatable_file_writer.cpp')
-rw-r--r--src/mongo/logger/rotatable_file_writer.cpp31
1 files changed, 3 insertions, 28 deletions
diff --git a/src/mongo/logger/rotatable_file_writer.cpp b/src/mongo/logger/rotatable_file_writer.cpp
index 561869645ca..4c053f19615 100644
--- a/src/mongo/logger/rotatable_file_writer.cpp
+++ b/src/mongo/logger/rotatable_file_writer.cpp
@@ -97,8 +97,6 @@ private:
virtual std::streamsize xsputn(const char* s, std::streamsize count);
virtual int_type overflow(int_type ch = traits_type::eof());
- std::streamsize writeToFile(const char* s, std::streamsize count);
-
HANDLE _fileHandle;
};
@@ -163,7 +161,8 @@ bool Win32FileStreambuf::open(StringData fileName, bool append) {
return false;
}
-std::streamsize Win32FileStreambuf::writeToFile(const char* s, std::streamsize count) {
+// Called when strings are written to ostream
+std::streamsize Win32FileStreambuf::xsputn(const char* s, std::streamsize count) {
DWORD totalBytesWritten = 0;
while (count > totalBytesWritten) {
@@ -171,32 +170,8 @@ std::streamsize Win32FileStreambuf::writeToFile(const char* s, std::streamsize c
if (!WriteFile(_fileHandle, s, count - totalBytesWritten, &bytesWritten, NULL)) {
break;
}
- totalBytesWritten += bytesWritten;
- }
-
- return totalBytesWritten;
-}
-
-// Called when strings are written to ostream
-std::streamsize Win32FileStreambuf::xsputn(const char* s, std::streamsize count) {
- DWORD totalBytesWritten = 0;
-
- // Scan for embedded newlines before end
- // this should be rare since the newline should only be at the end
- const char* startPos = s;
- for (int i = 0; i < count; i++) {
- if (s[i] == '\n') {
- totalBytesWritten += writeToFile(startPos, i - (startPos - s));
- writeToFile("\r\n", 2);
- totalBytesWritten += 1; // Caller expected we only wrote 1 char, so tell them so
- startPos = &s[i + 1];
- }
- }
- // Did the string not end on "\n"? Write the remaining, no need for CRLF
- // as upper layers are responsible for it
- if ((startPos - s) != count) {
- totalBytesWritten += writeToFile(startPos, count - (startPos - s));
+ totalBytesWritten += bytesWritten;
}
return totalBytesWritten;