blob: caed9dde282c071f6671786b7323d6c4d598c103 [file] [log] [blame]
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +01001#ifndef _STD_H
2#define _STD_H
3
4#include <stddef.h>
5#include <stdint.h>
6
7void *memset(void *s, int c, size_t n);
8void *memcpy(void *dst, const void *src, size_t n);
9void *memmove(void *dst, const void *src, size_t n);
10int memcmp(const void *a, const void *b, size_t n);
11
12size_t strlen(const char *str);
13int strcmp(const char *a, const char *b);
14
Andrew Scull29d40392018-07-16 11:46:59 +010015static inline uint16_t be16toh(uint16_t v)
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010016{
17 return v << 8 | v >> 8;
18}
19
Andrew Scull29d40392018-07-16 11:46:59 +010020static inline uint32_t be32toh(uint32_t v)
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010021{
22 /* TODO: no conversion needed if native is big endian. */
23 return (v << 24) |
24 (v >> 24) |
25 ((v & 0xff00) << 8) |
26 ((v & 0xff0000) >> 8);
27}
28
Andrew Scull29d40392018-07-16 11:46:59 +010029static inline uint64_t be64toh(uint64_t v)
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010030{
31 /* TODO: no conversion needed if native is big endian. */
32 return (v << 56) |
33 (v >> 56) |
34 ((v & 0xff00) << 40) |
35 ((v & 0xff000000000000) >> 40) |
36 ((v & 0xff0000) << 24) |
37 ((v & 0xff0000000000) >> 24) |
38 ((v & 0xff000000) << 8) |
39 ((v & 0xff00000000) >> 8);
40}
41
Andrew Scull29d40392018-07-16 11:46:59 +010042static inline uint32_t htobe32(uint32_t v)
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010043{
Andrew Scull29d40392018-07-16 11:46:59 +010044 return be32toh(v);
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010045}
46
Andrew Scull29d40392018-07-16 11:46:59 +010047static inline uint64_t htobe64(uint64_t v)
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010048{
Andrew Scull29d40392018-07-16 11:46:59 +010049 return be64toh(v);
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010050}
51
52#endif /* STD_H */