Logo Search packages:      
Sourcecode: netcdf version File versions  Download package

error.c

/*
 *    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 <config.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 "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";
      case NC_EVARSIZE:
          return "One or more variable sizes violate format constraints";
      case NC_EDIMSIZE:
          return "Invalid dimension size";
      }
      /* default */
      return unknown;
}

Generated by  Doxygen 1.6.0   Back to index