123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- /*
- american fuzzy lop - debug / error handling macros
- --------------------------------------------------
- Written and maintained by Michal Zalewski <lcamtuf@google.com>
- Copyright 2013, 2014, 2015, 2016 Google Inc. All rights reserved.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
- http://www.apache.org/licenses/LICENSE-2.0
- */
- #ifndef _HAVE_DEBUG_H
- #define _HAVE_DEBUG_H
- #include <errno.h>
- #include "types.h"
- #include "config.h"
- /*******************
- * Terminal colors *
- *******************/
- #ifdef USE_COLOR
- # define cBLK "\x1b[0;30m"
- # define cRED "\x1b[0;31m"
- # define cGRN "\x1b[0;32m"
- # define cBRN "\x1b[0;33m"
- # define cBLU "\x1b[0;34m"
- # define cMGN "\x1b[0;35m"
- # define cCYA "\x1b[0;36m"
- # define cLGR "\x1b[0;37m"
- # define cGRA "\x1b[1;90m"
- # define cLRD "\x1b[1;91m"
- # define cLGN "\x1b[1;92m"
- # define cYEL "\x1b[1;93m"
- # define cLBL "\x1b[1;94m"
- # define cPIN "\x1b[1;95m"
- # define cLCY "\x1b[1;96m"
- # define cBRI "\x1b[1;97m"
- # define cRST "\x1b[0m"
- # define bgBLK "\x1b[40m"
- # define bgRED "\x1b[41m"
- # define bgGRN "\x1b[42m"
- # define bgBRN "\x1b[43m"
- # define bgBLU "\x1b[44m"
- # define bgMGN "\x1b[45m"
- # define bgCYA "\x1b[46m"
- # define bgLGR "\x1b[47m"
- # define bgGRA "\x1b[100m"
- # define bgLRD "\x1b[101m"
- # define bgLGN "\x1b[102m"
- # define bgYEL "\x1b[103m"
- # define bgLBL "\x1b[104m"
- # define bgPIN "\x1b[105m"
- # define bgLCY "\x1b[106m"
- # define bgBRI "\x1b[107m"
- #else
- # define cBLK ""
- # define cRED ""
- # define cGRN ""
- # define cBRN ""
- # define cBLU ""
- # define cMGN ""
- # define cCYA ""
- # define cLGR ""
- # define cGRA ""
- # define cLRD ""
- # define cLGN ""
- # define cYEL ""
- # define cLBL ""
- # define cPIN ""
- # define cLCY ""
- # define cBRI ""
- # define cRST ""
- # define bgBLK ""
- # define bgRED ""
- # define bgGRN ""
- # define bgBRN ""
- # define bgBLU ""
- # define bgMGN ""
- # define bgCYA ""
- # define bgLGR ""
- # define bgGRA ""
- # define bgLRD ""
- # define bgLGN ""
- # define bgYEL ""
- # define bgLBL ""
- # define bgPIN ""
- # define bgLCY ""
- # define bgBRI ""
- #endif /* ^USE_COLOR */
- /*************************
- * Box drawing sequences *
- *************************/
- #ifdef FANCY_BOXES
- # define SET_G1 "\x1b)0" /* Set G1 for box drawing */
- # define RESET_G1 "\x1b)B" /* Reset G1 to ASCII */
- # define bSTART "\x0e" /* Enter G1 drawing mode */
- # define bSTOP "\x0f" /* Leave G1 drawing mode */
- # define bH "q" /* Horizontal line */
- # define bV "x" /* Vertical line */
- # define bLT "l" /* Left top corner */
- # define bRT "k" /* Right top corner */
- # define bLB "m" /* Left bottom corner */
- # define bRB "j" /* Right bottom corner */
- # define bX "n" /* Cross */
- # define bVR "t" /* Vertical, branch right */
- # define bVL "u" /* Vertical, branch left */
- # define bHT "v" /* Horizontal, branch top */
- # define bHB "w" /* Horizontal, branch bottom */
- #else
- # define SET_G1 ""
- # define RESET_G1 ""
- # define bSTART ""
- # define bSTOP ""
- # define bH "-"
- # define bV "|"
- # define bLT "+"
- # define bRT "+"
- # define bLB "+"
- # define bRB "+"
- # define bX "+"
- # define bVR "+"
- # define bVL "+"
- # define bHT "+"
- # define bHB "+"
- #endif /* ^FANCY_BOXES */
- /***********************
- * Misc terminal codes *
- ***********************/
- #define TERM_HOME "\x1b[H"
- #define TERM_CLEAR TERM_HOME "\x1b[2J"
- #define cEOL "\x1b[0K"
- #define CURSOR_HIDE "\x1b[?25l"
- #define CURSOR_SHOW "\x1b[?25h"
- /************************
- * Debug & error macros *
- ************************/
- /* Just print stuff to the appropriate stream. */
- #ifdef MESSAGES_TO_STDOUT
- # define SAYF(x...) printf(x)
- #else
- # define SAYF(x...) fprintf(stderr, x)
- #endif /* ^MESSAGES_TO_STDOUT */
- /* Show a prefixed warning. */
- #define WARNF(x...) do { \
- SAYF(cYEL "[!] " cBRI "WARNING: " cRST x); \
- SAYF(cRST "\n"); \
- } while (0)
- /* Show a prefixed "doing something" message. */
- #define ACTF(x...) do { \
- SAYF(cLBL "[*] " cRST x); \
- SAYF(cRST "\n"); \
- } while (0)
- /* Show a prefixed "success" message. */
- #define OKF(x...) do { \
- SAYF(cLGN "[+] " cRST x); \
- SAYF(cRST "\n"); \
- } while (0)
- /* Show a prefixed fatal error message (not used in afl). */
- #define BADF(x...) do { \
- SAYF(cLRD "\n[-] " cRST x); \
- SAYF(cRST "\n"); \
- } while (0)
- /* Die with a verbose non-OS fatal error message. */
- #define FATAL(x...) do { \
- SAYF(bSTOP RESET_G1 CURSOR_SHOW cRST cLRD "\n[-] PROGRAM ABORT : " \
- cBRI x); \
- SAYF(cLRD "\n Location : " cRST "%s(), %s:%u\n\n", \
- __FUNCTION__, __FILE__, __LINE__); \
- exit(1); \
- } while (0)
- /* Die by calling abort() to provide a core dump. */
- #define ABORT(x...) do { \
- SAYF(bSTOP RESET_G1 CURSOR_SHOW cRST cLRD "\n[-] PROGRAM ABORT : " \
- cBRI x); \
- SAYF(cLRD "\n Stop location : " cRST "%s(), %s:%u\n\n", \
- __FUNCTION__, __FILE__, __LINE__); \
- abort(); \
- } while (0)
- /* Die while also including the output of perror(). */
- #define PFATAL(x...) do { \
- fflush(stdout); \
- SAYF(bSTOP RESET_G1 CURSOR_SHOW cRST cLRD "\n[-] SYSTEM ERROR : " \
- cBRI x); \
- SAYF(cLRD "\n Stop location : " cRST "%s(), %s:%u\n", \
- __FUNCTION__, __FILE__, __LINE__); \
- SAYF(cLRD " OS message : " cRST "%s\n", strerror(errno)); \
- exit(1); \
- } while (0)
- /* Die with FAULT() or PFAULT() depending on the value of res (used to
- interpret different failure modes for read(), write(), etc). */
- #define RPFATAL(res, x...) do { \
- if (res < 0) PFATAL(x); else FATAL(x); \
- } while (0)
- /* Error-checking versions of read() and write() that call RPFATAL() as
- appropriate. */
- #define ck_write(fd, buf, len, fn) do { \
- u32 _len = (len); \
- s32 _res = write(fd, buf, _len); \
- if (_res != _len) RPFATAL(_res, "Short write to %s", fn); \
- } while (0)
- #define ck_read(fd, buf, len, fn) do { \
- u32 _len = (len); \
- s32 _res = read(fd, buf, _len); \
- if (_res != _len) RPFATAL(_res, "Short read from %s", fn); \
- } while (0)
- #endif /* ! _HAVE_DEBUG_H */
|