File: error.c

package info (click to toggle)
vtk 5.4.2-8
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 94,592 kB
  • ctags: 125,784
  • sloc: cpp: 895,924; ansic: 467,481; tcl: 46,607; python: 17,336; xml: 6,774; perl: 3,111; java: 1,992; yacc: 1,148; asm: 471; lex: 268; makefile: 170; sh: 126
file content (167 lines) | stat: -rw-r--r-- 4,362 bytes parent folder | download | duplicates (7)
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/*
 *  Copyright 1993, University Corporation for Atmospheric Research
 *      See netcdf/COPYRIGHT file for copying and redistribution conditions.
 */
/* $Id: error.c,v 1.14 90/02/23 16:08:55 davis Exp */

/*LINTLIBRARY*/

#include "ncconfig.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

/* If netcdf-4 is in use, rename all nc_ functions to nc3_ functions. */
#ifdef USE_NETCDF4
#include <netcdf3.h>
#include <nc3convert.h>
#else
#include "netcdf.h"
#endif

#ifndef NO_STRERROR
#include <string.h> /* contains prototype for ansi libc function strerror() */
#else
/* provide a strerror function for older unix systems */
static char *
strerror(int errnum)
{
    extern int sys_nerr;
    extern char *sys_errlist[];

    if(errnum < 0 || errnum >= sys_nerr) return NULL;
    /* else */
    return sys_errlist[errnum];
}
#endif /* NO_STRERROR */


#ifdef vms
/* UNTESTED */
/*
 * On the vms system, when a system error occurs which is not
 * mapped into the unix styled errno values, errno is set EVMSERR
 * and a VMS error code is set in vaxc$errno.
 * This routine prints the systems message associated with status return
 * from a system services call.
 */

#include <errno.h>
#include <descrip.h>
#include <ssdef.h>

static const char *
vms_strerror( int status )
{
  short msglen;
  static char msgbuf[256];
  $DESCRIPTOR(message, msgbuf);
  register ret;

  msgbuf[0] = 0;
  ret = SYS$GETMSG(status, &msglen, &message, 15, 0);
  
  if(ret != SS$_BUFFEROVF && ret != SS$_NORMAL) {
    (void) strcpy(msgbuf, "EVMSERR");
  }
  return(msgbuf);
}
#endif /* vms */


static char unknown[] = "Unknown Error";


const char *
nc_strerror(int err)
{

#ifdef vms 
  if(err == EVMSERR)
  {
    return vms_strerror(err);
  } 
  /* else */
#endif /* vms */

  if(NC_ISSYSERR(err))
  {
    const char *cp = (const char *) strerror(err);
    if(cp == NULL)
      return unknown;
    /* else */
    return cp;
  }
  /* else */

  switch (err) {
  case NC_NOERR:
      return "No error";
  case NC_EBADID:
      return "NetCDF: Not a valid ID";
  case NC_ENFILE:
      return "NetCDF: Too many files open";
  case NC_EEXIST:
      return "NetCDF: File exists && NC_NOCLOBBER";
  case NC_EINVAL:
      return "NetCDF: Invalid argument";
  case NC_EPERM:
      return "NetCDF: Write to read only";
  case NC_ENOTINDEFINE:
      return "NetCDF: Operation not allowed in data mode";
  case NC_EINDEFINE:
      return "NetCDF: Operation not allowed in define mode";
  case NC_EINVALCOORDS:
      return "NetCDF: Index exceeds dimension bound";
  case NC_EMAXDIMS:
      return "NetCDF: NC_MAX_DIMS exceeded";
  case NC_ENAMEINUSE:
      return "NetCDF: String match to name in use";
  case NC_ENOTATT:
      return "NetCDF: Attribute not found";
  case NC_EMAXATTS:
      return "NetCDF: NC_MAX_ATTRS exceeded";
  case NC_EBADTYPE:
      return "NetCDF: Not a valid data type or _FillValue type mismatch";
  case NC_EBADDIM:
      return "NetCDF: Invalid dimension ID or name";
  case NC_EUNLIMPOS:
      return "NetCDF: NC_UNLIMITED in the wrong index";
  case NC_EMAXVARS:
      return "NetCDF: NC_MAX_VARS exceeded";
  case NC_ENOTVAR:
      return "NetCDF: Variable not found";
  case NC_EGLOBAL:
      return "NetCDF: Action prohibited on NC_GLOBAL varid";
  case NC_ENOTNC:
      return "NetCDF: Unknown file format";
  case NC_ESTS:
      return "NetCDF: In Fortran, string too short";
  case NC_EMAXNAME:
      return "NetCDF: NC_MAX_NAME exceeded";
  case NC_EUNLIMIT:
      return "NetCDF: NC_UNLIMITED size already in use";
  case NC_ENORECVARS:
      return "NetCDF: nc_rec op when there are no record vars";
  case NC_ECHAR:
      return "NetCDF: Attempt to convert between text & numbers";
  case NC_EEDGE:
      return "NetCDF: Start+count exceeds dimension bound";
  case NC_ESTRIDE:
      return "NetCDF: Illegal stride";
  case NC_EBADNAME:
      return "NetCDF: Name contains illegal characters";
  case NC_ERANGE:
      return "NetCDF: Numeric conversion not representable";
  case NC_ENOMEM:
      return "NetCDF: Memory allocation (malloc) failure";
  case NC_EVARSIZE:
      return "NetCDF: One or more variable sizes violate format constraints";
  case NC_EDIMSIZE:
      return "NetCDF: Invalid dimension size";
  case NC_ETRUNC:
      return "NetCDF: File likely truncated or possibly corrupted";
  }
  /* default */
  return unknown;
}