github.com/prysmaticlabs/prysm@v1.4.4/third_party/afl/debug.h (about)

     1  /*
     2     american fuzzy lop - debug / error handling macros
     3     --------------------------------------------------
     4  
     5     Written and maintained by Michal Zalewski <lcamtuf@google.com>
     6  
     7     Copyright 2013, 2014, 2015, 2016 Google Inc. All rights reserved.
     8  
     9     Licensed under the Apache License, Version 2.0 (the "License");
    10     you may not use this file except in compliance with the License.
    11     You may obtain a copy of the License at:
    12  
    13       http://www.apache.org/licenses/LICENSE-2.0
    14  
    15   */
    16  
    17  #ifndef _HAVE_DEBUG_H
    18  #define _HAVE_DEBUG_H
    19  
    20  #include <errno.h>
    21  
    22  #include "types.h"
    23  #include "config.h"
    24  
    25  /*******************
    26   * Terminal colors *
    27   *******************/
    28  
    29  #ifdef USE_COLOR
    30  
    31  #  define cBLK "\x1b[0;30m"
    32  #  define cRED "\x1b[0;31m"
    33  #  define cGRN "\x1b[0;32m"
    34  #  define cBRN "\x1b[0;33m"
    35  #  define cBLU "\x1b[0;34m"
    36  #  define cMGN "\x1b[0;35m"
    37  #  define cCYA "\x1b[0;36m"
    38  #  define cLGR "\x1b[0;37m"
    39  #  define cGRA "\x1b[1;90m"
    40  #  define cLRD "\x1b[1;91m"
    41  #  define cLGN "\x1b[1;92m"
    42  #  define cYEL "\x1b[1;93m"
    43  #  define cLBL "\x1b[1;94m"
    44  #  define cPIN "\x1b[1;95m"
    45  #  define cLCY "\x1b[1;96m"
    46  #  define cBRI "\x1b[1;97m"
    47  #  define cRST "\x1b[0m"
    48  
    49  #  define bgBLK "\x1b[40m"
    50  #  define bgRED "\x1b[41m"
    51  #  define bgGRN "\x1b[42m"
    52  #  define bgBRN "\x1b[43m"
    53  #  define bgBLU "\x1b[44m"
    54  #  define bgMGN "\x1b[45m"
    55  #  define bgCYA "\x1b[46m"
    56  #  define bgLGR "\x1b[47m"
    57  #  define bgGRA "\x1b[100m"
    58  #  define bgLRD "\x1b[101m"
    59  #  define bgLGN "\x1b[102m"
    60  #  define bgYEL "\x1b[103m"
    61  #  define bgLBL "\x1b[104m"
    62  #  define bgPIN "\x1b[105m"
    63  #  define bgLCY "\x1b[106m"
    64  #  define bgBRI "\x1b[107m"
    65  
    66  #else
    67  
    68  #  define cBLK ""
    69  #  define cRED ""
    70  #  define cGRN ""
    71  #  define cBRN ""
    72  #  define cBLU ""
    73  #  define cMGN ""
    74  #  define cCYA ""
    75  #  define cLGR ""
    76  #  define cGRA ""
    77  #  define cLRD ""
    78  #  define cLGN ""
    79  #  define cYEL ""
    80  #  define cLBL ""
    81  #  define cPIN ""
    82  #  define cLCY ""
    83  #  define cBRI ""
    84  #  define cRST ""
    85  
    86  #  define bgBLK ""
    87  #  define bgRED ""
    88  #  define bgGRN ""
    89  #  define bgBRN ""
    90  #  define bgBLU ""
    91  #  define bgMGN ""
    92  #  define bgCYA ""
    93  #  define bgLGR ""
    94  #  define bgGRA ""
    95  #  define bgLRD ""
    96  #  define bgLGN ""
    97  #  define bgYEL ""
    98  #  define bgLBL ""
    99  #  define bgPIN ""
   100  #  define bgLCY ""
   101  #  define bgBRI ""
   102  
   103  #endif /* ^USE_COLOR */
   104  
   105  /*************************
   106   * Box drawing sequences *
   107   *************************/
   108  
   109  #ifdef FANCY_BOXES
   110  
   111  #  define SET_G1   "\x1b)0"       /* Set G1 for box drawing    */
   112  #  define RESET_G1 "\x1b)B"       /* Reset G1 to ASCII         */
   113  #  define bSTART   "\x0e"         /* Enter G1 drawing mode     */
   114  #  define bSTOP    "\x0f"         /* Leave G1 drawing mode     */
   115  #  define bH       "q"            /* Horizontal line           */
   116  #  define bV       "x"            /* Vertical line             */
   117  #  define bLT      "l"            /* Left top corner           */
   118  #  define bRT      "k"            /* Right top corner          */
   119  #  define bLB      "m"            /* Left bottom corner        */
   120  #  define bRB      "j"            /* Right bottom corner       */
   121  #  define bX       "n"            /* Cross                     */
   122  #  define bVR      "t"            /* Vertical, branch right    */
   123  #  define bVL      "u"            /* Vertical, branch left     */
   124  #  define bHT      "v"            /* Horizontal, branch top    */
   125  #  define bHB      "w"            /* Horizontal, branch bottom */
   126  
   127  #else
   128  
   129  #  define SET_G1   ""
   130  #  define RESET_G1 ""
   131  #  define bSTART   ""
   132  #  define bSTOP    ""
   133  #  define bH       "-"
   134  #  define bV       "|"
   135  #  define bLT      "+"
   136  #  define bRT      "+"
   137  #  define bLB      "+"
   138  #  define bRB      "+"
   139  #  define bX       "+"
   140  #  define bVR      "+"
   141  #  define bVL      "+"
   142  #  define bHT      "+"
   143  #  define bHB      "+"
   144  
   145  #endif /* ^FANCY_BOXES */
   146  
   147  /***********************
   148   * Misc terminal codes *
   149   ***********************/
   150  
   151  #define TERM_HOME     "\x1b[H"
   152  #define TERM_CLEAR    TERM_HOME "\x1b[2J"
   153  #define cEOL          "\x1b[0K"
   154  #define CURSOR_HIDE   "\x1b[?25l"
   155  #define CURSOR_SHOW   "\x1b[?25h"
   156  
   157  /************************
   158   * Debug & error macros *
   159   ************************/
   160  
   161  /* Just print stuff to the appropriate stream. */
   162  
   163  #ifdef MESSAGES_TO_STDOUT
   164  #  define SAYF(x...)    printf(x)
   165  #else 
   166  #  define SAYF(x...)    fprintf(stderr, x)
   167  #endif /* ^MESSAGES_TO_STDOUT */
   168  
   169  /* Show a prefixed warning. */
   170  
   171  #define WARNF(x...) do { \
   172      SAYF(cYEL "[!] " cBRI "WARNING: " cRST x); \
   173      SAYF(cRST "\n"); \
   174    } while (0)
   175  
   176  /* Show a prefixed "doing something" message. */
   177  
   178  #define ACTF(x...) do { \
   179      SAYF(cLBL "[*] " cRST x); \
   180      SAYF(cRST "\n"); \
   181    } while (0)
   182  
   183  /* Show a prefixed "success" message. */
   184  
   185  #define OKF(x...) do { \
   186      SAYF(cLGN "[+] " cRST x); \
   187      SAYF(cRST "\n"); \
   188    } while (0)
   189  
   190  /* Show a prefixed fatal error message (not used in afl). */
   191  
   192  #define BADF(x...) do { \
   193      SAYF(cLRD "\n[-] " cRST x); \
   194      SAYF(cRST "\n"); \
   195    } while (0)
   196  
   197  /* Die with a verbose non-OS fatal error message. */
   198  
   199  #define FATAL(x...) do { \
   200      SAYF(bSTOP RESET_G1 CURSOR_SHOW cRST cLRD "\n[-] PROGRAM ABORT : " \
   201           cBRI x); \
   202      SAYF(cLRD "\n         Location : " cRST "%s(), %s:%u\n\n", \
   203           __FUNCTION__, __FILE__, __LINE__); \
   204      exit(1); \
   205    } while (0)
   206  
   207  /* Die by calling abort() to provide a core dump. */
   208  
   209  #define ABORT(x...) do { \
   210      SAYF(bSTOP RESET_G1 CURSOR_SHOW cRST cLRD "\n[-] PROGRAM ABORT : " \
   211           cBRI x); \
   212      SAYF(cLRD "\n    Stop location : " cRST "%s(), %s:%u\n\n", \
   213           __FUNCTION__, __FILE__, __LINE__); \
   214      abort(); \
   215    } while (0)
   216  
   217  /* Die while also including the output of perror(). */
   218  
   219  #define PFATAL(x...) do { \
   220      fflush(stdout); \
   221      SAYF(bSTOP RESET_G1 CURSOR_SHOW cRST cLRD "\n[-]  SYSTEM ERROR : " \
   222           cBRI x); \
   223      SAYF(cLRD "\n    Stop location : " cRST "%s(), %s:%u\n", \
   224           __FUNCTION__, __FILE__, __LINE__); \
   225      SAYF(cLRD "       OS message : " cRST "%s\n", strerror(errno)); \
   226      exit(1); \
   227    } while (0)
   228  
   229  /* Die with FAULT() or PFAULT() depending on the value of res (used to
   230     interpret different failure modes for read(), write(), etc). */
   231  
   232  #define RPFATAL(res, x...) do { \
   233      if (res < 0) PFATAL(x); else FATAL(x); \
   234    } while (0)
   235  
   236  /* Error-checking versions of read() and write() that call RPFATAL() as
   237     appropriate. */
   238  
   239  #define ck_write(fd, buf, len, fn) do { \
   240      u32 _len = (len); \
   241      s32 _res = write(fd, buf, _len); \
   242      if (_res != _len) RPFATAL(_res, "Short write to %s", fn); \
   243    } while (0)
   244  
   245  #define ck_read(fd, buf, len, fn) do { \
   246      u32 _len = (len); \
   247      s32 _res = read(fd, buf, _len); \
   248      if (_res != _len) RPFATAL(_res, "Short read from %s", fn); \
   249    } while (0)
   250  
   251  #endif /* ! _HAVE_DEBUG_H */