Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

155 lines
3.7 KiB

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