From fe281d90dffcf2c3bb274bb7e6d3a759bcccfada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 12 Sep 2003 01:18:02 +0000 Subject: [PATCH] Now has the possibility of opening a file directly, instead of only accepting already opened files. Hence, it now also has an InitCheck() method, because opening doesn't have to succeed. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4635 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/tests/kernel/boot/loader/Handle.cpp | 42 +++++++++++++++++++++++-- src/tests/kernel/boot/loader/Handle.h | 7 ++++- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/tests/kernel/boot/loader/Handle.cpp b/src/tests/kernel/boot/loader/Handle.cpp index d3487de075..d2f214e302 100644 --- a/src/tests/kernel/boot/loader/Handle.cpp +++ b/src/tests/kernel/boot/loader/Handle.cpp @@ -11,6 +11,9 @@ #include #include +#include +#include +#include #ifndef HAVE_READ_POS @@ -22,11 +25,25 @@ Handle::Handle(int handle, bool takeOwnership) : fHandle(handle), - fOwnHandle(takeOwnership) + fOwnHandle(takeOwnership), + fPath(NULL) { } +Handle::Handle(const char *path) + : + fOwnHandle(true), + fPath(NULL) +{ + fHandle = open(path, O_RDONLY); + if (fHandle < B_OK) + return; + + fPath = strdup(path); +} + + Handle::Handle(void) : fHandle(0) @@ -38,11 +55,20 @@ Handle::~Handle() { if (fOwnHandle) close(fHandle); + + free(fPath); +} + + +status_t +Handle::InitCheck() +{ + return fHandle < B_OK ? fHandle : B_OK; } void -Handle::SetHandle(int handle, bool takeOwnership) +Handle::SetTo(int handle, bool takeOwnership) { if (fHandle && fOwnHandle) close(fHandle); @@ -66,6 +92,18 @@ Handle::WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize) } +status_t +Handle::GetName(char *nameBuffer, size_t bufferSize) const +{ + if (fPath == NULL) + return B_ERROR; + + strncpy(nameBuffer, fPath, bufferSize - 1); + nameBuffer[bufferSize - 1] = '\0'; + return B_OK; +} + + off_t Handle::Size() const { diff --git a/src/tests/kernel/boot/loader/Handle.h b/src/tests/kernel/boot/loader/Handle.h index bdf2d59703..b45d75ea07 100644 --- a/src/tests/kernel/boot/loader/Handle.h +++ b/src/tests/kernel/boot/loader/Handle.h @@ -14,19 +14,24 @@ class Handle : public Node { public: Handle(int handle, bool takeOwnership = true); + Handle(const char *path); Handle(); virtual ~Handle(); - void SetHandle(int handle, bool takeOwnership = true); + status_t InitCheck(); + + void SetTo(int handle, bool takeOwnership = true); virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize); virtual ssize_t WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize); + virtual status_t GetName(char *nameBuffer, size_t bufferSize) const; virtual off_t Size() const; protected: int fHandle; bool fOwnHandle; + char *fPath; }; #endif /* __cplusplus */