File: ocdebug.h

package info (click to toggle)
netcdf 1:4.7.4-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, sid
  • size: 104,952 kB
  • sloc: ansic: 228,683; sh: 10,980; yacc: 2,561; makefile: 1,319; lex: 1,173; xml: 173; awk: 2
file content (105 lines) | stat: -rw-r--r-- 2,793 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/* Copyright 2018, UCAR/Unidata and OPeNDAP, Inc.
   See the COPYRIGHT file for more information. */

#ifndef OCOCDBG_H
#define OCOCDBG_H

#ifndef OCDEBUG
#undef OCDEBUG
#endif

#include "config.h"

#ifdef HAVE_STDARG_H
#include <stdarg.h>
#endif

#include <curl/curl.h>

#include "oc.h"
#include "ocinternal.h"


/* OCCATCHERROR is used to detect errors as close
   to their point of origin as possible. When
   enabled, one can set a breakpoint in ocbreakpoint()
   to catch the failure. Turing it on incurs a significant
   performance penalty, so it is off by default.*/

#undef OCCATCHERROR

#define OCPANIC(msg) assert(ocpanic(msg))
#define OCPANIC1(msg,arg) assert(ocpanic(msg,arg))
#define OCPANIC2(msg,arg1,arg2) assert(ocpanic(msg,arg1,arg2))

/* Make it possible to catch assertion failures by breakpointing ocpanic*/
#define OCASSERT(expr) if(!(expr)) {OCPANIC((#expr));} else {}

/* Need some syntactic trickery to make these macros work*/
#ifdef OCDEBUG
#define OCDBG(msg) {oclog(OCLOGDBG,msg);}
#define OCDBG1(msg,arg) {oclog(OCLOGDBG,msg,arg);}
#define OCDBG2(msg,arg1,arg2) {oclog(OCLOGDBG,msg,arg1,arg2);}
#define OCDBGTEXT(text) {oclogtext(OCLOGNOTE,text);} else {}
#define OCDBGCODE(code) {code;}

#else
#define OCDBG(msg)
#define OCDBG1(msg,arg)
#define OCDBG2(msg,arg1,arg2)
#define OCDBGTEXT(text)
#define OCDBGCODE(code)
#endif


/*
OCPROGRESS attempts to provide some info
about how IO is getting along.
*/
#undef OCPROGRESS

EXTERNL int ocdebug;
EXTERNL int cedebug;

/*extern char* dent2(int n);*/
/*/extern char* dent(int n);*/
extern int ocpanic(const char* fmt, ...);

extern int xdrerror(void);

/*
Provide wrapped versions of calloc and malloc.
The wrapped version panics if memory
is exhausted.  It also guarantees that the
memory has been zero'd.
*/

extern void* occalloc(size_t size, size_t nelems);
extern void* ocmalloc(size_t size);
extern void  ocfree(void*);

#define MEMCHECK(var,throw) {if((var)==NULL) return (throw);}
#define MEMFAIL(var) MEMCHECK(var,OCCATCH(OC_ENOMEM))
#define MEMGOTO(var,stat,label) {if((var)==NULL) {stat=OC_ENOMEM;goto label;}}

#ifdef OCCATCHERROR
extern OCerror ocbreakpoint(OCerror err);
extern OCerror occatch(OCerror err);
extern CURLcode ocreportcurlerror(struct OCstate* state, CURLcode cstat);
/* Place breakpoint on ocbreakpoint to catch errors close to where they occur*/
#define OCCATCH(e) occatch(e)
#define OCCATCHCHK(e) (void)occatch(e)
#define OCGOTO(label) {ocbreakpoint(-1); goto label;}
#define OCCURLERR(s,e) ocreportcurlerror(s,e)
#define CURLERR(e) ocreportcurlerror(NULL,e)
#else
#define OCCATCH(e) (e)
#define OCCATCHCHK(e)
#define OCGOTO(label) goto label
#define OCCURLERR(s,e) (e)
#define CURLERR(e) (e)
#endif
#define OCTHROW(e) OCCATCH(e)
#define OCTHROWCHK(e) OCCATCHCHK(e)

#endif /*OCOCDBG_H*/