From 06c0f437a77df53bc05e05ca989eca66ab510815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 19 Mar 2004 18:32:37 +0000 Subject: [PATCH] Added "\n" -> "\r\n" translation for console output, not yet tested. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7031 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../boot/platform/openfirmware/console.cpp | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/kernel/boot/platform/openfirmware/console.cpp b/src/kernel/boot/platform/openfirmware/console.cpp index 251897476e..3e60dfe5b2 100644 --- a/src/kernel/boot/platform/openfirmware/console.cpp +++ b/src/kernel/boot/platform/openfirmware/console.cpp @@ -1,5 +1,5 @@ /* -** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Copyright 2003-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. ** Distributed under the terms of the OpenBeOS License. */ @@ -32,7 +32,7 @@ ConsoleHandle::ConsoleHandle() ssize_t -ConsoleHandle::ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize) +ConsoleHandle::ReadAt(void */*cookie*/, off_t /*pos*/, void *buffer, size_t bufferSize) { // don't seek in character devices return of_read(fHandle, buffer, bufferSize); @@ -40,10 +40,37 @@ ConsoleHandle::ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize) ssize_t -ConsoleHandle::WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize) +ConsoleHandle::WriteAt(void */*cookie*/, off_t /*pos*/, const void *buffer, size_t bufferSize) { - // don't seek in character devices - return of_write(fHandle, buffer, bufferSize); + const char *string = (const char *)buffer; + + // be nice to our audience and replace single "\n" with "\r\n" + + while (bufferSize > 0) { + bool newLine = false; + size_t length = 0; + + for (; length < bufferSize; length++) { + if (string[length] == '\r') + length += 2; + else if (string[length] == '\n') + break; + } + + if (length > bufferSize) + length = bufferSize; + + of_write(fHandle, string, length); + + if (newLine) { + of_write(fHandle, "\r\n", 2); + string++; + bufferSize--; + } + + string += length; + bufferSize -= length; + } }