Changeset 19035
- Timestamp:
- Aug 12, 2008, 12:54:53 PM (18 years ago)
- Location:
- trunk/psLib/src/fits
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/fits/psFits.c
r17656 r19035 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1.8 0$ $Name: not supported by cvs2svn $10 * @date $Date: 2008-0 5-13 22:03:21$9 * @version $Revision: 1.81 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2008-08-12 22:54:53 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 19 19 #include <unistd.h> 20 20 #include <string.h> 21 #include <errno.h> 21 22 22 23 #include "psFits.h" … … 36 37 static char *defaultExtword = "EXTNAME"; 37 38 39 bool p_psFitsDumpErrors (const char* filename, unsigned int lineno, const char* func, 40 psErrorCode code, const char *message, ...) { 41 42 char fitsErr[MAX_STRING_LENGTH]; 43 44 va_list ap; 45 va_start(ap, message); 46 p_psErrorV (filename, lineno, func, PS_ERR_BAD_FITS, true, message, ap); 47 va_end(ap); 48 49 while (fits_read_errmsg(fitsErr)) { 50 p_psError(filename, lineno, func, PS_ERR_BAD_FITS, false, "CFITSIO error: %s", fitsErr); 51 } 52 53 return true; 54 } 55 56 psErrorCode p_psFitsError(const char* filename, unsigned int lineno, const char* func, 57 int status, bool new, const char *errorMsg, ...) 58 { 59 char fitsErr[MAX_STRING_LENGTH]; 60 61 if (status == 0) return PS_ERR_NONE; 62 63 va_list ap; // Variable arguments 64 va_start(ap, errorMsg); 65 psErrorV (PS_ERR_IO, new, errorMsg, ap); 66 va_end(ap); 67 68 while (fits_read_errmsg(fitsErr)) { 69 psError(PS_ERR_IO, false, "[CFITSIO error: %s]", fitsErr); 70 } 71 return PS_ERR_IO; 72 } 73 38 74 static bool isHDUEmpty(const psFits* fits) 39 75 { … … 60 96 if (fits != NULL) { 61 97 if (fits_close_file(fits->fd, &status)) { 62 char fitsErr[MAX_STRING_LENGTH]; 63 fits_get_errstatus(status, fitsErr); 64 psError(PS_ERR_BAD_FITS, true, 65 "Error while closing psFits object. CFITSIO error: %s", 66 fitsErr); 98 psFitsDumpErrors (PS_ERR_IO, "Error while closing psFits object"); 67 99 return false; 68 100 } … … 125 157 if (access(name, F_OK) == 0) { 126 158 // file exists, delete old one first 127 remove(name); 128 } 159 if (remove(name)) { 160 int thisErrno = errno; 161 char errorBuf[64], *errorMsg; 162 # if ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE) 163 errorMsg = strerror_r (errno, errorBuf, 64); 164 # else 165 strerror_r (errno, errorBuf, 64); 166 errorMsg = errorBuf; 167 # endif 168 psError (PS_ERR_IO, true, "Failed to delete a previously-existing file: %s", errorMsg); 169 fprintf (stderr, "errno: %d, %s, %s : %lx, %lx\n", thisErrno, errorMsg, errorBuf, (long int) errorMsg, (long int) errorBuf); 170 return NULL; 171 } 172 } 173 if (!access(name, F_OK)) { 174 psError (PS_ERR_IO, true, "deleted file still exists!"); 175 return NULL; 176 } 129 177 130 178 #if ( CFITSIO_DISKFILE == 1 ) … … 135 183 (&fptr, name, &status); 136 184 if (fptr == NULL || status != 0) { 137 char fitsErr[MAX_STRING_LENGTH]; 138 fits_get_errstatus(status, fitsErr); 139 psError(PS_ERR_IO, true, 140 _("Could not create file,'%s'. CFITSIO Error: %s"), 141 name, fitsErr); 185 psFitsDumpErrors (PS_ERR_IO, _("Could not create file,'%s'"), name); 142 186 return NULL; 143 187 } … … 150 194 (&fptr, name, iomode, &status); 151 195 if (fptr == NULL || status != 0) { 152 char fitsErr[MAX_STRING_LENGTH]; 153 fits_get_errstatus(status, fitsErr); 154 psError(PS_ERR_IO, true, 155 _("Could not open file,'%s'. CFITSIO Error: %s"), 156 name, fitsErr); 196 psFitsDumpErrors(PS_ERR_IO, _("Could not open file,'%s'"), name); 157 197 return NULL; 158 198 } … … 203 243 } 204 244 205 psErrorCode p_psFitsError(const char* filename, unsigned int lineno, const char* func, int status,206 bool new, const char *errorMsg, ...)207 {208 if (status == 0) {209 return PS_ERR_NONE;210 }211 212 va_list ap; // Variable arguments213 va_start(ap, errorMsg);214 psString msg = NULL; // Message to pass to psError215 psStringAppendV(&msg, errorMsg, ap);216 va_end(ap);217 218 char cfitsioMsg[MAX_STRING_LENGTH]; // Error message from cfitsio219 (void)fits_get_errstatus(status, cfitsioMsg);220 221 psStringAppend(&msg, "[CFITSIO error: %s]", cfitsioMsg);222 223 psErrorCode code = p_psError(filename, lineno, func, PS_ERR_IO, new, msg); // Error code224 psFree(msg);225 return code;226 }227 228 245 static void psFitsCompressionFree(psFitsCompression *comp) 229 246 { … … 354 371 fits_movrel_hdu(fits->fd, extnum, &hdutype, &status); 355 372 if (status != 0) { 356 char fitsErr[MAX_STRING_LENGTH]; 357 fits_get_errstatus(status, fitsErr); 358 psError(PS_ERR_LOCATION_INVALID, true, 359 _("Could not move %d HDUs from current position. CFITSIO Error: %s"), 360 extnum, fitsErr); 373 psFitsDumpErrors (PS_ERR_LOCATION_INVALID, _("Could not move %d HDUs from current position"), extnum); 361 374 return false; 362 375 } … … 364 377 fits_movabs_hdu(fits->fd, extnum+1, &hdutype, &status); 365 378 if (status != 0) { 366 char fitsErr[MAX_STRING_LENGTH]; 367 fits_get_errstatus(status, fitsErr); 368 psError(PS_ERR_LOCATION_INVALID, true, 369 _("Could not move to specified HDU #%d. CFITSIO Error: %s"), 370 extnum, fitsErr); 379 psFitsDumpErrors (PS_ERR_LOCATION_INVALID, _("Could not move to specified HDU #%d."), extnum); 371 380 return false; 372 381 } … … 423 432 424 433 if (fits_update_key_str(fits->fd, extword, (char*)name, NULL, &status) != 0) { 425 char fitsErr[MAX_STRING_LENGTH]; 426 (void)fits_get_errstatus(status, fitsErr); 427 psError(PS_ERR_IO, true, _("Could not write data to file. CFITSIO Error: %s"), fitsErr); 434 psFitsDumpErrors (PS_ERR_IO, _("Could not write data to file %s"), name); 428 435 return false; 429 436 } … … 449 456 // OK, now let's delete the HDU 450 457 if (fits_delete_hdu(fits->fd, NULL, &status) != 0) { 451 char fitsErr[MAX_STRING_LENGTH]; 452 (void)fits_get_errstatus(status, fitsErr); 453 psError(PS_ERR_IO, true, _("Could not write data to file. CFITSIO Error: %s"), fitsErr); 458 psFitsDumpErrors(PS_ERR_IO, _("Could not write data to file extnum %d"), extnum); 454 459 return false; 455 460 } … … 478 483 // OK, now let's delete the HDU 479 484 if (fits_delete_hdu(fits->fd, NULL, &status) != 0) { 480 char fitsErr[MAX_STRING_LENGTH]; 481 (void)fits_get_errstatus(status, fitsErr); 482 psError(PS_ERR_IO, true, 483 _("Could not write data to file. CFITSIO Error: %s"), 484 fitsErr); 485 psFitsDumpErrors(PS_ERR_IO, _("Could not write data to file extname %s"), extname); 485 486 return false; 486 487 } … … 497 498 498 499 if (fits_get_num_hdus(fits->fd, &num, &status) != 0) { 499 char fitsErr[MAX_STRING_LENGTH]; 500 fits_get_errstatus(status, fitsErr); 501 psError(PS_ERR_LOCATION_INVALID, true, 502 _("Failed to determine the number of HDUs. CFITSIO Error: %s"), 503 fitsErr); 500 psFitsDumpErrors(PS_ERR_LOCATION_INVALID, _("Failed to determine the number of HDUs")); 504 501 return 0; 505 502 } … … 516 513 517 514 if (fits_get_hdu_type(fits->fd, &hdutype, &status) != 0) { 518 char fitsErr[MAX_STRING_LENGTH]; 519 fits_get_errstatus(status, fitsErr); 520 psError(PS_ERR_LOCATION_INVALID, true, 521 _("Failed to determine an HDU type. CFITSIO Error: %s"), 522 fitsErr); 515 psFitsDumpErrors(PS_ERR_LOCATION_INVALID, _("Failed to determine an HDU type")); 523 516 return PS_FITS_TYPE_NONE; 524 517 } … … 595 588 int status = 0; 596 589 if (fits_set_compression_type(fits->fd, comptype, &status)) { 597 char fitsErr[MAX_STRING_LENGTH]; 598 fits_get_errstatus(status, fitsErr); 599 psError(PS_ERR_BAD_FITS, true, 600 "Error while configuring compression. CFITSIO error: %s", fitsErr); 590 psFitsDumpErrors(PS_ERR_BAD_FITS, "Error while configuring compression"); 601 591 return false; 602 592 } … … 624 614 if (status) { 625 615 fits_set_compression_type(fits->fd, 0x0, &status); 626 char fitsErr[MAX_STRING_LENGTH]; 627 fits_get_errstatus(status, fitsErr); 628 psError(PS_ERR_BAD_FITS, true, 629 "Error while configuring compression. CFITSIO error: %s", fitsErr); 616 psFitsDumpErrors(PS_ERR_BAD_FITS, "Error while configuring compression"); 630 617 return false; 631 618 } … … 636 623 if (fits_set_noise_bits(fits->fd, noisebits, &status)) { 637 624 fits_set_compression_type(fits->fd, 0x0, &status); 638 char fitsErr[MAX_STRING_LENGTH]; 639 fits_get_errstatus(status, fitsErr); 640 psError(PS_ERR_BAD_FITS, true, 641 "Error while configuring compression. CFITSIO error: %s", fitsErr); 625 psFitsDumpErrors(PS_ERR_BAD_FITS, "Error while configuring compression"); 642 626 return false; 643 627 } … … 647 631 if (fits_set_hcomp_scale(fits->fd, scale, &status)) { 648 632 fits_set_compression_type(fits->fd, 0x0, &status); 649 char fitsErr[MAX_STRING_LENGTH]; 650 fits_get_errstatus(status, fitsErr); 651 psError(PS_ERR_BAD_FITS, true, 652 "Error while configuring compression. CFITSIO error: %s", fitsErr); 633 psError(PS_ERR_BAD_FITS, status, "Error while configuring compression"); 653 634 return false; 654 635 } 655 636 if (fits_set_hcomp_smooth(fits->fd, smooth, &status)) { 656 637 fits_set_compression_type(fits->fd, 0x0, &status); 657 char fitsErr[MAX_STRING_LENGTH]; 658 fits_get_errstatus(status, fitsErr); 659 psError(PS_ERR_BAD_FITS, true, 660 "Error while configuring compression. CFITSIO error: %s", fitsErr); 638 psError(PS_ERR_BAD_FITS, status, "Error while configuring compression"); 661 639 return false; 662 640 } -
trunk/psLib/src/fits/psFits.h
r16185 r19035 4 4 * @author Robert DeSonia, MHPCC 5 5 * 6 * @version $Revision: 1.3 6$ $Name: not supported by cvs2svn $7 * @date $Date: 2008-0 1-23 03:08:03 $6 * @version $Revision: 1.37 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2008-08-12 22:54:53 $ 8 8 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii 9 9 */ … … 130 130 #endif // ifdef DOXYGEN 131 131 132 /// dump the full CFITSIO error stack 133 #ifdef DOXYGEN 134 bool psFitsDumpErrors( 135 psErrorCode code, ///< psLib code to use 136 const char *message, ///< printf-style format of header line 137 ... ///< any parameters required in format 138 ); 139 #else // ifdef DOXYGEN 140 bool p_psFitsDumpErrors( 141 const char* filename, ///< file name 142 unsigned int lineno, ///< line number in file 143 const char* func, ///< function name 144 psErrorCode code, ///< psLib code to use 145 const char *message, ///< printf-style format of header line 146 ... ///< any parameters required in format 147 ) PS_ATTR_FORMAT(printf, 5, 6); 148 #ifndef SWIG 149 #define psFitsDumpErrors(CODE,...) \ 150 p_psFitsDumpErrors(__FILE__,__LINE__,__func__,CODE,__VA_ARGS__) 151 #endif // ifndef SWIG 152 #endif // ifdef DOXYGEN 132 153 133 154 /** Creates a new FITS options struct
Note:
See TracChangeset
for help on using the changeset viewer.
