xref: /freebsd/contrib/libfido2/openbsd-compat/posix_win.c (revision e1c4c8dd8d2d10b6104f06856a77bd5b4813a801)
1 /*
2  * Public domain
3  *
4  * File IO compatibility shims
5  * Brent Cook <bcook@openbsd.org>
6  */
7 
8 #define NO_REDEF_POSIX_FUNCTIONS
9 
10 #include <windows.h>
11 
12 #include <errno.h>
13 #include <io.h>
14 
15 #include "posix_win.h"
16 
17 int
18 posix_open(const char *path, ...)
19 {
20 	va_list ap;
21 	int mode = 0;
22 	int flags;
23 
24 	va_start(ap, path);
25 	flags = va_arg(ap, int);
26 	if (flags & O_CREAT)
27 		mode = va_arg(ap, int);
28 	va_end(ap);
29 
30 	flags |= O_BINARY | O_NOINHERIT;
31 
32 	return (open(path, flags, mode));
33 }
34 
35 int
36 posix_close(int fd)
37 {
38 	return (close(fd));
39 }
40 
41 ssize_t
42 posix_read(int fd, void *buf, size_t count)
43 {
44 	if (count > INT_MAX) {
45 		errno = EINVAL;
46 		return (-1);
47 	}
48 
49 	return (read(fd, buf, (unsigned int)count));
50 }
51 
52 ssize_t
53 posix_write(int fd, const void *buf, size_t count)
54 {
55 	if (count > INT_MAX) {
56 		errno = EINVAL;
57 		return (-1);
58 	}
59 
60 	return (write(fd, buf, (unsigned int)count));
61 }
62