xref: /haiku/src/system/libroot/posix/unistd/read.c (revision 71452e98334eaac603bf542d159e24788a46bebb)
1 /*
2  * Copyright 2001, Manuel J. Petit. All rights reserved.
3  * Distributed under the terms of the NewOS License.
4  */
5 
6 /*
7  * Copyright 2002-2007, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
8  * Distributed under the terms of the MIT License.
9  */
10 
11 
12 #include <unistd.h>
13 
14 #include <errno.h>
15 #include <pthread.h>
16 
17 #include <syscall_utils.h>
18 
19 #include <errno_private.h>
20 #include <syscalls.h>
21 
22 
23 ssize_t
24 read(int fd, void* buffer, size_t bufferSize)
25 {
26 	ssize_t status = _kern_read(fd, -1, buffer, bufferSize);
27 
28 	RETURN_AND_SET_ERRNO_TEST_CANCEL(status);
29 }
30 
31 
32 ssize_t
33 read_pos(int fd, off_t pos, void* buffer, size_t bufferSize)
34 {
35 	if (pos < 0)
36 		RETURN_AND_SET_ERRNO_TEST_CANCEL(B_BAD_VALUE);
37 
38 	RETURN_AND_SET_ERRNO_TEST_CANCEL(_kern_read(fd, pos, buffer, bufferSize));
39 }
40 
41 
42 ssize_t
43 pread(int fd, void* buffer, size_t bufferSize, off_t pos)
44 {
45 	if (pos < 0)
46 		RETURN_AND_SET_ERRNO_TEST_CANCEL(B_BAD_VALUE);
47 
48 	RETURN_AND_SET_ERRNO_TEST_CANCEL(_kern_read(fd, pos, buffer, bufferSize));
49 }
50