1/*
2 * Copyright 2003, Axel D��rfler, axeld@pinc-software.de.
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5
6
7#include "Handle.h"
8
9#include <SupportDefs.h>
10
11#include <platform/openfirmware/openfirmware.h>
12#include <util/kernel_cpp.h>
13
14
15Handle::Handle(intptr_t handle, bool takeOwnership)
16	:
17	fHandle(handle),
18	fOwnHandle(takeOwnership)
19{
20}
21
22
23Handle::Handle(void)
24	:
25	fHandle(0)
26{
27}
28
29
30Handle::~Handle()
31{
32	if (fOwnHandle)
33		of_close(fHandle);
34}
35
36
37void
38Handle::SetHandle(intptr_t handle, bool takeOwnership)
39{
40	if (fHandle && fOwnHandle)
41		of_close(fHandle);
42
43	fHandle = handle;
44	fOwnHandle = takeOwnership;
45}
46
47
48ssize_t
49Handle::ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize)
50{
51	if (pos == -1 || of_seek(fHandle, pos) != OF_FAILED)
52		return of_read(fHandle, buffer, bufferSize);
53
54	return B_ERROR;
55}
56
57
58ssize_t
59Handle::WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize)
60{
61	if (pos == -1 || of_seek(fHandle, pos) != OF_FAILED)
62		return of_write(fHandle, buffer, bufferSize);
63
64	return B_ERROR;
65}
66
67
68off_t
69Handle::Size() const
70{
71	// ToDo: fix this!
72	return 1024LL * 1024 * 1024 * 1024;
73		// 1024 GB
74}
75
76