git-compat-util.hon commit general improvements (43abf13)
   1#ifndef GIT_COMPAT_UTIL_H
   2#define GIT_COMPAT_UTIL_H
   3
   4#ifdef USE_MSVC_CRTDBG
   5/*
   6 * For these to work they must appear very early in each
   7 * file -- before most of the standard header files.
   8 */
   9#include <stdlib.h>
  10#include <crtdbg.h>
  11#endif
  12
  13#define _FILE_OFFSET_BITS 64
  14
  15
  16/* Derived from Linux "Features Test Macro" header
  17 * Convenience macros to test the versions of gcc (or
  18 * a compatible compiler).
  19 * Use them like this:
  20 *  #if GIT_GNUC_PREREQ (2,8)
  21 *   ... code requiring gcc 2.8 or later ...
  22 *  #endif
  23*/
  24#if defined(__GNUC__) && defined(__GNUC_MINOR__)
  25# define GIT_GNUC_PREREQ(maj, min) \
  26        ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
  27#else
  28 #define GIT_GNUC_PREREQ(maj, min) 0
  29#endif
  30
  31
  32#ifndef FLEX_ARRAY
  33/*
  34 * See if our compiler is known to support flexible array members.
  35 */
  36#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && (!defined(__SUNPRO_C) || (__SUNPRO_C > 0x580))
  37# define FLEX_ARRAY /* empty */
  38#elif defined(__GNUC__)
  39# if (__GNUC__ >= 3)
  40#  define FLEX_ARRAY /* empty */
  41# else
  42#  define FLEX_ARRAY 0 /* older GNU extension */
  43# endif
  44#endif
  45
  46/*
  47 * Otherwise, default to safer but a bit wasteful traditional style
  48 */
  49#ifndef FLEX_ARRAY
  50# define FLEX_ARRAY 1
  51#endif
  52#endif
  53
  54
  55/*
  56 * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression.
  57 * @cond: the compile-time condition which must be true.
  58 *
  59 * Your compile will fail if the condition isn't true, or can't be evaluated
  60 * by the compiler.  This can be used in an expression: its value is "0".
  61 *
  62 * Example:
  63 *      #define foo_to_char(foo)                                        \
  64 *               ((char *)(foo)                                         \
  65 *                + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0))
  66 */
  67#define BUILD_ASSERT_OR_ZERO(cond) \
  68        (sizeof(char [1 - 2*!(cond)]) - 1)
  69
  70#if GIT_GNUC_PREREQ(3, 1)
  71 /* &arr[0] degrades to a pointer: a different type from an array */
  72# define BARF_UNLESS_AN_ARRAY(arr)                                              \
  73        BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(__typeof__(arr), \
  74                                                           __typeof__(&(arr)[0])))
  75#else
  76# define BARF_UNLESS_AN_ARRAY(arr) 0
  77#endif
  78/*
  79 * ARRAY_SIZE - get the number of elements in a visible array
  80 *  <at> x: the array whose size you want.
  81 *
  82 * This does not work on pointers, or arrays declared as [], or
  83 * function parameters.  With correct compiler support, such usage
  84 * will cause a build error (see the build_assert_or_zero macro).
  85 */
  86#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]) + BARF_UNLESS_AN_ARRAY(x))
  87
  88#define bitsizeof(x)  (CHAR_BIT * sizeof(x))
  89
  90#define maximum_signed_value_of_type(a) \
  91    (INTMAX_MAX >> (bitsizeof(intmax_t) - bitsizeof(a)))
  92
  93#define maximum_unsigned_value_of_type(a) \
  94    (UINTMAX_MAX >> (bitsizeof(uintmax_t) - bitsizeof(a)))
  95
  96/*
  97 * Signed integer overflow is undefined in C, so here's a helper macro
  98 * to detect if the sum of two integers will overflow.
  99 *
 100 * Requires: a >= 0, typeof(a) equals typeof(b)
 101 */
 102#define signed_add_overflows(a, b) \
 103    ((b) > maximum_signed_value_of_type(a) - (a))
 104
 105#define unsigned_add_overflows(a, b) \
 106    ((b) > maximum_unsigned_value_of_type(a) - (a))
 107
 108/*
 109 * Returns true if the multiplication of "a" and "b" will
 110 * overflow. The types of "a" and "b" must match and must be unsigned.
 111 * Note that this macro evaluates "a" twice!
 112 */
 113#define unsigned_mult_overflows(a, b) \
 114    ((a) && (b) > maximum_unsigned_value_of_type(a) / (a))
 115
 116#ifdef __GNUC__
 117#define TYPEOF(x) (__typeof__(x))
 118#else
 119#define TYPEOF(x)
 120#endif
 121
 122#define MSB(x, bits) ((x) & TYPEOF(x)(~0ULL << (bitsizeof(x) - (bits))))
 123#define HAS_MULTI_BITS(i)  ((i) & ((i) - 1))  /* checks if an integer has more than 1 bit set */
 124
 125#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
 126
 127/* Approximation of the length of the decimal representation of this type. */
 128#define decimal_length(x)       ((int)(sizeof(x) * 2.56 + 0.5) + 1)
 129
 130#if defined(__sun__)
 131 /*
 132  * On Solaris, when _XOPEN_EXTENDED is set, its header file
 133  * forces the programs to be XPG4v2, defeating any _XOPEN_SOURCE
 134  * setting to say we are XPG5 or XPG6.  Also on Solaris,
 135  * XPG6 programs must be compiled with a c99 compiler, while
 136  * non XPG6 programs must be compiled with a pre-c99 compiler.
 137  */
 138# if __STDC_VERSION__ - 0 >= 199901L
 139# define _XOPEN_SOURCE 600
 140# else
 141# define _XOPEN_SOURCE 500
 142# endif
 143#elif !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__USLC__) && \
 144      !defined(_M_UNIX) && !defined(__sgi) && !defined(__DragonFly__) && \
 145      !defined(__TANDEM) && !defined(__QNX__) && !defined(__MirBSD__) && \
 146      !defined(__CYGWIN__)
 147#define _XOPEN_SOURCE 600 /* glibc2 and AIX 5.3L need 500, OpenBSD needs 600 for S_ISLNK() */
 148#define _XOPEN_SOURCE_EXTENDED 1 /* AIX 5.3L needs this */
 149#endif
 150#define _ALL_SOURCE 1
 151#define _GNU_SOURCE 1
 152#define _BSD_SOURCE 1
 153#define _DEFAULT_SOURCE 1
 154#define _NETBSD_SOURCE 1
 155#define _SGI_SOURCE 1
 156
 157#if defined(WIN32) && !defined(__CYGWIN__) /* Both MinGW and MSVC */
 158# if !defined(_WIN32_WINNT)
 159#  define _WIN32_WINNT 0x0600
 160# endif
 161#define WIN32_LEAN_AND_MEAN  /* stops windows.h including winsock.h */
 162#include <winsock2.h>
 163#include <windows.h>
 164#define GIT_WINDOWS_NATIVE
 165#endif
 166
 167#include <unistd.h>
 168#include <stdio.h>
 169#include <sys/stat.h>
 170#include <fcntl.h>
 171#include <stddef.h>
 172#include <stdlib.h>
 173#include <stdarg.h>
 174#include <string.h>
 175#ifdef HAVE_STRINGS_H
 176#include <strings.h> /* for strcasecmp() */
 177#endif
 178#include <errno.h>
 179#include <limits.h>
 180#ifdef NEEDS_SYS_PARAM_H
 181#include <sys/param.h>
 182#endif
 183#include <sys/types.h>
 184#include <dirent.h>
 185#include <sys/time.h>
 186#include <time.h>
 187#include <signal.h>
 188#include <assert.h>
 189#include <regex.h>
 190#include <utime.h>
 191#include <syslog.h>
 192#if !defined(NO_POLL_H)
 193#include <poll.h>
 194#elif !defined(NO_SYS_POLL_H)
 195#include <sys/poll.h>
 196#else
 197/* Pull the compat stuff */
 198#include <poll.h>
 199#endif
 200#ifdef HAVE_BSD_SYSCTL
 201#include <sys/sysctl.h>
 202#endif
 203
 204#if defined(__CYGWIN__)
 205#include "compat/win32/path-utils.h"
 206#endif
 207#if defined(__MINGW32__)
 208/* pull in Windows compatibility stuff */
 209#include "compat/win32/path-utils.h"
 210#include "compat/mingw.h"
 211#elif defined(_MSC_VER)
 212#include "compat/win32/path-utils.h"
 213#include "compat/msvc.h"
 214#else
 215#include <sys/utsname.h>
 216#include <sys/wait.h>
 217#include <sys/resource.h>
 218#include <sys/socket.h>
 219#include <sys/ioctl.h>
 220#include <termios.h>
 221#ifndef NO_SYS_SELECT_H
 222#include <sys/select.h>
 223#endif
 224#include <netinet/in.h>
 225#include <netinet/tcp.h>
 226#include <arpa/inet.h>
 227#include <netdb.h>
 228#include <pwd.h>
 229#include <sys/un.h>
 230#ifndef NO_INTTYPES_H
 231#include <inttypes.h>
 232#else
 233#include <stdint.h>
 234#endif
 235#ifdef NO_INTPTR_T
 236/*
 237 * On I16LP32, ILP32 and LP64 "long" is the safe bet, however
 238 * on LLP86, IL33LLP64 and P64 it needs to be "long long",
 239 * while on IP16 and IP16L32 it is "int" (resp. "short")
 240 * Size needs to match (or exceed) 'sizeof(void *)'.
 241 * We can't take "long long" here as not everybody has it.
 242 */
 243typedef long intptr_t;
 244typedef unsigned long uintptr_t;
 245#endif
 246#undef _ALL_SOURCE /* AIX 5.3L defines a struct list with _ALL_SOURCE. */
 247#include <grp.h>
 248#define _ALL_SOURCE 1
 249#endif
 250
 251/* used on Mac OS X */
 252#ifdef PRECOMPOSE_UNICODE
 253#include "compat/precompose_utf8.h"
 254#else
 255#define precompose_str(in,i_nfd2nfc)
 256#define precompose_argv(c,v)
 257#define probe_utf8_pathname_composition()
 258#endif
 259
 260#ifdef MKDIR_WO_TRAILING_SLASH
 261#define mkdir(a,b) compat_mkdir_wo_trailing_slash((a),(b))
 262int compat_mkdir_wo_trailing_slash(const char*, mode_t);
 263#endif
 264
 265#ifdef NO_STRUCT_ITIMERVAL
 266struct itimerval {
 267        struct timeval it_interval;
 268        struct timeval it_value;
 269};
 270#endif
 271
 272#ifdef NO_SETITIMER
 273#define setitimer(which,value,ovalue)
 274#endif
 275
 276#ifndef NO_LIBGEN_H
 277#include <libgen.h>
 278#else
 279#define basename gitbasename
 280char *gitbasename(char *);
 281#define dirname gitdirname
 282char *gitdirname(char *);
 283#endif
 284
 285#ifndef NO_ICONV
 286#include <iconv.h>
 287#endif
 288
 289#ifndef NO_OPENSSL
 290#ifdef __APPLE__
 291#define __AVAILABILITY_MACROS_USES_AVAILABILITY 0
 292#include <AvailabilityMacros.h>
 293#undef DEPRECATED_ATTRIBUTE
 294#define DEPRECATED_ATTRIBUTE
 295#undef __AVAILABILITY_MACROS_USES_AVAILABILITY
 296#endif
 297#include <openssl/ssl.h>
 298#include <openssl/err.h>
 299#endif
 300
 301#ifdef HAVE_SYSINFO
 302# include <sys/sysinfo.h>
 303#endif
 304
 305/* On most systems <netdb.h> would have given us this, but
 306 * not on some systems (e.g. z/OS).
 307 */
 308#ifndef NI_MAXHOST
 309#define NI_MAXHOST 1025
 310#endif
 311
 312#ifndef NI_MAXSERV
 313#define NI_MAXSERV 32
 314#endif
 315
 316/* On most systems <limits.h> would have given us this, but
 317 * not on some systems (e.g. GNU/Hurd).
 318 */
 319#ifndef PATH_MAX
 320#define PATH_MAX 4096
 321#endif
 322
 323#ifndef PRIuMAX
 324#define PRIuMAX "llu"
 325#endif
 326
 327#ifndef SCNuMAX
 328#define SCNuMAX PRIuMAX
 329#endif
 330
 331#ifndef PRIu32
 332#define PRIu32 "u"
 333#endif
 334
 335#ifndef PRIx32
 336#define PRIx32 "x"
 337#endif
 338
 339#ifndef PRIo32
 340#define PRIo32 "o"
 341#endif
 342
 343typedef uintmax_t timestamp_t;
 344#define PRItime PRIuMAX
 345#define parse_timestamp strtoumax
 346#define TIME_MAX UINTMAX_MAX
 347
 348#ifndef PATH_SEP
 349#define PATH_SEP ':'
 350#endif
 351
 352#ifdef HAVE_PATHS_H
 353#include <paths.h>
 354#endif
 355#ifndef _PATH_DEFPATH
 356#define _PATH_DEFPATH "/usr/local/bin:/usr/bin:/bin"
 357#endif
 358
 359#ifndef platform_core_config
 360static inline int noop_core_config(const char *var, const char *value, void *cb)
 361{
 362        return 0;
 363}
 364#define platform_core_config noop_core_config
 365#endif
 366
 367#ifndef has_dos_drive_prefix
 368static inline int git_has_dos_drive_prefix(const char *path)
 369{
 370        return 0;
 371}
 372#define has_dos_drive_prefix git_has_dos_drive_prefix
 373#endif
 374
 375#ifndef skip_dos_drive_prefix
 376static inline int git_skip_dos_drive_prefix(char **path)
 377{
 378        return 0;
 379}
 380#define skip_dos_drive_prefix git_skip_dos_drive_prefix
 381#endif
 382
 383#ifndef is_dir_sep
 384static inline int git_is_dir_sep(int c)
 385{
 386        return c == '/';
 387}
 388#define is_dir_sep git_is_dir_sep
 389#endif
 390
 391#ifndef offset_1st_component
 392static inline int git_offset_1st_component(const char *path)
 393{
 394        return is_dir_sep(path[0]);
 395}
 396#define offset_1st_component git_offset_1st_component
 397#endif
 398
 399#ifndef find_last_dir_sep
 400static inline char *git_find_last_dir_sep(const char *path)
 401{
 402        return strrchr(path, '/');
 403}
 404#define find_last_dir_sep git_find_last_dir_sep
 405#endif
 406
 407#ifndef query_user_email
 408#define query_user_email() NULL
 409#endif
 410
 411#ifdef __TANDEM
 412#include <floss.h(floss_execl,floss_execlp,floss_execv,floss_execvp)>
 413#include <floss.h(floss_getpwuid)>
 414#ifndef NSIG
 415/*
 416 * NonStop NSE and NSX do not provide NSIG. SIGGUARDIAN(99) is the highest
 417 * known, by detective work using kill -l as a list is all signals
 418 * instead of signal.h where it should be.
 419 */
 420# define NSIG 100
 421#endif
 422#endif
 423
 424#if defined(__HP_cc) && (__HP_cc >= 61000)
 425#define NORETURN __attribute__((noreturn))
 426#define NORETURN_PTR
 427#elif defined(__GNUC__) && !defined(NO_NORETURN)
 428#define NORETURN __attribute__((__noreturn__))
 429#define NORETURN_PTR __attribute__((__noreturn__))
 430#elif defined(_MSC_VER)
 431#define NORETURN __declspec(noreturn)
 432#define NORETURN_PTR
 433#else
 434#define NORETURN
 435#define NORETURN_PTR
 436#ifndef __GNUC__
 437#ifndef __attribute__
 438#define __attribute__(x)
 439#endif
 440#endif
 441#endif
 442
 443/* The sentinel attribute is valid from gcc version 4.0 */
 444#if defined(__GNUC__) && (__GNUC__ >= 4)
 445#define LAST_ARG_MUST_BE_NULL __attribute__((sentinel))
 446#else
 447#define LAST_ARG_MUST_BE_NULL
 448#endif
 449
 450#define MAYBE_UNUSED __attribute__((__unused__))
 451
 452#include "compat/bswap.h"
 453
 454#include "wildmatch.h"
 455
 456struct strbuf;
 457
 458/* General helper functions */
 459void vreportf(const char *prefix, const char *err, va_list params);
 460NORETURN void usage(const char *err);
 461NORETURN void usagef(const char *err, ...) __attribute__((format (printf, 1, 2)));
 462NORETURN void die(const char *err, ...) __attribute__((format (printf, 1, 2)));
 463NORETURN void die_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
 464int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
 465int error_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
 466void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
 467void warning_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
 468
 469#ifndef NO_OPENSSL
 470#ifdef APPLE_COMMON_CRYPTO
 471#include "compat/apple-common-crypto.h"
 472#else
 473#include <openssl/evp.h>
 474#include <openssl/hmac.h>
 475#endif /* APPLE_COMMON_CRYPTO */
 476#include <openssl/x509v3.h>
 477#endif /* NO_OPENSSL */
 478
 479/*
 480 * Let callers be aware of the constant return value; this can help
 481 * gcc with -Wuninitialized analysis. We restrict this trick to gcc, though,
 482 * because some compilers may not support variadic macros. Since we're only
 483 * trying to help gcc, anyway, it's OK; other compilers will fall back to
 484 * using the function as usual.
 485 */
 486#if defined(__GNUC__)
 487static inline int const_error(void)
 488{
 489        return -1;
 490}
 491#define error(...) (error(__VA_ARGS__), const_error())
 492#define error_errno(...) (error_errno(__VA_ARGS__), const_error())
 493#endif
 494
 495void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params));
 496void set_error_routine(void (*routine)(const char *err, va_list params));
 497extern void (*get_error_routine(void))(const char *err, va_list params);
 498void set_warn_routine(void (*routine)(const char *warn, va_list params));
 499extern void (*get_warn_routine(void))(const char *warn, va_list params);
 500void set_die_is_recursing_routine(int (*routine)(void));
 501
 502int starts_with(const char *str, const char *prefix);
 503int istarts_with(const char *str, const char *prefix);
 504
 505/*
 506 * If the string "str" begins with the string found in "prefix", return 1.
 507 * The "out" parameter is set to "str + strlen(prefix)" (i.e., to the point in
 508 * the string right after the prefix).
 509 *
 510 * Otherwise, return 0 and leave "out" untouched.
 511 *
 512 * Examples:
 513 *
 514 *   [extract branch name, fail if not a branch]
 515 *   if (!skip_prefix(ref, "refs/heads/", &branch)
 516 *      return -1;
 517 *
 518 *   [skip prefix if present, otherwise use whole string]
 519 *   skip_prefix(name, "refs/heads/", &name);
 520 */
 521static inline int skip_prefix(const char *str, const char *prefix,
 522                              const char **out)
 523{
 524        do {
 525                if (!*prefix) {
 526                        *out = str;
 527                        return 1;
 528                }
 529        } while (*str++ == *prefix++);
 530        return 0;
 531}
 532
 533/*
 534 * If the string "str" is the same as the string in "prefix", then the "arg"
 535 * parameter is set to the "def" parameter and 1 is returned.
 536 * If the string "str" begins with the string found in "prefix" and then a
 537 * "=" sign, then the "arg" parameter is set to "str + strlen(prefix) + 1"
 538 * (i.e., to the point in the string right after the prefix and the "=" sign),
 539 * and 1 is returned.
 540 *
 541 * Otherwise, return 0 and leave "arg" untouched.
 542 *
 543 * When we accept both a "--key" and a "--key=<val>" option, this function
 544 * can be used instead of !strcmp(arg, "--key") and then
 545 * skip_prefix(arg, "--key=", &arg) to parse such an option.
 546 */
 547int skip_to_optional_arg_default(const char *str, const char *prefix,
 548                                 const char **arg, const char *def);
 549
 550static inline int skip_to_optional_arg(const char *str, const char *prefix,
 551                                       const char **arg)
 552{
 553        return skip_to_optional_arg_default(str, prefix, arg, "");
 554}
 555
 556/*
 557 * Like skip_prefix, but promises never to read past "len" bytes of the input
 558 * buffer, and returns the remaining number of bytes in "out" via "outlen".
 559 */
 560static inline int skip_prefix_mem(const char *buf, size_t len,
 561                                  const char *prefix,
 562                                  const char **out, size_t *outlen)
 563{
 564        size_t prefix_len = strlen(prefix);
 565        if (prefix_len <= len && !memcmp(buf, prefix, prefix_len)) {
 566                *out = buf + prefix_len;
 567                *outlen = len - prefix_len;
 568                return 1;
 569        }
 570        return 0;
 571}
 572
 573/*
 574 * If buf ends with suffix, return 1 and subtract the length of the suffix
 575 * from *len. Otherwise, return 0 and leave *len untouched.
 576 */
 577static inline int strip_suffix_mem(const char *buf, size_t *len,
 578                                   const char *suffix)
 579{
 580        size_t suflen = strlen(suffix);
 581        if (*len < suflen || memcmp(buf + (*len - suflen), suffix, suflen))
 582                return 0;
 583        *len -= suflen;
 584        return 1;
 585}
 586
 587/*
 588 * If str ends with suffix, return 1 and set *len to the size of the string
 589 * without the suffix. Otherwise, return 0 and set *len to the size of the
 590 * string.
 591 *
 592 * Note that we do _not_ NUL-terminate str to the new length.
 593 */
 594static inline int strip_suffix(const char *str, const char *suffix, size_t *len)
 595{
 596        *len = strlen(str);
 597        return strip_suffix_mem(str, len, suffix);
 598}
 599
 600static inline int ends_with(const char *str, const char *suffix)
 601{
 602        size_t len;
 603        return strip_suffix(str, suffix, &len);
 604}
 605
 606#define SWAP(a, b) do {                                         \
 607        void *_swap_a_ptr = &(a);                               \
 608        void *_swap_b_ptr = &(b);                               \
 609        unsigned char _swap_buffer[sizeof(a)];                  \
 610        memcpy(_swap_buffer, _swap_a_ptr, sizeof(a));           \
 611        memcpy(_swap_a_ptr, _swap_b_ptr, sizeof(a) +            \
 612               BUILD_ASSERT_OR_ZERO(sizeof(a) == sizeof(b)));   \
 613        memcpy(_swap_b_ptr, _swap_buffer, sizeof(a));           \
 614} while (0)
 615
 616#if defined(NO_MMAP) || defined(USE_WIN32_MMAP)
 617
 618#ifndef PROT_READ
 619#define PROT_READ 1
 620#define PROT_WRITE 2
 621#define MAP_PRIVATE 1
 622#endif
 623
 624#define mmap git_mmap
 625#define munmap git_munmap
 626void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
 627int git_munmap(void *start, size_t length);
 628
 629#else /* NO_MMAP || USE_WIN32_MMAP */
 630
 631#include <sys/mman.h>
 632
 633#endif /* NO_MMAP || USE_WIN32_MMAP */
 634
 635#ifdef NO_MMAP
 636
 637/* This value must be multiple of (pagesize * 2) */
 638#define DEFAULT_PACKED_GIT_WINDOW_SIZE (1 * 1024 * 1024)
 639
 640#else /* NO_MMAP */
 641
 642/* This value must be multiple of (pagesize * 2) */
 643#define DEFAULT_PACKED_GIT_WINDOW_SIZE \
 644        (sizeof(void*) >= 8 \
 645                ?  1 * 1024 * 1024 * 1024 \
 646                : 32 * 1024 * 1024)
 647
 648#endif /* NO_MMAP */
 649
 650#ifndef MAP_FAILED
 651#define MAP_FAILED ((void *)-1)
 652#endif
 653
 654#ifdef NO_ST_BLOCKS_IN_STRUCT_STAT
 655#define on_disk_bytes(st) ((st).st_size)
 656#else
 657#define on_disk_bytes(st) ((st).st_blocks * 512)
 658#endif
 659
 660#ifdef NEEDS_MODE_TRANSLATION
 661#undef S_IFMT
 662#undef S_IFREG
 663#undef S_IFDIR
 664#undef S_IFLNK
 665#undef S_IFBLK
 666#undef S_IFCHR
 667#undef S_IFIFO
 668#undef S_IFSOCK
 669#define S_IFMT   0170000
 670#define S_IFREG  0100000
 671#define S_IFDIR  0040000
 672#define S_IFLNK  0120000
 673#define S_IFBLK  0060000
 674#define S_IFCHR  0020000
 675#define S_IFIFO  0010000
 676#define S_IFSOCK 0140000
 677#ifdef stat
 678#undef stat
 679#endif
 680#define stat(path, buf) git_stat(path, buf)
 681int git_stat(const char *, struct stat *);
 682#ifdef fstat
 683#undef fstat
 684#endif
 685#define fstat(fd, buf) git_fstat(fd, buf)
 686int git_fstat(int, struct stat *);
 687#ifdef lstat
 688#undef lstat
 689#endif
 690#define lstat(path, buf) git_lstat(path, buf)
 691int git_lstat(const char *, struct stat *);
 692#endif
 693
 694#define DEFAULT_PACKED_GIT_LIMIT \
 695        ((1024L * 1024L) * (size_t)(sizeof(void*) >= 8 ? (32 * 1024L * 1024L) : 256))
 696
 697#ifdef NO_PREAD
 698#define pread git_pread
 699ssize_t git_pread(int fd, void *buf, size_t count, off_t offset);
 700#endif
 701/*
 702 * Forward decl that will remind us if its twin in cache.h changes.
 703 * This function is used in compat/pread.c.  But we can't include
 704 * cache.h there.
 705 */
 706ssize_t read_in_full(int fd, void *buf, size_t count);
 707
 708#ifdef NO_SETENV
 709#define setenv gitsetenv
 710int gitsetenv(const char *, const char *, int);
 711#endif
 712
 713#ifdef NO_MKDTEMP
 714#define mkdtemp gitmkdtemp
 715char *gitmkdtemp(char *);
 716#endif
 717
 718#ifdef NO_UNSETENV
 719#define unsetenv gitunsetenv
 720void gitunsetenv(const char *);
 721#endif
 722
 723#ifdef NO_STRCASESTR
 724#define strcasestr gitstrcasestr
 725char *gitstrcasestr(const char *haystack, const char *needle);
 726#endif
 727
 728#ifdef NO_STRLCPY
 729#define strlcpy gitstrlcpy
 730size_t gitstrlcpy(char *, const char *, size_t);
 731#endif
 732
 733#ifdef NO_STRTOUMAX
 734#define strtoumax gitstrtoumax
 735uintmax_t gitstrtoumax(const char *, char **, int);
 736#define strtoimax gitstrtoimax
 737intmax_t gitstrtoimax(const char *, char **, int);
 738#endif
 739
 740#ifdef NO_HSTRERROR
 741#define hstrerror githstrerror
 742const char *githstrerror(int herror);
 743#endif
 744
 745#ifdef NO_MEMMEM
 746#define memmem gitmemmem
 747void *gitmemmem(const void *haystack, size_t haystacklen,
 748                const void *needle, size_t needlelen);
 749#endif
 750
 751#ifdef OVERRIDE_STRDUP
 752#ifdef strdup
 753#undef strdup
 754#endif
 755#define strdup gitstrdup
 756char *gitstrdup(const char *s);
 757#endif
 758
 759#ifdef NO_GETPAGESIZE
 760#define getpagesize() sysconf(_SC_PAGESIZE)
 761#endif
 762
 763#ifndef O_CLOEXEC
 764#define O_CLOEXEC 0
 765#endif
 766
 767#ifdef FREAD_READS_DIRECTORIES
 768# if !defined(SUPPRESS_FOPEN_REDEFINITION)
 769#  ifdef fopen
 770#   undef fopen
 771#  endif
 772#  define fopen(a,b) git_fopen(a,b)
 773# endif
 774FILE *git_fopen(const char*, const char*);
 775#endif
 776
 777#ifdef SNPRINTF_RETURNS_BOGUS
 778#ifdef snprintf
 779#undef snprintf
 780#endif
 781#define snprintf git_snprintf
 782int git_snprintf(char *str, size_t maxsize,
 783                 const char *format, ...);
 784#ifdef vsnprintf
 785#undef vsnprintf
 786#endif
 787#define vsnprintf git_vsnprintf
 788int git_vsnprintf(char *str, size_t maxsize,
 789                  const char *format, va_list ap);
 790#endif
 791
 792#ifdef __GLIBC_PREREQ
 793#if __GLIBC_PREREQ(2, 1)
 794#define HAVE_STRCHRNUL
 795#endif
 796#endif
 797
 798#ifndef HAVE_STRCHRNUL
 799#define strchrnul gitstrchrnul
 800static inline char *gitstrchrnul(const char *s, int c)
 801{
 802        while (*s && *s != c)
 803                s++;
 804        return (char *)s;
 805}
 806#endif
 807
 808#ifdef NO_INET_PTON
 809int inet_pton(int af, const char *src, void *dst);
 810#endif
 811
 812#ifdef NO_INET_NTOP
 813const char *inet_ntop(int af, const void *src, char *dst, size_t size);
 814#endif
 815
 816#ifdef NO_PTHREADS
 817#define atexit git_atexit
 818int git_atexit(void (*handler)(void));
 819#endif
 820
 821static inline size_t st_add(size_t a, size_t b)
 822{
 823        if (unsigned_add_overflows(a, b))
 824                die("size_t overflow: %"PRIuMAX" + %"PRIuMAX,
 825                    (uintmax_t)a, (uintmax_t)b);
 826        return a + b;
 827}
 828#define st_add3(a,b,c)   st_add(st_add((a),(b)),(c))
 829#define st_add4(a,b,c,d) st_add(st_add3((a),(b),(c)),(d))
 830
 831static inline size_t st_mult(size_t a, size_t b)
 832{
 833        if (unsigned_mult_overflows(a, b))
 834                die("size_t overflow: %"PRIuMAX" * %"PRIuMAX,
 835                    (uintmax_t)a, (uintmax_t)b);
 836        return a * b;
 837}
 838
 839static inline size_t st_sub(size_t a, size_t b)
 840{
 841        if (a < b)
 842                die("size_t underflow: %"PRIuMAX" - %"PRIuMAX,
 843                    (uintmax_t)a, (uintmax_t)b);
 844        return a - b;
 845}
 846
 847#ifdef HAVE_ALLOCA_H
 848# include <alloca.h>
 849# define xalloca(size)      (alloca(size))
 850# define xalloca_free(p)    do {} while (0)
 851#else
 852# define xalloca(size)      (xmalloc(size))
 853# define xalloca_free(p)    (free(p))
 854#endif
 855char *xstrdup(const char *str);
 856void *xmalloc(size_t size);
 857void *xmallocz(size_t size);
 858void *xmallocz_gently(size_t size);
 859void *xmemdupz(const void *data, size_t len);
 860char *xstrndup(const char *str, size_t len);
 861void *xrealloc(void *ptr, size_t size);
 862void *xcalloc(size_t nmemb, size_t size);
 863void *xmmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
 864void *xmmap_gently(void *start, size_t length, int prot, int flags, int fd, off_t offset);
 865int xopen(const char *path, int flags, ...);
 866ssize_t xread(int fd, void *buf, size_t len);
 867ssize_t xwrite(int fd, const void *buf, size_t len);
 868ssize_t xpread(int fd, void *buf, size_t len, off_t offset);
 869int xdup(int fd);
 870FILE *xfopen(const char *path, const char *mode);
 871FILE *xfdopen(int fd, const char *mode);
 872int xmkstemp(char *temp_filename);
 873int xmkstemp_mode(char *temp_filename, int mode);
 874char *xgetcwd(void);
 875FILE *fopen_for_writing(const char *path);
 876FILE *fopen_or_warn(const char *path, const char *mode);
 877
 878/*
 879 * FREE_AND_NULL(ptr) is like free(ptr) followed by ptr = NULL. Note
 880 * that ptr is used twice, so don't pass e.g. ptr++.
 881 */
 882#define FREE_AND_NULL(p) do { free(p); (p) = NULL; } while (0)
 883
 884#define ALLOC_ARRAY(x, alloc) (x) = xmalloc(st_mult(sizeof(*(x)), (alloc)))
 885#define CALLOC_ARRAY(x, alloc) (x) = xcalloc((alloc), sizeof(*(x)));
 886#define REALLOC_ARRAY(x, alloc) (x) = xrealloc((x), st_mult(sizeof(*(x)), (alloc)))
 887
 888#define COPY_ARRAY(dst, src, n) copy_array((dst), (src), (n), sizeof(*(dst)) + \
 889        BUILD_ASSERT_OR_ZERO(sizeof(*(dst)) == sizeof(*(src))))
 890static inline void copy_array(void *dst, const void *src, size_t n, size_t size)
 891{
 892        if (n)
 893                memcpy(dst, src, st_mult(size, n));
 894}
 895
 896#define MOVE_ARRAY(dst, src, n) move_array((dst), (src), (n), sizeof(*(dst)) + \
 897        BUILD_ASSERT_OR_ZERO(sizeof(*(dst)) == sizeof(*(src))))
 898static inline void move_array(void *dst, const void *src, size_t n, size_t size)
 899{
 900        if (n)
 901                memmove(dst, src, st_mult(size, n));
 902}
 903
 904/*
 905 * These functions help you allocate structs with flex arrays, and copy
 906 * the data directly into the array. For example, if you had:
 907 *
 908 *   struct foo {
 909 *     int bar;
 910 *     char name[FLEX_ARRAY];
 911 *   };
 912 *
 913 * you can do:
 914 *
 915 *   struct foo *f;
 916 *   FLEX_ALLOC_MEM(f, name, src, len);
 917 *
 918 * to allocate a "foo" with the contents of "src" in the "name" field.
 919 * The resulting struct is automatically zero'd, and the flex-array field
 920 * is NUL-terminated (whether the incoming src buffer was or not).
 921 *
 922 * The FLEXPTR_* variants operate on structs that don't use flex-arrays,
 923 * but do want to store a pointer to some extra data in the same allocated
 924 * block. For example, if you have:
 925 *
 926 *   struct foo {
 927 *     char *name;
 928 *     int bar;
 929 *   };
 930 *
 931 * you can do:
 932 *
 933 *   struct foo *f;
 934 *   FLEXPTR_ALLOC_STR(f, name, src);
 935 *
 936 * and "name" will point to a block of memory after the struct, which will be
 937 * freed along with the struct (but the pointer can be repointed anywhere).
 938 *
 939 * The *_STR variants accept a string parameter rather than a ptr/len
 940 * combination.
 941 *
 942 * Note that these macros will evaluate the first parameter multiple
 943 * times, and it must be assignable as an lvalue.
 944 */
 945#define FLEX_ALLOC_MEM(x, flexname, buf, len) do { \
 946        size_t flex_array_len_ = (len); \
 947        (x) = xcalloc(1, st_add3(sizeof(*(x)), flex_array_len_, 1)); \
 948        memcpy((void *)(x)->flexname, (buf), flex_array_len_); \
 949} while (0)
 950#define FLEXPTR_ALLOC_MEM(x, ptrname, buf, len) do { \
 951        size_t flex_array_len_ = (len); \
 952        (x) = xcalloc(1, st_add3(sizeof(*(x)), flex_array_len_, 1)); \
 953        memcpy((x) + 1, (buf), flex_array_len_); \
 954        (x)->ptrname = (void *)((x)+1); \
 955} while(0)
 956#define FLEX_ALLOC_STR(x, flexname, str) \
 957        FLEX_ALLOC_MEM((x), flexname, (str), strlen(str))
 958#define FLEXPTR_ALLOC_STR(x, ptrname, str) \
 959        FLEXPTR_ALLOC_MEM((x), ptrname, (str), strlen(str))
 960
 961static inline char *xstrdup_or_null(const char *str)
 962{
 963        return str ? xstrdup(str) : NULL;
 964}
 965
 966static inline size_t xsize_t(off_t len)
 967{
 968        size_t size = (size_t) len;
 969
 970        if (len != (off_t) size)
 971                die("Cannot handle files this big");
 972        return size;
 973}
 974
 975__attribute__((format (printf, 3, 4)))
 976int xsnprintf(char *dst, size_t max, const char *fmt, ...);
 977
 978#ifndef HOST_NAME_MAX
 979#define HOST_NAME_MAX 256
 980#endif
 981
 982int xgethostname(char *buf, size_t len);
 983
 984/* in ctype.c, for kwset users */
 985extern const unsigned char tolower_trans_tbl[256];
 986
 987/* Sane ctype - no locale, and works with signed chars */
 988#undef isascii
 989#undef isspace
 990#undef isdigit
 991#undef isalpha
 992#undef isalnum
 993#undef isprint
 994#undef islower
 995#undef isupper
 996#undef tolower
 997#undef toupper
 998#undef iscntrl
 999#undef ispunct
1000#undef isxdigit
1001
1002extern const unsigned char sane_ctype[256];
1003#define GIT_SPACE 0x01
1004#define GIT_DIGIT 0x02
1005#define GIT_ALPHA 0x04
1006#define GIT_GLOB_SPECIAL 0x08
1007#define GIT_REGEX_SPECIAL 0x10
1008#define GIT_PATHSPEC_MAGIC 0x20
1009#define GIT_CNTRL 0x40
1010#define GIT_PUNCT 0x80
1011#define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0)
1012#define isascii(x) (((x) & ~0x7f) == 0)
1013#define isspace(x) sane_istest(x,GIT_SPACE)
1014#define isdigit(x) sane_istest(x,GIT_DIGIT)
1015#define isalpha(x) sane_istest(x,GIT_ALPHA)
1016#define isalnum(x) sane_istest(x,GIT_ALPHA | GIT_DIGIT)
1017#define isprint(x) ((x) >= 0x20 && (x) <= 0x7e)
1018#define islower(x) sane_iscase(x, 1)
1019#define isupper(x) sane_iscase(x, 0)
1020#define is_glob_special(x) sane_istest(x,GIT_GLOB_SPECIAL)
1021#define is_regex_special(x) sane_istest(x,GIT_GLOB_SPECIAL | GIT_REGEX_SPECIAL)
1022#define iscntrl(x) (sane_istest(x,GIT_CNTRL))
1023#define ispunct(x) sane_istest(x, GIT_PUNCT | GIT_REGEX_SPECIAL | \
1024                GIT_GLOB_SPECIAL | GIT_PATHSPEC_MAGIC)
1025#define isxdigit(x) (hexval_table[(unsigned char)(x)] != -1)
1026#define tolower(x) sane_case((unsigned char)(x), 0x20)
1027#define toupper(x) sane_case((unsigned char)(x), 0)
1028#define is_pathspec_magic(x) sane_istest(x,GIT_PATHSPEC_MAGIC)
1029
1030static inline int sane_case(int x, int high)
1031{
1032        if (sane_istest(x, GIT_ALPHA))
1033                x = (x & ~0x20) | high;
1034        return x;
1035}
1036
1037static inline int sane_iscase(int x, int is_lower)
1038{
1039        if (!sane_istest(x, GIT_ALPHA))
1040                return 0;
1041
1042        if (is_lower)
1043                return (x & 0x20) != 0;
1044        else
1045                return (x & 0x20) == 0;
1046}
1047
1048/*
1049 * Like skip_prefix, but compare case-insensitively. Note that the comparison
1050 * is done via tolower(), so it is strictly ASCII (no multi-byte characters or
1051 * locale-specific conversions).
1052 */
1053static inline int skip_iprefix(const char *str, const char *prefix,
1054                               const char **out)
1055{
1056        do {
1057                if (!*prefix) {
1058                        *out = str;
1059                        return 1;
1060                }
1061        } while (tolower(*str++) == tolower(*prefix++));
1062        return 0;
1063}
1064
1065static inline int strtoul_ui(char const *s, int base, unsigned int *result)
1066{
1067        unsigned long ul;
1068        char *p;
1069
1070        errno = 0;
1071        /* negative values would be accepted by strtoul */
1072        if (strchr(s, '-'))
1073                return -1;
1074        ul = strtoul(s, &p, base);
1075        if (errno || *p || p == s || (unsigned int) ul != ul)
1076                return -1;
1077        *result = ul;
1078        return 0;
1079}
1080
1081static inline int strtol_i(char const *s, int base, int *result)
1082{
1083        long ul;
1084        char *p;
1085
1086        errno = 0;
1087        ul = strtol(s, &p, base);
1088        if (errno || *p || p == s || (int) ul != ul)
1089                return -1;
1090        *result = ul;
1091        return 0;
1092}
1093
1094#ifdef INTERNAL_QSORT
1095void git_qsort(void *base, size_t nmemb, size_t size,
1096               int(*compar)(const void *, const void *));
1097#define qsort git_qsort
1098#endif
1099
1100#define QSORT(base, n, compar) sane_qsort((base), (n), sizeof(*(base)), compar)
1101static inline void sane_qsort(void *base, size_t nmemb, size_t size,
1102                              int(*compar)(const void *, const void *))
1103{
1104        if (nmemb > 1)
1105                qsort(base, nmemb, size, compar);
1106}
1107
1108#ifndef HAVE_ISO_QSORT_S
1109int git_qsort_s(void *base, size_t nmemb, size_t size,
1110                int (*compar)(const void *, const void *, void *), void *ctx);
1111#define qsort_s git_qsort_s
1112#endif
1113
1114#define QSORT_S(base, n, compar, ctx) do {                      \
1115        if (qsort_s((base), (n), sizeof(*(base)), compar, ctx)) \
1116                BUG("qsort_s() failed");                        \
1117} while (0)
1118
1119#ifndef REG_STARTEND
1120#error "Git requires REG_STARTEND support. Compile with NO_REGEX=NeedsStartEnd"
1121#endif
1122
1123static inline int regexec_buf(const regex_t *preg, const char *buf, size_t size,
1124                              size_t nmatch, regmatch_t pmatch[], int eflags)
1125{
1126        assert(nmatch > 0 && pmatch);
1127        pmatch[0].rm_so = 0;
1128        pmatch[0].rm_eo = size;
1129        return regexec(preg, buf, nmatch, pmatch, eflags | REG_STARTEND);
1130}
1131
1132#ifndef DIR_HAS_BSD_GROUP_SEMANTICS
1133# define FORCE_DIR_SET_GID S_ISGID
1134#else
1135# define FORCE_DIR_SET_GID 0
1136#endif
1137
1138#ifdef NO_NSEC
1139#undef USE_NSEC
1140#define ST_CTIME_NSEC(st) 0
1141#define ST_MTIME_NSEC(st) 0
1142#else
1143#ifdef USE_ST_TIMESPEC
1144#define ST_CTIME_NSEC(st) ((unsigned int)((st).st_ctimespec.tv_nsec))
1145#define ST_MTIME_NSEC(st) ((unsigned int)((st).st_mtimespec.tv_nsec))
1146#else
1147#define ST_CTIME_NSEC(st) ((unsigned int)((st).st_ctim.tv_nsec))
1148#define ST_MTIME_NSEC(st) ((unsigned int)((st).st_mtim.tv_nsec))
1149#endif
1150#endif
1151
1152#ifdef UNRELIABLE_FSTAT
1153#define fstat_is_reliable() 0
1154#else
1155#define fstat_is_reliable() 1
1156#endif
1157
1158#ifndef va_copy
1159/*
1160 * Since an obvious implementation of va_list would be to make it a
1161 * pointer into the stack frame, a simple assignment will work on
1162 * many systems.  But let's try to be more portable.
1163 */
1164#ifdef __va_copy
1165#define va_copy(dst, src) __va_copy(dst, src)
1166#else
1167#define va_copy(dst, src) ((dst) = (src))
1168#endif
1169#endif
1170
1171#if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__C99_MACRO_WITH_VA_ARGS)
1172#define HAVE_VARIADIC_MACROS 1
1173#endif
1174
1175/* usage.c: only to be used for testing BUG() implementation (see test-tool) */
1176extern int BUG_exit_code;
1177
1178#ifdef HAVE_VARIADIC_MACROS
1179__attribute__((format (printf, 3, 4))) NORETURN
1180void BUG_fl(const char *file, int line, const char *fmt, ...);
1181#define BUG(...) BUG_fl(__FILE__, __LINE__, __VA_ARGS__)
1182#else
1183__attribute__((format (printf, 1, 2))) NORETURN
1184void BUG(const char *fmt, ...);
1185#endif
1186
1187/*
1188 * Preserves errno, prints a message, but gives no warning for ENOENT.
1189 * Returns 0 on success, which includes trying to unlink an object that does
1190 * not exist.
1191 */
1192int unlink_or_warn(const char *path);
1193 /*
1194  * Tries to unlink file.  Returns 0 if unlink succeeded
1195  * or the file already didn't exist.  Returns -1 and
1196  * appends a message to err suitable for
1197  * 'error("%s", err->buf)' on error.
1198  */
1199int unlink_or_msg(const char *file, struct strbuf *err);
1200/*
1201 * Preserves errno, prints a message, but gives no warning for ENOENT.
1202 * Returns 0 on success, which includes trying to remove a directory that does
1203 * not exist.
1204 */
1205int rmdir_or_warn(const char *path);
1206/*
1207 * Calls the correct function out of {unlink,rmdir}_or_warn based on
1208 * the supplied file mode.
1209 */
1210int remove_or_warn(unsigned int mode, const char *path);
1211
1212/*
1213 * Call access(2), but warn for any error except "missing file"
1214 * (ENOENT or ENOTDIR).
1215 */
1216#define ACCESS_EACCES_OK (1U << 0)
1217int access_or_warn(const char *path, int mode, unsigned flag);
1218int access_or_die(const char *path, int mode, unsigned flag);
1219
1220/* Warn on an inaccessible file if errno indicates this is an error */
1221int warn_on_fopen_errors(const char *path);
1222
1223#ifdef GMTIME_UNRELIABLE_ERRORS
1224struct tm *git_gmtime(const time_t *);
1225struct tm *git_gmtime_r(const time_t *, struct tm *);
1226#define gmtime git_gmtime
1227#define gmtime_r git_gmtime_r
1228#endif
1229
1230#if !defined(USE_PARENS_AROUND_GETTEXT_N) && defined(__GNUC__)
1231#define USE_PARENS_AROUND_GETTEXT_N 1
1232#endif
1233
1234#ifndef SHELL_PATH
1235# define SHELL_PATH "/bin/sh"
1236#endif
1237
1238#ifndef _POSIX_THREAD_SAFE_FUNCTIONS
1239#define flockfile(fh)
1240#define funlockfile(fh)
1241#define getc_unlocked(fh) getc(fh)
1242#endif
1243
1244#ifdef FILENO_IS_A_MACRO
1245int git_fileno(FILE *stream);
1246# ifndef COMPAT_CODE_FILENO
1247#  undef fileno
1248#  define fileno(p) git_fileno(p)
1249# endif
1250#endif
1251
1252#ifdef NEED_ACCESS_ROOT_HANDLER
1253int git_access(const char *path, int mode);
1254# ifndef COMPAT_CODE_ACCESS
1255#  ifdef access
1256#  undef access
1257#  endif
1258#  define access(path, mode) git_access(path, mode)
1259# endif
1260#endif
1261
1262/*
1263 * Our code often opens a path to an optional file, to work on its
1264 * contents when we can successfully open it.  We can ignore a failure
1265 * to open if such an optional file does not exist, but we do want to
1266 * report a failure in opening for other reasons (e.g. we got an I/O
1267 * error, or the file is there, but we lack the permission to open).
1268 *
1269 * Call this function after seeing an error from open() or fopen() to
1270 * see if the errno indicates a missing file that we can safely ignore.
1271 */
1272static inline int is_missing_file_error(int errno_)
1273{
1274        return (errno_ == ENOENT || errno_ == ENOTDIR);
1275}
1276
1277int cmd_main(int, const char **);
1278
1279/*
1280 * Intercept all calls to exit() and route them to trace2 to
1281 * optionally emit a message before calling the real exit().
1282 */
1283int trace2_cmd_exit_fl(const char *file, int line, int code);
1284#define exit(code) exit(trace2_cmd_exit_fl(__FILE__, __LINE__, (code)))
1285
1286/*
1287 * You can mark a stack variable with UNLEAK(var) to avoid it being
1288 * reported as a leak by tools like LSAN or valgrind. The argument
1289 * should generally be the variable itself (not its address and not what
1290 * it points to). It's safe to use this on pointers which may already
1291 * have been freed, or on pointers which may still be in use.
1292 *
1293 * Use this _only_ for a variable that leaks by going out of scope at
1294 * program exit (so only from cmd_* functions or their direct helpers).
1295 * Normal functions, especially those which may be called multiple
1296 * times, should actually free their memory. This is only meant as
1297 * an annotation, and does nothing in non-leak-checking builds.
1298 */
1299#ifdef SUPPRESS_ANNOTATED_LEAKS
1300void unleak_memory(const void *ptr, size_t len);
1301#define UNLEAK(var) unleak_memory(&(var), sizeof(var))
1302#else
1303#define UNLEAK(var) do {} while (0)
1304#endif
1305
1306/*
1307 * This include must come after system headers, since it introduces macros that
1308 * replace system names.
1309 */
1310#include "banned.h"
1311
1312#endif