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