File: error.c

package info (click to toggle)
vtk 5.0.4-1.1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 51,084 kB
  • ctags: 70,426
  • sloc: cpp: 524,166; ansic: 220,276; tcl: 43,377; python: 14,037; perl: 3,102; java: 1,436; yacc: 1,033; sh: 339; lex: 248; makefile: 197; asm: 154
file content (155 lines) | stat: -rw-r--r-- 3,765 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
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
/*
 *  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>
#include "netcdf.h"


#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 "Not a netCDF id";
  case NC_ENFILE:
      return "Too many netCDF files open";
  case NC_EEXIST:
      return "netCDF file exists && NC_NOCLOBBER";
  case NC_EINVAL:
      return "Invalid argument";
  case NC_EPERM:
      return "Write to read only";
  case NC_ENOTINDEFINE:
      return "Operation not allowed in data mode";
  case NC_EINDEFINE:
      return "Operation not allowed in define mode";
  case NC_EINVALCOORDS:
      return "Index exceeds dimension bound";
  case NC_EMAXDIMS:
      return "NC_MAX_DIMS exceeded";
  case NC_ENAMEINUSE:
      return "String match to name in use";
  case NC_ENOTATT:
      return "Attribute not found";
  case NC_EMAXATTS:
      return "NC_MAX_ATTRS exceeded";
  case NC_EBADTYPE:
      return "Not a netCDF data type or _FillValue type mismatch";
  case NC_EBADDIM:
      return "Invalid dimension id or name";
  case NC_EUNLIMPOS:
      return "NC_UNLIMITED in the wrong index";
  case NC_EMAXVARS:
      return "NC_MAX_VARS exceeded";
  case NC_ENOTVAR:
      return "Variable not found";
  case NC_EGLOBAL:
      return "Action prohibited on NC_GLOBAL varid";
  case NC_ENOTNC:
      return "Not a netCDF file";
  case NC_ESTS:
      return "In Fortran, string too short";
  case NC_EMAXNAME:
      return "NC_MAX_NAME exceeded";
  case NC_EUNLIMIT:
      return "NC_UNLIMITED size already in use";
  case NC_ENORECVARS:
      return "nc_rec op when there are no record vars";
  case NC_ECHAR:
      return "Attempt to convert between text & numbers";
  case NC_EEDGE:
      return "Edge+start exceeds dimension bound";
  case NC_ESTRIDE:
      return "Illegal stride";
  case NC_EBADNAME:
      return "Attribute or variable name contains illegal characters";
  case NC_ERANGE:
      return "Numeric conversion not representable";
  case NC_ENOMEM:
      return "Memory allocation (malloc) failure";
  }
  /* default */
  return unknown;
}