diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-11-22 11:01:09 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-11-22 11:28:23 +0100 |
commit | eafaffa0f09b7c22eed906ef5356b1460d44da55 (patch) | |
tree | e77a1c3ddf714301b93810c2d123b6a7fcdc2ee8 /include/compat.h | |
parent | 435c9ef3de5797d7c49fa8fae12a02fd6bd209d6 (diff) |
Cleanup: move all the compatibillity fluff to a dedicated "libcompat"
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'include/compat.h')
-rw-r--r-- | include/compat.h | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/include/compat.h b/include/compat.h new file mode 100644 index 0000000..fae9d92 --- /dev/null +++ b/include/compat.h @@ -0,0 +1,124 @@ +/* SPDX-License-Identifier: LGPL-3.0-or-later */ +/* + * util.h + * + * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> + */ +#ifndef COMPAT_H +#define COMPAT_H + +#if defined(__APPLE__) +#include <libkern/OSByteOrder.h> + +#define htole16(x) OSSwapHostToLittleInt16(x) +#define htole32(x) OSSwapHostToLittleInt32(x) +#define htole64(x) OSSwapHostToLittleInt64(x) + +#define le32toh(x) OSSwapLittleToHostInt32(x) +#define le16toh(x) OSSwapLittleToHostInt16(x) +#define le64toh(x) OSSwapLittleToHostInt64(x) +#elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) +#include <sys/endian.h> +#elif defined(_WIN32) || defined(__WINDOWS__) +#define htole16(x) (x) +#define htole32(x) (x) +#define htole64(x) (x) + +#define le16toh(x) (x) +#define le32toh(x) (x) +#define le64toh(x) (x) +#else +#include <endian.h> +#endif + +#if defined(_WIN32) || defined(__WINDOWS__) +#include "sqfs/inode.h" + +#define S_IFSOCK SQFS_INODE_MODE_SOCK +#define S_IFLNK SQFS_INODE_MODE_LNK +#define S_IFREG SQFS_INODE_MODE_REG +#define S_IFBLK SQFS_INODE_MODE_BLK +#define S_IFDIR SQFS_INODE_MODE_DIR +#define S_IFCHR SQFS_INODE_MODE_CHR +#define S_IFIFO SQFS_INODE_MODE_FIFO +#define S_IFMT SQFS_INODE_MODE_MASK + +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) + +#define S_ISUID SQFS_INODE_SET_UID +#define S_ISGID SQFS_INODE_SET_GID +#define S_ISVTX SQFS_INODE_STICKY + +#define S_IRWXU SQFS_INODE_OWNER_MASK +#define S_IRUSR SQFS_INODE_OWNER_R +#define S_IWUSR SQFS_INODE_OWNER_W +#define S_IXUSR SQFS_INODE_OWNER_X + +#define S_IRWXG SQFS_INODE_GROUP_MASK +#define S_IRGRP SQFS_INODE_GROUP_R +#define S_IWGRP SQFS_INODE_GROUP_W +#define S_IXGRP SQFS_INODE_GROUP_X + +#define S_IRWXO SQFS_INODE_OTHERS_MASK +#define S_IROTH SQFS_INODE_OTHERS_R +#define S_IWOTH SQFS_INODE_OTHERS_W +#define S_IXOTH SQFS_INODE_OTHERS_X + +struct stat { + sqfs_u32 st_dev; + sqfs_u32 st_ino; + sqfs_u16 st_mode; + sqfs_u16 st_nlink; + sqfs_u32 st_uid; + sqfs_u32 st_gid; + sqfs_u32 st_rdev; + sqfs_u64 st_size; + sqfs_u32 st_blksize; + sqfs_u32 st_blocks; + sqfs_u64 st_atime; + sqfs_u64 st_mtime; + sqfs_u64 st_ctime; +}; + +/* lifted from musl libc */ +#define major(x) \ + ((unsigned)( (((x)>>31>>1) & 0xfffff000) | (((x)>>8) & 0x00000fff) )) + +#define minor(x) \ + ((unsigned)( (((x)>>12) & 0xffffff00) | ((x) & 0x000000ff) )) + +#define makedev(x,y) ( \ + (((x)&0xfffff000ULL) << 32) | \ + (((x)&0x00000fffULL) << 8) | \ + (((y)&0xffffff00ULL) << 12) | \ + (((y)&0x000000ffULL)) ) +#else +#include <sys/types.h> +#include <sys/stat.h> + +#ifdef __linux__ +#include <sys/sysmacros.h> +#endif +#endif + +#ifndef HAVE_GETLINE +#include <stdio.h> + +ssize_t getline(char **line, size_t *n, FILE *fp); +#endif + +#ifndef HAVE_STRNDUP +char *strndup(const char *str, size_t max_len); +#endif + +#ifndef HAVE_GETSUBOPT +int getsubopt(char **opt, char *const *keys, char **val); +#endif + +#endif /* COMPAT_H */ |