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 */