libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

extractor_logging.h (2666B)


      1 /*
      2      This file is part of libextractor.
      3      Copyright (C) 2012 Vidyut Samanta and Christian Grothoff
      4 
      5      libextractor is free software; you can redistribute it and/or modify
      6      it under the terms of the GNU General Public License as published
      7      by the Free Software Foundation; either version 3, or (at your
      8      option) any later version.
      9 
     10      libextractor is distributed in the hope that it will be useful, but
     11      WITHOUT ANY WARRANTY; without even the implied warranty of
     12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13      General Public License for more details.
     14 
     15      You should have received a copy of the GNU General Public License
     16      along with libextractor; see the file COPYING.  If not, write to the
     17      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     18      Boston, MA 02110-1301, USA.
     19  */
     20 /**
     21  * @file main/extractor_logging.h
     22  * @brief logging API for GNU libextractor
     23  * @author Christian Grothoff
     24  */
     25 #ifndef EXTRACTOR_LOGGING_H
     26 #define EXTRACTOR_LOGGING_H
     27 
     28 #define DEBUG 0
     29 
     30 #if DEBUG
     31 
     32 /**
     33  * Log function.
     34  *
     35  * @param file name of file with the error
     36  * @param line line number with the error
     37  * @param ... log message and arguments
     38  */
     39 void
     40 EXTRACTOR_log_ (const char *file, int line, const char *format, ...);
     41 
     42 /**
     43  * Log a message.
     44  *
     45  * @param ... format string and arguments for fmt (printf-style)
     46  */
     47 #define LOG(...) EXTRACTOR_log_ (__FILE__, __LINE__, __VA_ARGS__)
     48 
     49 #else
     50 
     51 /**
     52  * Log a message.
     53  *
     54  * @param ... format string and arguments for fmt (printf-style)
     55  */
     56 #define LOG(...)
     57 
     58 #endif
     59 
     60 
     61 /**
     62  * Log an error message about a failed system/libc call
     63  * using an error message based on 'errno'.
     64  *
     65  * @param syscall name of the syscall that failed
     66  */
     67 #define LOG_STRERROR(syscall) LOG ("System call `%s' failed: %s\n", syscall, \
     68                                    STRERROR (errno))
     69 
     70 
     71 /**
     72  * Log an error message about a failed system/libc call
     73  * involving a file using an error message based on 'errno'.
     74  *
     75  * @param syscall name of the syscall that failed
     76  * @param filename name of the file that was involved
     77  */
     78 #define LOG_STRERROR_FILE(syscall,filename) LOG ( \
     79     "System call `%s' failed for file `%s': %s\n", syscall, filename, STRERROR ( \
     80       errno))
     81 
     82 
     83 /**
     84  * Abort the program reporting an assertion failure
     85  *
     86  * @param file filename with the failure
     87  * @param line line number with the failure
     88  */
     89 void
     90 EXTRACTOR_abort_ (const char *file,
     91                   int line);
     92 
     93 
     94 /**
     95  * Abort program if assertion fails.
     96  *
     97  * @param cond assertion that must hold.
     98  */
     99 #define ASSERT(cond) do { if (! (cond)) EXTRACTOR_abort_ (__FILE__, __LINE__); \
    100 } while (0)
    101 
    102 
    103 #endif