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 */