1/*********************************************************************
2 *   Copyright 1993, UCAR/Unidata
3 *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
4 *   $Header: /upc/share/CVS/netcdf-3/ncgen/generr.c,v 1.1 2009/09/25 18:22:22 dmh Exp $
5 *********************************************************************/
6
7#include "includes.h"
8#include <ctype.h> /* for isprint() */
9
10int error_count;
11
12#ifndef NO_STDARG
13#define vastart(argv,fmt) va_start(argv,fmt)
14#else
15#define vastart(argv,fmt) va_start(argv)
16#endif
17
18/*
19 * Invalidate variable list.
20 */
21#ifndef NO_STDARG
22#define vaend(argv,fmt) va_end(argv)
23#else
24#define vaend(argv,fmt) va_end(argv)
25#endif
26
27/*
28 * For logging error conditions.
29 * Designed to be called by other vararg procedures
30 */
31#ifndef NO_STDARG
32void
33vderror(const char *fmt, va_list argv)
34#else
35/* Technically illegal; va_alist should be only arg */
36void
37vderror(fmt,va_alist) const char* fmtva_dcl
38#endif
39{
40    (void) vdwarn(fmt,argv);
41    error_count++;
42}
43
44/*
45 * For logging error conditions.
46 * Designed to be called by other vararg procedures
47 */
48#ifndef NO_STDARG
49void
50vdwarn(const char *fmt, va_list argv)
51#else
52/* Technically illegal; va_alist should be only arg */
53void
54vdwarn(fmt,va_alist) const char* fmtva_dcl
55#endif
56{
57    (void) vfprintf(stderr,fmt,argv) ;
58    (void) fputc('\n',stderr) ;
59    (void) fflush(stderr); /* to ensure log files are current */
60}
61
62#ifndef NO_STDARG
63void
64derror(const char *fmt, ...)
65#else
66void
67derror(fmt,va_alist) const char* fmtva_dcl
68#endif
69{
70    va_list argv;
71    vastart(argv,fmt);
72    vderror(fmt,argv);
73}
74
75/* Report version errors */
76#ifndef NO_STDARG
77void
78verror(const char *fmt, ...)
79#else
80void
81verror(fmt,va_alist) const char* fmtva_dcl
82#endif
83{
84    char newfmt[2048];
85    va_list argv;
86    vastart(argv,fmt);
87    strcpy(newfmt,"netCDF classic: not supported: ");
88    strncat(newfmt,fmt,2000);
89    vderror(newfmt,argv);
90    vaend(argv,fmt);
91}
92
93#ifndef NO_STDARG
94void
95semwarn(const int lno, const char *fmt, ...)
96#else
97void
98semwarn(lno,fmt,va_alist) const int lno; const char* fmtva_dcl
99#endif
100{
101    va_list argv;
102    vastart(argv,fmt);
103    (void)fprintf(stderr,"%s: %s line %d: ", prognamecdlnamelno);
104    vdwarn(fmt,argv);
105}
106
107#ifndef NO_STDARG
108void
109semerror(const int lno, const char *fmt, ...)
110#else
111void
112semerror(lno,fmt,va_alist) const int lno; const char* fmtva_dcl
113#endif
114{
115    va_list argv;
116    vastart(argv,fmt);
117    (void)fprintf(stderr,"%s: %s line %d: ", prognamecdlnamelno);
118    vderror(fmt,argv);
119    exit(1); /* immediately fatal */
120}
121
122/* Capture potential version errors */
123static char* markcdf4_msg = NULL;
124void
125markcdf4(const char* msg)
126{
127    enhanced_flag = 1;
128    if(markcdf4_msg == NULL)
129        markcdf4_msg = (char*)msg;
130}
131
132char*
133getmarkcdf4(void)
134{
135    return markcdf4_msg;
136}
137
138/* Capture potential version errors */
139static char* markcdf5_msg = NULL;
140void
141markcdf5(const char* msg)
142{
143    cdf5_flag = 1;
144    if(markcdf5_msg == NULL)
145        markcdf5_msg = (char*)msg;
146}
147
148char*
149getmarkcdf5(void)
150{
151    return markcdf5_msg;
152}
153
154/**************************************************/
155/* Provide a version of snprintf that panics if*/
156/* the buffer is overrun*/
157
158#ifndef NO_STDARG
159void
160nprintf(char* buffer, size_t size, const char *fmt, ...)
161#else
162void
163nprintf(buffer,size,fmt)
164    char* buffer; size_t size; const char* fmtva_dcl
165#endif
166{
167    long written;
168    va_list args;
169    vastart(args,fmt);
170    written = vsnprintf(buffer,size,fmt,args);
171    if(written < 0 || written >= size) {
172 PANIC("snprintf failure");
173    }
174}


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed