| 1 | /*! | 
|---|
| 2 | ** \file error.cc | 
|---|
| 3 | ** \ingroup (PSIO) | 
|---|
| 4 | */ | 
|---|
| 5 |  | 
|---|
| 6 | #include <stdio.h> | 
|---|
| 7 | #include <stdlib.h> | 
|---|
| 8 | #include <util/psi3/libpsio/psio.h> | 
|---|
| 9 | #include <util/psi3/libpsio/psifiles.h> | 
|---|
| 10 |  | 
|---|
| 11 | namespace psi3 { | 
|---|
| 12 | namespace libpsio { | 
|---|
| 13 |  | 
|---|
| 14 | /*! | 
|---|
| 15 | ** \ingroup (PSIO) | 
|---|
| 16 | ** | 
|---|
| 17 | ** PSIO_ERROR(): Print out an error message for libpsio. | 
|---|
| 18 | ** | 
|---|
| 19 | ** \param unit   = file number | 
|---|
| 20 | ** \param errval = error code (defined symbolically, PSIO_ERROR_XXX) | 
|---|
| 21 | ** | 
|---|
| 22 | */ | 
|---|
| 23 | void psio_error(unsigned int unit, unsigned int errval) | 
|---|
| 24 | { | 
|---|
| 25 | int i; | 
|---|
| 26 |  | 
|---|
| 27 | fprintf(stderr, "PSIO_ERROR: unit = %d\n", unit); | 
|---|
| 28 | /* Try to save the TOCs for all open units */ | 
|---|
| 29 | /* psio_tocwrite() does not call psio_error() so this is OK */ | 
|---|
| 30 | for(i=0; i < PSIO_MAXUNIT; i++) psio_tocwrite(i); | 
|---|
| 31 |  | 
|---|
| 32 | switch(errval) { | 
|---|
| 33 | case PSIO_ERROR_INIT: | 
|---|
| 34 | fprintf(stderr, "PSIO_ERROR: %d (I/O inititalization failed)\n", | 
|---|
| 35 | PSIO_ERROR_INIT); | 
|---|
| 36 | break; | 
|---|
| 37 | case PSIO_ERROR_DONE: | 
|---|
| 38 | fprintf(stderr, "PSIO_ERROR: %d (I/O cleanup failed)\n", | 
|---|
| 39 | PSIO_ERROR_DONE); | 
|---|
| 40 | break; | 
|---|
| 41 | case PSIO_ERROR_MAXVOL: | 
|---|
| 42 | fprintf(stderr, "PSIO_ERROR: %d (maximum number of volumes exceeded)\n", | 
|---|
| 43 | PSIO_ERROR_MAXVOL); | 
|---|
| 44 | break; | 
|---|
| 45 | case PSIO_ERROR_NOVOLPATH: | 
|---|
| 46 | fprintf(stderr, "PSIO_ERROR: %d (no volume path given)\n", | 
|---|
| 47 | PSIO_ERROR_NOVOLPATH); | 
|---|
| 48 | break; | 
|---|
| 49 | case PSIO_ERROR_IDENTVOLPATH: | 
|---|
| 50 | fprintf(stderr, "PSIO_ERROR: %d (two identical volume paths)\n", | 
|---|
| 51 | PSIO_ERROR_IDENTVOLPATH); | 
|---|
| 52 | break; | 
|---|
| 53 | case PSIO_ERROR_OPEN: | 
|---|
| 54 | fprintf(stderr, "PSIO_ERROR: %d (file not open or open call failed)\n", | 
|---|
| 55 | PSIO_ERROR_OPEN); | 
|---|
| 56 | break; | 
|---|
| 57 | case PSIO_ERROR_REOPEN: | 
|---|
| 58 | fprintf(stderr, "PSIO_ERROR: %d (file is already open)\n", | 
|---|
| 59 | PSIO_ERROR_REOPEN); | 
|---|
| 60 | break; | 
|---|
| 61 | case PSIO_ERROR_CLOSE: | 
|---|
| 62 | fprintf(stderr, "PSIO_ERROR: %d (file close failed)\n", | 
|---|
| 63 | PSIO_ERROR_CLOSE); | 
|---|
| 64 | break; | 
|---|
| 65 | case PSIO_ERROR_RECLOSE: | 
|---|
| 66 | fprintf(stderr, "PSIO_ERROR: %d (file is already closed)\n", | 
|---|
| 67 | PSIO_ERROR_RECLOSE); | 
|---|
| 68 | break; | 
|---|
| 69 | case PSIO_ERROR_OSTAT: | 
|---|
| 70 | fprintf(stderr, "PSIO_ERROR: %d (invalid status flag for file open)\n", | 
|---|
| 71 | PSIO_ERROR_OSTAT); | 
|---|
| 72 | break; | 
|---|
| 73 | case PSIO_ERROR_LSEEK: | 
|---|
| 74 | fprintf(stderr, "PSIO_ERROR: %d (lseek failed)\n", | 
|---|
| 75 | PSIO_ERROR_LSEEK); | 
|---|
| 76 | break; | 
|---|
| 77 | case PSIO_ERROR_NOTOCENT: | 
|---|
| 78 | fprintf(stderr, "PSIO_ERROR: %d (no such TOC entry)\n", | 
|---|
| 79 | PSIO_ERROR_NOTOCENT); | 
|---|
| 80 | break; | 
|---|
| 81 | case PSIO_ERROR_TOCENTSZ: | 
|---|
| 82 | fprintf(stderr, "PSIO_ERROR: %d (TOC entry size mismatch)\n", | 
|---|
| 83 | PSIO_ERROR_TOCENTSZ); | 
|---|
| 84 | break; | 
|---|
| 85 | case PSIO_ERROR_KEYLEN: | 
|---|
| 86 | fprintf(stderr, "PSIO_ERROR: %d (TOC key too long)\n", | 
|---|
| 87 | PSIO_ERROR_KEYLEN); | 
|---|
| 88 | break; | 
|---|
| 89 | case PSIO_ERROR_BLKSIZ: | 
|---|
| 90 | fprintf(stderr, "PSIO_ERROR: %d (Requested blocksize invalid)\n", | 
|---|
| 91 | PSIO_ERROR_BLKSIZ); | 
|---|
| 92 | break; | 
|---|
| 93 | case PSIO_ERROR_BLKSTART: | 
|---|
| 94 | fprintf(stderr, "PSIO_ERROR: %d (Incorrect block start address)\n", | 
|---|
| 95 | PSIO_ERROR_BLKSTART); | 
|---|
| 96 | break; | 
|---|
| 97 | case PSIO_ERROR_BLKEND: | 
|---|
| 98 | fprintf(stderr, "PSIO_ERROR: %d (Incorrect block end address)\n", | 
|---|
| 99 | PSIO_ERROR_BLKEND); | 
|---|
| 100 | break; | 
|---|
| 101 | } | 
|---|
| 102 | exit(PSI_RETURN_FAILURE); | 
|---|
| 103 | } | 
|---|
| 104 |  | 
|---|
| 105 | } | 
|---|
| 106 | } | 
|---|