diff --git a/llvm/.gitattributes b/llvm/.gitattributes --- a/llvm/.gitattributes +++ b/llvm/.gitattributes @@ -25,3 +25,5 @@ test/tools/llvm-strings/radix.test text eol=lf test/tools/split-file/basic.test text eol=lf test/tools/split-file/Inputs/basic-*.txt eol=lf +test/tools/split-file/basic.crlf.test text eol=crlf +test/tools/split-file/Inputs/basic-*.crlf eol=crlf diff --git a/llvm/test/tools/split-file/Inputs/basic-aa.crlf b/llvm/test/tools/split-file/Inputs/basic-aa.crlf new file mode 100644 --- /dev/null +++ b/llvm/test/tools/split-file/Inputs/basic-aa.crlf @@ -0,0 +1,2 @@ + +aa diff --git a/llvm/test/tools/split-file/Inputs/basic-bb.crlf b/llvm/test/tools/split-file/Inputs/basic-bb.crlf new file mode 100644 --- /dev/null +++ b/llvm/test/tools/split-file/Inputs/basic-bb.crlf @@ -0,0 +1,4 @@ + + + +bb diff --git a/llvm/test/tools/split-file/basic.crlf.test b/llvm/test/tools/split-file/basic.crlf.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/split-file/basic.crlf.test @@ -0,0 +1,10 @@ +#--- aa +aa +;--- bb +bb +;--- end + +# RUN: rm -rf %t +# RUN: split-file --leading-lines %s %t +# RUN: diff %S/Inputs/basic-aa.crlf %t/aa +# RUN: diff %S/Inputs/basic-bb.crlf %t/bb diff --git a/llvm/tools/split-file/split-file.cpp b/llvm/tools/split-file/split-file.cpp --- a/llvm/tools/split-file/split-file.cpp +++ b/llvm/tools/split-file/split-file.cpp @@ -71,6 +71,7 @@ static int handle(MemoryBuffer &inputBuf, StringRef input) { DenseMap partToBegin; StringRef lastPart, separator; + StringRef EOL = inputBuf.getBuffer().detectEOL(); for (line_iterator i(inputBuf, /*SkipBlanks=*/false, '\0'); !i.is_at_eof();) { const int64_t lineNo = i.line_number(); const StringRef line = *i++; @@ -128,7 +129,7 @@ Part &part = keyValue.second; for (int64_t i = 0; i != part.leadingLines; ++i) - (*f).os().write('\n'); + (*f).os() << EOL; if (part.begin) (*f).os().write(part.begin, part.end - part.begin); outputFiles.push_back(std::move(f));