xref: /netbsd-src/external/bsd/libfido2/dist/openbsd-compat/openbsd-compat.h (revision 2d40c4512a84c0d064ec30a492c5e2a14d230bc3)
1ba9bdd8bSchristos /*
2*2d40c451Schristos  * Copyright (c) 2018-2021 Yubico AB. All rights reserved.
3ba9bdd8bSchristos  * Use of this source code is governed by a BSD-style
4ba9bdd8bSchristos  * license that can be found in the LICENSE file.
5*2d40c451Schristos  * SPDX-License-Identifier: BSD-2-Clause
6ba9bdd8bSchristos  */
7ba9bdd8bSchristos 
8ba9bdd8bSchristos #ifndef _OPENBSD_COMPAT_H
9ba9bdd8bSchristos #define _OPENBSD_COMPAT_H
10ba9bdd8bSchristos 
11ba9bdd8bSchristos #if defined(_MSC_VER)
12ba9bdd8bSchristos #include "types.h"
13ba9bdd8bSchristos #endif
14ba9bdd8bSchristos 
15ba9bdd8bSchristos #if defined(HAVE_ENDIAN_H)
16ba9bdd8bSchristos #include <endian.h>
17ba9bdd8bSchristos #endif
18ba9bdd8bSchristos 
19ba9bdd8bSchristos #if defined(__APPLE__) && !defined(HAVE_ENDIAN_H)
20ba9bdd8bSchristos #include <libkern/OSByteOrder.h>
21ba9bdd8bSchristos #define be16toh(x) OSSwapBigToHostInt16((x))
22ba9bdd8bSchristos #define htobe16(x) OSSwapHostToBigInt16((x))
23ba9bdd8bSchristos #define be32toh(x) OSSwapBigToHostInt32((x))
24*2d40c451Schristos #define htobe32(x) OSSwapHostToBigInt32((x))
2595dbdf32Schristos #define htole32(x) OSSwapHostToLittleInt32((x))
2695dbdf32Schristos #define htole64(x) OSSwapHostToLittleInt64((x))
27ba9bdd8bSchristos #endif /* __APPLE__ && !HAVE_ENDIAN_H */
28ba9bdd8bSchristos 
29ba9bdd8bSchristos #if defined(_WIN32) && !defined(HAVE_ENDIAN_H)
3095dbdf32Schristos #include <stdint.h>
31ba9bdd8bSchristos #include <winsock2.h>
32ba9bdd8bSchristos #if !defined(_MSC_VER)
33ba9bdd8bSchristos #include <sys/param.h>
34ba9bdd8bSchristos #endif
35ba9bdd8bSchristos #define be16toh(x) ntohs((x))
36ba9bdd8bSchristos #define htobe16(x) htons((x))
37ba9bdd8bSchristos #define be32toh(x) ntohl((x))
38*2d40c451Schristos #define htobe32(x) htonl((x))
3995dbdf32Schristos uint32_t htole32(uint32_t);
4095dbdf32Schristos uint64_t htole64(uint64_t);
41ba9bdd8bSchristos #endif /* _WIN32 && !HAVE_ENDIAN_H */
42ba9bdd8bSchristos 
43*2d40c451Schristos #if (defined(__FreeBSD__) || defined(__MidnightBSD__)) && !defined(HAVE_ENDIAN_H)
44ba9bdd8bSchristos #include <sys/endian.h>
45ba9bdd8bSchristos #endif
46ba9bdd8bSchristos 
47ba9bdd8bSchristos #include <stdlib.h>
4895dbdf32Schristos #include <string.h>
49ba9bdd8bSchristos 
50ba9bdd8bSchristos #if !defined(HAVE_STRLCAT)
51ba9bdd8bSchristos size_t strlcat(char *, const char *, size_t);
52ba9bdd8bSchristos #endif
53ba9bdd8bSchristos 
54ba9bdd8bSchristos #if !defined(HAVE_STRLCPY)
55ba9bdd8bSchristos size_t strlcpy(char *, const char *, size_t);
56ba9bdd8bSchristos #endif
57ba9bdd8bSchristos 
58*2d40c451Schristos #if !defined(HAVE_STRSEP)
59*2d40c451Schristos char *strsep(char **, const char *);
60*2d40c451Schristos #endif
61*2d40c451Schristos 
62ba9bdd8bSchristos #if !defined(HAVE_RECALLOCARRAY)
63ba9bdd8bSchristos void *recallocarray(void *, size_t, size_t, size_t);
64ba9bdd8bSchristos #endif
65ba9bdd8bSchristos 
66ba9bdd8bSchristos #if !defined(HAVE_EXPLICIT_BZERO)
67ba9bdd8bSchristos void explicit_bzero(void *, size_t);
68ba9bdd8bSchristos #endif
69ba9bdd8bSchristos 
7095dbdf32Schristos #if !defined(HAVE_FREEZERO)
7195dbdf32Schristos void freezero(void *, size_t);
7295dbdf32Schristos #endif
7395dbdf32Schristos 
74ba9bdd8bSchristos #if !defined(HAVE_GETPAGESIZE)
75ba9bdd8bSchristos int getpagesize(void);
76ba9bdd8bSchristos #endif
77ba9bdd8bSchristos 
78ba9bdd8bSchristos #if !defined(HAVE_TIMINGSAFE_BCMP)
79ba9bdd8bSchristos int timingsafe_bcmp(const void *, const void *, size_t);
80ba9bdd8bSchristos #endif
81ba9bdd8bSchristos 
82ba9bdd8bSchristos #if !defined(HAVE_READPASSPHRASE)
83ba9bdd8bSchristos #include "readpassphrase.h"
84ba9bdd8bSchristos #else
85ba9bdd8bSchristos #include <readpassphrase.h>
86ba9bdd8bSchristos #endif
87ba9bdd8bSchristos 
8895dbdf32Schristos #include <openssl/opensslv.h>
8995dbdf32Schristos 
90ba9bdd8bSchristos #if !defined(HAVE_ERR_H)
91ba9bdd8bSchristos #include "err.h"
92ba9bdd8bSchristos #else
93ba9bdd8bSchristos #include <err.h>
94ba9bdd8bSchristos #endif
95ba9bdd8bSchristos 
96ba9bdd8bSchristos #if !defined(HAVE_GETOPT)
97ba9bdd8bSchristos #include "getopt.h"
98ba9bdd8bSchristos #else
99ba9bdd8bSchristos #include <unistd.h>
100ba9bdd8bSchristos #endif
101ba9bdd8bSchristos 
102ba9bdd8bSchristos #if !defined(HAVE_GETLINE)
103ba9bdd8bSchristos #include <stdio.h>
104ba9bdd8bSchristos ssize_t getline(char **, size_t *, FILE *);
105ba9bdd8bSchristos #endif
106ba9bdd8bSchristos 
10795dbdf32Schristos #if defined(_MSC_VER)
10895dbdf32Schristos #define strerror_r(e, b, l) strerror_s((b), (l), (e))
10995dbdf32Schristos #endif
11095dbdf32Schristos 
1111fc1e710Schristos #include "time.h"
1121fc1e710Schristos 
11395dbdf32Schristos #if !defined(HAVE_POSIX_IOCTL)
11495dbdf32Schristos #define IOCTL_REQ(x)	(x)
11595dbdf32Schristos #else
11695dbdf32Schristos #define IOCTL_REQ(x)	((int)(x))
11795dbdf32Schristos #endif
11895dbdf32Schristos 
119*2d40c451Schristos #if !defined(HAVE_ASPRINTF)
120*2d40c451Schristos int asprintf(char **, const char *, ...);
121*2d40c451Schristos #endif
122*2d40c451Schristos 
123ba9bdd8bSchristos #endif /* !_OPENBSD_COMPAT_H */
124