You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
1.0 KiB

#pragma once
#define _GNU_SOURCE
#include <stdint.h>
#include <sys/param.h>
// Ensure we use a BSD powerof2 that works in static_assert (unlike glibc's).
#undef powerof2
#define powerof2(x) ((((x)-1)&(x))==0)
// This is in BSD's <sys/param.h>.
#define nitems(x) (sizeof((x))/sizeof((x)[0]))
// This is used as the size of the write buffer of sectors.
#define MAXPHYS (1024 * 1024)
// On glibc, these headers use `__unused` as an identifier, so drag them in
// first.
#include <sys/stat.h>
#if __has_include(<sys/sysctl.h>)
#include <sys/sysctl.h>
#endif
// Bionic, like the BSDs, has __unused. glibc doesn't.
#if defined(__GLIBC__)
#define __unused __attribute__((__unused__))
#endif
// Neither macOS nor glibc has __packed.
#if defined(__APPLE__) || defined(__GLIBC__)
#define __packed __attribute__((__packed__))
#endif
// The BSDs (including Android and macOS) have getprogname(), but glibc doesn't.
#if defined(__GLIBC__)
#include <errno.h>
static inline char* getprogname() { return program_invocation_short_name; }
#endif