Howdy, is anyone opposed to the attached patch? Changes are: * Added BDataIO::[V]Print() methods for convenient printf() style printing to BDataIOs. * Added experimental BFdIO and BFileIO, which are BPositionIO implementations wrapping a given file descriptor respectively FILE*. * Added PrintToStream(BDataIO&) versions to BPoint, BRect, BRegion, BMessage. The new BDataIO methods eat up virtual slots. I suppose Print() could actually be non-virtual -- at least I can't imagine why any derived class would want to do anything other than the default implementation (i.e. construct a va_list and call VPrint()). The name for VPrint() is "inspired" by the C/POSIX API names. Another option would be something more descriptive like PrintVarArgs(). Opinions? CU, Ingo
Index: headers/os/app/Message.h =================================================================== --- headers/os/app/Message.h (revision 31316) +++ headers/os/app/Message.h (working copy) @@ -19,6 +19,7 @@ #include <TypeConstants.h> /* For convenience */ class BBlockCache; +class BDataIO; class BMessenger; class BHandler; class BString; @@ -68,6 +69,7 @@ bool IsSystem() const; bool IsReply() const; void PrintToStream() const; + void PrintToStream(BDataIO& output) const; status_t Rename(const char *oldEntry, const char *newEntry); @@ -306,7 +308,8 @@ ssize_t _NativeFlattenedSize() const; status_t _NativeFlatten(char *buffer, ssize_t size) const; status_t _NativeFlatten(BDataIO *stream, ssize_t *size = NULL) const; - void _PrintToStream(const char* indent) const; + void _PrintToStream(BDataIO& output, + const char* indent) const; private: message_header* fHeader; Index: headers/os/interface/Point.h =================================================================== --- headers/os/interface/Point.h (revision 31316) +++ headers/os/interface/Point.h (working copy) @@ -13,6 +13,7 @@ #include <SupportDefs.h> +class BDataIO; class BRect; class BPoint { @@ -23,13 +24,14 @@ BPoint(); BPoint(float X, float Y); BPoint(const BPoint &p); - + BPoint &operator=(const BPoint &p); void Set(float X, float Y); void ConstrainTo(BRect r); void PrintToStream() const; - + void PrintToStream(BDataIO& output) const; + BPoint operator-() const; BPoint operator+(const BPoint &p) const; BPoint operator-(const BPoint &p) const; Index: headers/os/interface/Region.h =================================================================== --- headers/os/interface/Region.h (revision 31316) +++ headers/os/interface/Region.h (working copy) @@ -9,6 +9,9 @@ #include <BeBuild.h> #include <Rect.h> + +class BDataIO; + namespace BPrivate { class ServerLink; class LinkReceiver; @@ -56,6 +59,7 @@ bool Contains(int32 x, int32 y) const; void PrintToStream() const; + void PrintToStream(BDataIO& output) const; void OffsetBy(int32 x, int32 y); Index: headers/os/interface/Rect.h =================================================================== --- headers/os/interface/Rect.h (revision 31316) +++ headers/os/interface/Rect.h (working copy) @@ -16,6 +16,9 @@ #include <math.h> +class BDataIO; + + class BRect { public: float left; @@ -33,6 +36,7 @@ void Set(float l, float t, float r, float b); void PrintToStream() const; + void PrintToStream(BDataIO& output) const; BPoint LeftTop() const; BPoint RightBottom() const; Index: headers/os/support/DataIO.h =================================================================== --- headers/os/support/DataIO.h (revision 31316) +++ headers/os/support/DataIO.h (working copy) @@ -8,6 +8,7 @@ #ifndef _DATA_IO_H #define _DATA_IO_H +#include <stdarg.h> #include <SupportDefs.h> @@ -20,12 +21,13 @@ virtual ssize_t Read(void *buffer, size_t size) = 0; virtual ssize_t Write(const void *buffer, size_t size) = 0; + virtual ssize_t Print(const char* format,...); + virtual ssize_t VPrint(const char* format, va_list args); + private: BDataIO(const BDataIO &); BDataIO &operator=(const BDataIO &); - virtual void _ReservedDataIO1(); - virtual void _ReservedDataIO2(); virtual void _ReservedDataIO3(); virtual void _ReservedDataIO4(); virtual void _ReservedDataIO5(); Index: headers/private/storage/FileIO.h =================================================================== --- headers/private/storage/FileIO.h (revision 0) +++ headers/private/storage/FileIO.h (revision 0) @@ -0,0 +1,47 @@ +/* + * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx + * Distributed under the terms of the MIT License. + */ +#ifndef _FILE_IO_H +#define _FILE_IO_H + +#include <stdio.h> + +#include <DataIO.h> + + +class BFileIO : public BPositionIO { +public: + BFileIO(FILE* file, + bool takeOverOwnership = false); + virtual ~BFileIO(); + + virtual ssize_t Read(void *buffer, size_t size); + virtual ssize_t Write(const void *buffer, size_t size); + + virtual ssize_t ReadAt(off_t position, void *buffer, + size_t size); + virtual ssize_t WriteAt(off_t position, const void *buffer, + size_t size); + + virtual off_t Seek(off_t position, uint32 seekMode); + virtual off_t Position() const; + + virtual status_t SetSize(off_t size); + virtual status_t GetSize(off_t* size) const; + + virtual ssize_t VPrint(const char* format, va_list args); + +private: + BFileIO(const BFileIO& other); + BFileIO& operator=(const BFileIO& other); + + off_t _Seek(off_t position, uint32 seekMode) const; + +private: + FILE* fFile; + bool fOwnsFile; +}; + + +#endif // _FILE_IO_H Index: headers/private/storage/FdIO.h =================================================================== --- headers/private/storage/FdIO.h (revision 0) +++ headers/private/storage/FdIO.h (revision 0) @@ -0,0 +1,40 @@ +/* + * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx + * Distributed under the terms of the MIT License. + */ +#ifndef _FD_IO_H +#define _FD_IO_H + +#include <DataIO.h> + + +class BFdIO : public BPositionIO { +public: + BFdIO(int fd, bool takeOverOwnership = false); + virtual ~BFdIO(); + + virtual ssize_t Read(void *buffer, size_t size); + virtual ssize_t Write(const void *buffer, size_t size); + + virtual ssize_t ReadAt(off_t position, void *buffer, + size_t size); + virtual ssize_t WriteAt(off_t position, const void *buffer, + size_t size); + + virtual off_t Seek(off_t position, uint32 seekMode); + virtual off_t Position() const; + + virtual status_t SetSize(off_t size); + virtual status_t GetSize(off_t* size) const; + +private: + BFdIO(const BFdIO& other); + BFdIO& operator=(const BFdIO& other); + +private: + int fFD; + bool fOwnsFD; +}; + + +#endif // _FD_IO_H Index: src/kits/app/Message.cpp =================================================================== --- src/kits/app/Message.cpp (revision 31316) +++ src/kits/app/Message.cpp (working copy) @@ -12,6 +12,7 @@ #include <MessageUtils.h> #include <DirectMessageTarget.h> +#include <FileIO.h> #include <MessengerPrivate.h> #include <TokenSpace.h> #include <util/KMessage.h> @@ -68,19 +69,19 @@ template<typename Type> static uint8 * -print_to_stream_type(uint8* pointer) +print_to_stream_type(BDataIO& output, uint8* pointer) { Type *item = (Type *)pointer; - item->PrintToStream(); + item->PrintToStream(output); return (uint8 *)(item+1); } template<typename Type> static uint8 * -print_type(const char* format, uint8* pointer) +print_type(BDataIO& output, const char* format, uint8* pointer) { Type *item = (Type *)pointer; - printf(format, *item, *item); + output.Print(format, *item, *item); return (uint8 *)(item+1); } @@ -500,23 +501,31 @@ void BMessage::PrintToStream() const { - _PrintToStream(""); - printf("}\n"); + BFileIO output(stdout); + PrintToStream(output); } void -BMessage::_PrintToStream(const char* indent) const +BMessage::PrintToStream(BDataIO& output) const { + _PrintToStream(output, ""); + output.Print("}\n"); +} + + +void +BMessage::_PrintToStream(BDataIO& output, const char* indent) const +{ DEBUG_FUNCTION_ENTER; int32 value = B_BENDIAN_TO_HOST_INT32(what); - printf("BMessage("); + output.Print("BMessage("); if (isprint(*(char *)&value)) { - printf("'%.4s'", (char *)&value); + output.Print("'%.4s'", (char *)&value); } else - printf("0x%lx", what); - printf(") {\n"); + output.Print("0x%lx", what); + output.Print(") {\n"); field_header *field = fFields; for (int32 i = 0; i < fHeader->field_count; i++, field++) { @@ -528,57 +537,65 @@ uint8 *pointer = fData + field->offset + field->name_length; for (int32 j = 0; j < field->count; j++) { if (field->count == 1) { - printf("%s %s = ", indent, + output.Print("%s %s = ", indent, (char *)(fData + field->offset)); } else { - printf("%s %s[%ld] = ", indent, + output.Print("%s %s[%ld] = ", indent, (char *)(fData + field->offset), j); } switch (field->type) { case B_RECT_TYPE: - pointer = print_to_stream_type<BRect>(pointer); + pointer = print_to_stream_type<BRect>(output, pointer); break; case B_POINT_TYPE: - pointer = print_to_stream_type<BPoint>(pointer); + pointer = print_to_stream_type<BPoint>(output, pointer); break; case B_STRING_TYPE: { ssize_t size = *(ssize_t *)pointer; pointer += sizeof(ssize_t); - printf("string(\"%s\", %ld bytes)\n", (char *)pointer, size); + output.Print("string(\"%s\", %ld bytes)\n", (char *)pointer, + size); pointer += size; break; } case B_INT8_TYPE: - pointer = print_type<int8>("int8(0x%hx or %d or \'%.1s\')\n", pointer); + pointer = print_type<int8>(output, + "int8(0x%hx or %d or \'%.1s\')\n", pointer); break; case B_INT16_TYPE: - pointer = print_type<int16>("int16 (0x%x or %d)\n", pointer); + pointer = print_type<int16>(output, + "int16 (0x%x or %d)\n", pointer); break; case B_INT32_TYPE: - pointer = print_type<int32>("int32(0x%lx or %ld)\n", pointer); + pointer = print_type<int32>(output, "int32(0x%lx or %ld)\n", + pointer); break; case B_INT64_TYPE: - pointer = print_type<int64>("int64(0x%Lx or %Ld)\n", pointer); + pointer = print_type<int64>(output, "int64(0x%Lx or %Ld)\n", + pointer); break; case B_BOOL_TYPE: - printf("bool(%s)\n", *((bool *)pointer)!= 0 ? "true" : "false"); + output.Print("bool(%s)\n", + *((bool*)pointer) != 0 ? "true" : "false"); pointer += sizeof(bool); break; case B_FLOAT_TYPE: - pointer = print_type<float>("float(%.4f)\n", pointer); + pointer = print_type<float>(output, "float(%.4f)\n", + pointer); break; case B_DOUBLE_TYPE: - pointer = print_type<double>("double(%.8f)\n", pointer); + pointer = print_type<double>(output, "double(%.8f)\n", + pointer); break; case B_REF_TYPE: { @@ -587,11 +604,11 @@ entry_ref ref; BPrivate::entry_ref_unflatten(&ref, (char *)pointer, size); - printf("entry_ref(device=%ld, directory=%lld, name=\"%s\", ", - ref.device, ref.directory, ref.name); + output.Print("entry_ref(device=%ld, directory=%lld, " + "name=\"%s\", ", ref.device, ref.directory, ref.name); BPath path(&ref); - printf("path=\"%s\")\n", path.Path()); + output.Print("path=\"%s\")\n", path.Path()); pointer += size; break; } @@ -608,14 +625,15 @@ fprintf(stderr, "couldn't unflatten item %ld\n", i); break; } - message._PrintToStream(buffer); - printf("%s }\n", indent); + message._PrintToStream(output, buffer); + output.Print("%s }\n", indent); pointer += size; break; } default: { - printf("(type = '%.4s')(size = %ld)\n", (char *)&value, size); + output.Print("(type = '%.4s')(size = %ld)\n", + (char*)&value, size); } } } Index: src/kits/app/Jamfile =================================================================== --- src/kits/app/Jamfile (revision 31316) +++ src/kits/app/Jamfile (working copy) @@ -17,7 +17,7 @@ SubDirC++Flags $(defines) ; } -UsePrivateHeaders shared app interface kernel ; +UsePrivateHeaders app interface kernel shared storage ; UsePrivateSystemHeaders ; SetSubDirSupportedPlatforms haiku libbe_test ; @@ -55,6 +55,6 @@ ServerLink.cpp ServerMemoryAllocator.cpp TokenSpace.cpp - TypeConstants.cpp + TypeConstants.cpp ; Index: src/kits/interface/Point.cpp =================================================================== --- src/kits/interface/Point.cpp (revision 31316) +++ src/kits/interface/Point.cpp (working copy) @@ -14,7 +14,9 @@ #include <SupportDefs.h> #include <Rect.h> +#include <FileIO.h> + const BPoint B_ORIGIN(0, 0); @@ -29,10 +31,18 @@ void BPoint::PrintToStream() const { - printf("BPoint(x:%.0f, y:%.0f)\n", x, y); + BFileIO output(stdout); + PrintToStream(output); } +void +BPoint::PrintToStream(BDataIO& output) const +{ + output.Print("BPoint(x:%.0f, y:%.0f)\n", x, y); +} + + BPoint BPoint::operator-() const { Index: src/kits/interface/Region.cpp =================================================================== --- src/kits/interface/Region.cpp (revision 31316) +++ src/kits/interface/Region.cpp (working copy) @@ -15,6 +15,8 @@ #include <Debug.h> +#include <FileIO.h> + #include "clipping.h" #include "RegionSupport.h" @@ -111,7 +113,7 @@ fBounds = region.fBounds; fCount = region.fCount; } - + return *this; } @@ -125,10 +127,10 @@ { if (&other == this) return true; - + if (fCount != other.fCount) return false; - + return memcmp(fData, other.fData, fCount * sizeof(clipping_rect)) == 0; } @@ -206,7 +208,7 @@ const clipping_rect& r = fData[index]; return BRect(r.left, r.top, r.right - 1, r.bottom - 1); } - + return BRect(); // an invalid BRect } @@ -328,11 +330,21 @@ void BRegion::PrintToStream() const { - Frame().PrintToStream(); + BFileIO output(stdout); + PrintToStream(output); +} + +/*! \brief Prints the BRegion to the given output. +*/ +void +BRegion::PrintToStream(BDataIO& output) const +{ + Frame().PrintToStream(output); + for (long i = 0; i < fCount; i++) { clipping_rect *rect = &fData[i]; - printf("data[%ld] = BRect(l:%ld.0, t:%ld.0, r:%ld.0, b:%ld.0)\n", + output.Print("data[%ld] = BRect(l:%ld.0, t:%ld.0, r:%ld.0, b:%ld.0)\n", i, rect->left, rect->top, rect->right - 1, rect->bottom - 1); } } @@ -393,7 +405,7 @@ { if (!valid_rect(rect)) return; - + // convert to internal rect format rect.right ++; rect.bottom ++; @@ -442,7 +454,7 @@ { if (!valid_rect(rect)) return; - + // convert to internal rect format rect.right ++; rect.bottom ++; @@ -568,7 +580,7 @@ MakeEmpty(); return true; } - + if (!fData) { // allocation actually failed fDataSize = 0; Index: src/kits/interface/Jamfile =================================================================== --- src/kits/interface/Jamfile (revision 31316) +++ src/kits/interface/Jamfile (working copy) @@ -26,7 +26,7 @@ SetSubDirSupportedPlatforms haiku libbe_test ; UseLibraryHeaders agg ; -UsePrivateHeaders app input print interface shared tracker ; +UsePrivateHeaders app input print interface shared storage tracker ; local pngDump ; if $(TARGET_PLATFORM) = haiku { Index: src/kits/interface/Rect.cpp =================================================================== --- src/kits/interface/Rect.cpp (revision 31316) +++ src/kits/interface/Rect.cpp (working copy) @@ -10,7 +10,9 @@ #include <Rect.h> +#include <FileIO.h> + void BRect::SetLeftTop(const BPoint p) { @@ -208,10 +210,19 @@ void BRect::PrintToStream() const { - printf("BRect(l:%.1f, t:%.1f, r:%.1f, b:%.1f)\n", left, top, right, bottom); + BFileIO output(stdout); + PrintToStream(output); } +void +BRect::PrintToStream(BDataIO& output) const +{ + output.Print("BRect(l:%.1f, t:%.1f, r:%.1f, b:%.1f)\n", left, top, right, + bottom); +} + + bool BRect::operator==(BRect rect) const { @@ -250,7 +261,7 @@ return false; return !(rect.left > right || rect.right < left - || rect.top > bottom || rect.bottom < top); + || rect.top > bottom || rect.bottom < top); } Index: src/kits/storage/FdIO.cpp =================================================================== --- src/kits/storage/FdIO.cpp (revision 0) +++ src/kits/storage/FdIO.cpp (revision 0) @@ -0,0 +1,93 @@ +/* + * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx + * Distributed under the terms of the MIT License. + */ + +#include <FdIO.h> + +#include <errno.h> +#include <stdio.h> +#include <sys/stat.h> +#include <unistd.h> + + +BFdIO::BFdIO(int fd, bool takeOverOwnership) + : + fFD(fd), + fOwnsFD(takeOverOwnership) +{ +} + + +BFdIO::~BFdIO() +{ + if (fOwnsFD) + close(fFD); +} + + +ssize_t +BFdIO::Read(void *buffer, size_t size) +{ + ssize_t bytesRead = read(fFD, buffer, size); + return bytesRead >= 0 ? bytesRead : errno; +} + + +ssize_t +BFdIO::Write(const void *buffer, size_t size) +{ + ssize_t bytesWritten = write(fFD, buffer, size); + return bytesWritten >= 0 ? bytesWritten : errno; +} + + +ssize_t +BFdIO::ReadAt(off_t position, void *buffer, size_t size) +{ + ssize_t bytesRead = pread(fFD, buffer, size, position); + return bytesRead >= 0 ? bytesRead : errno; +} + + +ssize_t +BFdIO::WriteAt(off_t position, const void *buffer, size_t size) +{ + ssize_t bytesWritten = pwrite(fFD, buffer, size, position); + return bytesWritten >= 0 ? bytesWritten : errno; +} + + +off_t +BFdIO::Seek(off_t position, uint32 seekMode) +{ + off_t result = lseek(fFD, position, seekMode); + return result >= 0 ? result : errno; +} + + +off_t +BFdIO::Position() const +{ + off_t result = lseek(fFD, 0, SEEK_CUR); + return result >= 0 ? result : errno; +} + + +status_t +BFdIO::SetSize(off_t size) +{ + return ftruncate(fFD, size) == 0 ? B_OK : errno; +} + + +status_t +BFdIO::GetSize(off_t* size) const +{ + struct stat st; + if (fstat(fFD, &st) < 0) + return errno; + + *size = st.st_size; + return B_OK; +} Index: src/kits/storage/Jamfile =================================================================== --- src/kits/storage/Jamfile (revision 31316) +++ src/kits/storage/Jamfile (working copy) @@ -20,7 +20,9 @@ Directory.cpp Entry.cpp EntryList.cpp + FdIO.cpp File.cpp + FileIO.cpp FindDirectory.cpp Mime.cpp MimeType.cpp @@ -75,7 +77,7 @@ MutablePartition.cpp Partition.cpp PartitionDelegate.cpp - PartitioningInfo.cpp + PartitioningInfo.cpp PartitionReference.cpp CreateChildJob.cpp Index: src/kits/storage/FileIO.cpp =================================================================== --- src/kits/storage/FileIO.cpp (revision 0) +++ src/kits/storage/FileIO.cpp (revision 0) @@ -0,0 +1,145 @@ +/* + * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx + * Distributed under the terms of the MIT License. + */ + +#include <FileIO.h> + +#include <errno.h> +#include <stdio.h> + + +BFileIO::BFileIO(FILE* file, bool takeOverOwnership) + : + fFile(file), + fOwnsFile(takeOverOwnership) +{ +} + + +BFileIO::~BFileIO() +{ + if (fOwnsFile && fFile != NULL) + fclose(fFile); +} + + +ssize_t +BFileIO::Read(void *buffer, size_t size) +{ + errno = B_OK; + ssize_t bytesRead = fread(buffer, 1, size, fFile); + return bytesRead >= 0 ? bytesRead : errno; +} + + +ssize_t +BFileIO::Write(const void *buffer, size_t size) +{ + errno = B_OK; + ssize_t bytesRead = fwrite(buffer, 1, size, fFile); + return bytesRead >= 0 ? bytesRead : errno; +} + + +ssize_t +BFileIO::ReadAt(off_t position, void *buffer, size_t size) +{ + // save the old position and seek to the requested one + off_t oldPosition = _Seek(position, SEEK_SET); + if (oldPosition < 0) + return oldPosition; + + // read + ssize_t result = BFileIO::Read(buffer, size); + + // seek back + fseeko(fFile, oldPosition, SEEK_SET); + + return result; +} + + +ssize_t +BFileIO::WriteAt(off_t position, const void *buffer, size_t size) +{ + // save the old position and seek to the requested one + off_t oldPosition = _Seek(position, SEEK_SET); + if (oldPosition < 0) + return oldPosition; + + // write + ssize_t result = BFileIO::Write(buffer, size); + + // seek back + fseeko(fFile, oldPosition, SEEK_SET); + + return result; +} + + +off_t +BFileIO::Seek(off_t position, uint32 seekMode) +{ + if (fseeko(fFile, position, seekMode) < 0) + return errno; + + return BFileIO::Position(); +} + + +off_t +BFileIO::Position() const +{ + off_t result = ftello(fFile); + return result >= 0 ? result : errno; +} + + +status_t +BFileIO::SetSize(off_t size) +{ + return B_UNSUPPORTED; +} + + +status_t +BFileIO::GetSize(off_t* _size) const +{ + // save the current position and seek to the end + off_t position = _Seek(0, SEEK_END); + if (position < 0) + return position; + + // get the size (position at end) and seek back + off_t size = _Seek(position, SEEK_SET); + if (size < 0) + return size; + + *_size = size; + return B_OK; +} + + +off_t +BFileIO::_Seek(off_t position, uint32 seekMode) const +{ + // save the current position + off_t oldPosition = ftello(fFile); + if (oldPosition < 0) + return errno; + + // seek to the requested position + if (fseeko(fFile, position, seekMode) < 0) + return errno; + + return oldPosition; +} + + +ssize_t +BFileIO::VPrint(const char* format, va_list args) +{ + int result = vfprintf(fFile, format, args); + return result >= 0 ? result : errno; +} Index: src/kits/support/DataIO.cpp =================================================================== --- src/kits/support/DataIO.cpp (revision 31316) +++ src/kits/support/DataIO.cpp (working copy) @@ -24,6 +24,26 @@ } +ssize_t +BDataIO::Print(const char* format,...) +{ + va_list args; + va_start(args, format); + ssize_t result = VPrint(format, args); + va_end(args); + return result; +} + + +ssize_t +BDataIO::VPrint(const char* format, va_list args) +{ + char buffer[1024]; + int size = vsnprintf(buffer, sizeof(buffer), format, args); + return Write(buffer, size); +} + + // Private or Reserved BDataIO::BDataIO(const BDataIO &) @@ -40,9 +60,34 @@ } +extern "C" ssize_t +#if __GNUC__ == 2 +_ReservedDataIO1__7BDataIO(BDataIO* dataIO, const char* format,...) +#else +_ZN7BDataIO16_ReservedDataIO1Ev(BDataIO* dataIO, const char* format,...) +#endif +{ + va_list args; + va_start(args, format); + ssize_t result = dataIO->BDataIO::VPrint(format, args); + va_end(args); + return result; +} + + +extern "C" ssize_t +#if __GNUC__ == 2 +_ReservedDataIO2__7BDataIO(BDataIO* dataIO, const char* format, va_list args) +#else +_ZN7BDataIO16_ReservedDataIO2Ev(BDataIO* dataIO, const char* format, + va_list args) +#endif +{ + return dataIO->BDataIO::VPrint(format, args); +} + + // FBC -void BDataIO::_ReservedDataIO1(){} -void BDataIO::_ReservedDataIO2(){} void BDataIO::_ReservedDataIO3(){} void BDataIO::_ReservedDataIO4(){} void BDataIO::_ReservedDataIO5(){} @@ -184,14 +229,14 @@ ssize_t BMemoryIO::WriteAt(off_t pos, const void *buffer, size_t size) -{ +{ if (fReadOnly) return B_NOT_ALLOWED; if (buffer == NULL || pos < 0) return B_BAD_VALUE; - ssize_t sizeWritten = 0; + ssize_t sizeWritten = 0; if (pos < fBufferSize) { sizeWritten = min_c(static_cast<off_t>(size), fBufferSize - pos); memcpy(fBuffer + pos, buffer, sizeWritten); @@ -213,13 +258,13 @@ break; case SEEK_CUR: fPosition += position; - break; + break; case SEEK_END: fPosition = fLength + position; break; default: break; - } + } return fPosition; } @@ -366,7 +411,7 @@ if (char *newData = static_cast<char*>(realloc(fData, newSize))) { // set the new area to 0 if (newSize > fMallocSize) - memset(newData + fMallocSize, 0, newSize - fMallocSize); + memset(newData + fMallocSize, 0, newSize - fMallocSize); fData = newData; fMallocSize = newSize; } else // couldn't alloc the memory