2 * Copyright 2003-2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3 * Distributed under the terms of the MIT License.
9 #include <SupportDefs.h>
10 #include <boot/platform.h>
21 # define read_pos(fd, pos, buffer, size) pread(fd, buffer, size, pos)
22 # define write_pos(fd, pos, buffer, size) pwrite(fd, buffer, size, pos)
26 Handle::Handle(int handle
, bool takeOwnership
)
29 fOwnHandle(takeOwnership
),
35 Handle::Handle(const char *path
)
40 fHandle
= open(path
, O_RDONLY
);
69 return fHandle
< B_OK
? fHandle
: B_OK
;
74 Handle::SetTo(int handle
, bool takeOwnership
)
76 if (fHandle
&& fOwnHandle
)
80 fOwnHandle
= takeOwnership
;
85 Handle::ReadAt(void *cookie
, off_t pos
, void *buffer
, size_t bufferSize
)
87 //printf("Handle::ReadAt(pos = %Ld, buffer = %p, size = %lu)\n", pos, buffer, bufferSize);
88 return read_pos(fHandle
, pos
, buffer
, bufferSize
);
93 Handle::WriteAt(void *cookie
, off_t pos
, const void *buffer
, size_t bufferSize
)
95 return write_pos(fHandle
, pos
, buffer
, bufferSize
);
100 Handle::GetName(char *nameBuffer
, size_t bufferSize
) const
105 strncpy(nameBuffer
, fPath
, bufferSize
- 1);
106 nameBuffer
[bufferSize
- 1] = '\0';
115 if (fstat(fHandle
, &stat
) == B_OK
) {
116 if (stat
.st_size
== 0) {
118 return 1024LL * 1024 * 1024 * 1024;