Source File include/stubs.h

    1    | /***************************************
    2    |   $Revision: 1.7 $
    3    |
    4    |   stubs.h - header file with things defined just to provisionally fix the TBDs.
    5    |
    6    |   Status: NOT REVUED, TESTED, INCOMPLETE
    7    |
    8    |   Design and implementation by: Marek Bukowy
    9    |
    10   |   ******************/ /******************
    11   |   Copyright (c) 1999                              RIPE NCC
    12   |
    13   |   All Rights Reserved
    14   |
    15   |   Permission to use, copy, modify, and distribute this software and its
    16   |   documentation for any purpose and without fee is hereby granted,
    17   |   provided that the above copyright notice appear in all copies and that
    18   |   both that copyright notice and this permission notice appear in
    19   |   supporting documentation, and that the name of the author not be
    20   |   used in advertising or publicity pertaining to distribution of the
    21   |   software without specific, written prior permission.
    22   |
    23   |   THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    24   |   ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
    25   |   AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
    26   |   DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
    27   |   AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    28   |   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    29   |   ***************************************/
    30   |
    31   | /* stubs: just defined to let the other thing compile. Use #define
    32   | NOSTUBS to disable it. */
    33   |
    34   | #ifndef _STUBS_H
    35   | #define _STUBS_H
    36   |
    37   | #include <stdlib.h>
    38   | #include <stdio.h>
    39   | #include <ctype.h>
    40   |
    41   | /* config.h - comes from configure. */
    42   | #ifdef HAVE_CONFIG_H
    43   | #include "config.h"
    44   | #endif
    45   |
    46   | /* this is to allow user stubs in the code */
    47   | /* it will trigger an error when NOSTUBS is set */
    48   |
    49   | #ifndef NOSTUBS
    50   | #define STUB(a) do{a;}while(0)
    51   | #else
    52   | #define STUB(a) hey_here_is_a_stub_left=%^&*&@@@;
    53   | #endif
    54   |
    55   | /* now these are predefined ones... */
    56   |
    57   | #ifndef NOSTUBS
    58   |
    59   | /* for memcmp and strcmp */
    60   | #define CMP_EQUAL 0
    61   |
    62   | /* stub for those compilers (wrrrrrrr....) that can't do (struct != struct) */
    63   | #define STRUCT_EQUAL(a,b) (memcmp(&a, &b, sizeof(a)) == CMP_EQUAL)
    64   |
    65   | /* this prints the filename and line number where it was placed,
    66   |    and then commits suicide (read: segfault) by writing to address NULL.
    67   |    This in normal conditions generates a coredump for later analysis.
    68   |
    69   |    isdigit() is used to avoid warnings from lint.
    70   |    do..while is to allow treating this macro as a single instruction
    71   |    (eg in an if).
    72   | */
    73   |
    74   | #define die   do{ \
    75   | 	fprintf(stderr,"died: +%d %s\n",__LINE__, __FILE__);\
    76   | 	*((int*)NULL)=0; \
    77   | 	} while(isdigit('a'))
    78   |
    79   | #define dieif(a) if(a) { \
    80   |         fprintf(stderr,"died on "#a" in: +%d %s\n",__LINE__, __FILE__);\
    81   | 	*((int*)NULL)=0; \
    82   | 	}
    83   |
    84   |
    85   | #define SQL_TBLNAM_MAX 32
    86   |
    87   |
    88   | /* struct to hold the table name.
    89   |    Wrapped in a struct to make it behave like a normal object (ref by
    90   | value)
    91   |
    92   |    in fact, this type should be made engine-dependent.
    93   | */
    94   |
    95   | typedef struct {
    96   |   char val[SQL_TBLNAM_MAX];
    97   | } sql_tblnam_t;
    98   |
    99   | /* who knows what key type we will really have in other engines */
    100  | typedef long sql_key_t;
    101  |
    102  | #define SQ_NOKEY 0L
    103  |
    104  |
    105  | #ifdef HAVE_STRSEP
    106  | /* good */
    107  | #else
    108  | #  if defined(HAVE_STRTOK_R) && !defined(HAVE_STRSEP)
    109  | /* emulate strsep with strtok_r
    110  |    by making first arg to strtok_r point to the last
    111  |
    112  | char *
    113  | strsep(char **stringp, const char *delim)
    114  | {
    115  |   return strtok_r( *stringp, delim, stringp);
    116  | }
    117  | */
    118  | #define strsep(a,b) strtok_r( *(a), (b), (a) )
    119  |
    120  | #  else
    121  | #  error "must have strsep or strtok_r"
    122  | #  endif
    123  | #endif
    124  |
    125  |
    126  | #endif /* NOSTUBS */
    127  | #endif /* _STUBS_H */