X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/0f695324ed4963065d9a5c4308d281a02fd237f1..d247f1cf67f3e579ccddfa986c603dd91880cbe7:/h/mh.h diff --git a/h/mh.h b/h/mh.h index bebe8b86..069d9cbe 100644 --- a/h/mh.h +++ b/h/mh.h @@ -22,24 +22,15 @@ */ #define NMH_BUFSIZ max(BUFSIZ, 8192) -#ifndef FALSE -#define FALSE false -#endif -#ifndef TRUE -#define TRUE true -#endif -typedef unsigned char boolean; /* not int so we can pack in a structure */ - /* If we're using gcc then tell it extra information so it can do more * compile-time checks. */ #if __GNUC__ > 2 #define NORETURN __attribute__((__noreturn__)) -#define CHECK_PRINTF(fmt, arg) __attribute__((format(printf, fmt, arg))) -#define ALLOC_SIZE(...) __attribute__((alloc_size(__VA_ARGS__))) #define CONST __attribute__((const)) #define MALLOC __attribute__((malloc)) #define NONNULL(...) __attribute__((nonnull(__VA_ARGS__))) -#define NMH_UNUSED(i) (void) i +#define PURE __attribute__((pure)) +#define ENDNULL __attribute__((sentinel)) #else #define NORETURN #define CHECK_PRINTF(fmt, arg) @@ -47,9 +38,21 @@ typedef unsigned char boolean; /* not int so we can pack in a structure */ #define CONST #define MALLOC #define NONNULL(...) -#define NMH_UNUSED(i) i +#define PURE +#define ENDNULL +#endif + +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) +#define ALLOC_SIZE(...) __attribute__((alloc_size(__VA_ARGS__))) +#define CHECK_PRINTF(fmt, arg) __attribute__((format(printf, fmt, arg))) +#else +#define ALLOC_SIZE(...) +#define CHECK_PRINTF(fmt, arg) #endif +/* Silence the compiler's "unused variable" warning. */ +#define NMH_UNUSED(i) (void)i + /* DIM gives the number of elements in the one-dimensional array a. */ #define DIM(a) (sizeof (a) / sizeof (*(a))) @@ -60,6 +63,9 @@ typedef unsigned char boolean; /* not int so we can pack in a structure */ /* FENDNULL fends off NULL by giving an empty string instead. */ #define FENDNULL(s) ((s) ? (s) : "") +/* If not specified in a file and PAGER is NULL or empty. */ +#define DEFAULT_PAGER "more" + /* * char array that keeps track of size in both bytes and characters * Usage note: @@ -84,8 +90,8 @@ void charstring_clear (charstring_t) NONNULL(1); const char *charstring_buffer (const charstring_t) NONNULL(1); /* User is responsible for free'ing result of buffer copy. */ char *charstring_buffer_copy (const charstring_t) NONNULL(1); -size_t charstring_bytes (const charstring_t) NONNULL(1); -size_t charstring_chars (const charstring_t) NONNULL(1); +size_t charstring_bytes (const charstring_t) NONNULL(1) PURE; +size_t charstring_chars (const charstring_t) NONNULL(1) PURE; /* Length of the last character in the charstring. */ int charstring_last_char_len (const charstring_t) NONNULL(1); @@ -218,8 +224,8 @@ void bvector_fini(struct bvector *bv) NONNULL(1); void bvector_clear (bvector_t, size_t) NONNULL(1); void bvector_clear_all (bvector_t) NONNULL(1); void bvector_set (bvector_t, size_t) NONNULL(1); -unsigned int bvector_at (bvector_t, size_t) NONNULL(1); -unsigned long bvector_first_bits (bvector_t) NONNULL(1); +unsigned int bvector_at (bvector_t, size_t) NONNULL(1) PURE; +unsigned long bvector_first_bits (bvector_t) NONNULL(1) PURE; typedef struct svector *svector_t; @@ -227,9 +233,9 @@ svector_t svector_create (size_t); void svector_free (svector_t) NONNULL(1); char *svector_push_back (svector_t, char *) NONNULL(1); char *svector_at (svector_t, size_t) NONNULL(1); -char **svector_find(svector_t, const char *) NONNULL(1); -char **svector_strs (svector_t) NONNULL(1); -size_t svector_size (svector_t) NONNULL(1); +char **svector_find(svector_t, const char *) NONNULL(1) PURE; +char **svector_strs (svector_t) NONNULL(1) PURE; +size_t svector_size (svector_t) NONNULL(1) PURE; typedef struct ivector *ivector_t;