fb11e1fe0a
err and warn are BSD format but they are not recommended by library developers. However their consiseness is useful! The solution is to use some macros that create xerr etc which then just map to the error() function. The next problem is error() uses program_invocation_name so we set this to program_invovation_short_name This is a global set but seems to be the convention (or at least errors are on the short name only) used everywhere else.
109 lines
3.4 KiB
C
109 lines
3.4 KiB
C
#ifndef PROCPS_PROC_PROCPS_H
|
|
#define PROCPS_PROC_PROCPS_H
|
|
|
|
#ifdef __cplusplus
|
|
#define EXTERN_C_BEGIN extern "C" {
|
|
#define EXTERN_C_END }
|
|
#else
|
|
#define EXTERN_C_BEGIN
|
|
#define EXTERN_C_END
|
|
#endif
|
|
|
|
// Some ports make the mistake of running a 32-bit userspace
|
|
// on a 64-bit kernel. Shame on them. It's not at all OK to
|
|
// make everything "long long", since that causes unneeded
|
|
// slowness on 32-bit hardware.
|
|
//
|
|
// SPARC: The 32-bit kernel was looking like an ex-penguin,
|
|
// but it lives! ("I'm not dead yet.") So, 64-bit users will
|
|
// just have to compile for 64-bit. Aw, the suffering.
|
|
//
|
|
// MIPS: Used 32-bit for embedded systems and obsolete hardware.
|
|
// The 64-bit systems use an n32 format executable, defining
|
|
// _ABIN32 to indicate this. Since n32 doesn't currently run on
|
|
// any 32-bit system, nobody get hurt if it's bloated. Not that
|
|
// this is sane of course, but it won't hurt the 32-bit users.
|
|
// __mips_eabi means eabi, which comes in both sizes, but isn't used.
|
|
//
|
|
// PowerPC: Big ugly problem! 32-bit Macs are still popular. :-/
|
|
//
|
|
// x86-64: So far, nobody has been dumb enough to go 32-bit.
|
|
//
|
|
// Unknown: PA-RISC and zSeries
|
|
//
|
|
#if defined(k64test) || (defined(_ABIN32) && _MIPS_SIM == _ABIN32)
|
|
#define KLONG long long // not typedef; want "unsigned KLONG" to work
|
|
#define KLF "L"
|
|
#define STRTOUKL strtoull
|
|
#else
|
|
#define KLONG long
|
|
#define KLF "l"
|
|
#define STRTOUKL strtoul
|
|
#endif
|
|
|
|
// since gcc-2.5
|
|
#define NORETURN __attribute__((__noreturn__))
|
|
#define FUNCTION __attribute__((__const__)) // no access to global mem, even via ptr, and no side effect
|
|
|
|
#if __GNUC__ > 2 || __GNUC_MINOR__ >= 96
|
|
// won't alias anything, and aligned enough for anything
|
|
#define MALLOC __attribute__ ((__malloc__))
|
|
// no side effect, may read globals
|
|
#define PURE __attribute__ ((__pure__))
|
|
// tell gcc what to expect: if(unlikely(err)) die(err);
|
|
#define likely(x) __builtin_expect(!!(x),1)
|
|
#define unlikely(x) __builtin_expect(!!(x),0)
|
|
#define expected(x,y) __builtin_expect((x),(y))
|
|
#else
|
|
#define MALLOC
|
|
#define PURE
|
|
#define likely(x) (x)
|
|
#define unlikely(x) (x)
|
|
#define expected(x,y) (x)
|
|
#endif
|
|
|
|
#ifdef SHARED
|
|
# if SHARED==1 && (__GNUC__ > 2 || __GNUC_MINOR__ >= 96)
|
|
# define LABEL_OFFSET
|
|
# endif
|
|
#endif
|
|
|
|
#define STRINGIFY_ARG(a) #a
|
|
#define STRINGIFY(a) STRINGIFY_ARG(a)
|
|
|
|
// marks old junk, to warn non-procps-ng library users
|
|
#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3
|
|
#define OBSOLETE __attribute__((deprecated))
|
|
#else
|
|
#define OBSOLETE
|
|
#endif
|
|
|
|
#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 1 ) || __GNUC__ > 3
|
|
// Tells gcc that function is library-internal;
|
|
// so no need to do dynamic linking at run-time.
|
|
// This might work with slightly older compilers too.
|
|
#define HIDDEN __attribute__((visibility("hidden")))
|
|
// The opposite, in case -fvisibility=hidden used
|
|
#define EXPORT __attribute__((visibility("default")))
|
|
// Tell g++ that a function won't throw exceptions.
|
|
#define NOTHROW __attribute__((__nothrow__))
|
|
#else
|
|
#define HIDDEN
|
|
#define EXPORT
|
|
#define NOTHROW
|
|
#endif
|
|
|
|
// Like HIDDEN, but for an alias that gets created.
|
|
// In gcc-3.2 there is an alias+hidden conflict.
|
|
// Many will have patched this bug, but oh well.
|
|
#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 2 ) || __GNUC__ > 3
|
|
#define HIDDEN_ALIAS(x) extern __typeof(x) x##_direct __attribute__((alias(#x),visibility("hidden")))
|
|
#else
|
|
#define HIDDEN_ALIAS(x) extern __typeof(x) x##_direct __attribute__((alias(#x)))
|
|
#endif
|
|
|
|
|
|
typedef void (*message_fn)(const char *restrict, ...) __attribute__((format(printf,1,2)));
|
|
|
|
#endif
|