Commit d4cf5f7d53f1f202fa767c1f9ec57c85c2b7d72f

Authored by Jürgen Knödlseder
1 parent 4ffbfa5a

Handle non-existing extension name in GFits::open().

src/fits/GFits.cpp
@@ -1039,18 +1039,30 @@ void GFits::open(const GFilename& filename, const bool& create) @@ -1039,18 +1039,30 @@ void GFits::open(const GFilename& filename, const bool& create)
1039 int status = 0; 1039 int status = 0;
1040 status = __ffopen(FHANDLE(m_fitsfile), std::string(filename).c_str(), 1, &status); 1040 status = __ffopen(FHANDLE(m_fitsfile), std::string(filename).c_str(), 1, &status);
1041 1041
1042 - // If failed then try opening as readonly  
1043 - if (status == 104 || status == 112) { 1042 + // If failed then try opening as readonly.
  1043 + //
  1044 + // Possible error codes are:
  1045 + // 104: FILE_NOT_OPENED (could not open the named file)
  1046 + // 107: END_OF_FILE (tried to move past end of file, occurs if extname is invalid)
  1047 + // 112: READONLY_FILE (cannot write to readonly file)
  1048 + if (status == 104 || status == 107 || status == 112) {
1044 status = 0; 1049 status = 0;
1045 status = __ffopen(FHANDLE(m_fitsfile), std::string(filename).c_str(), 0, &status); 1050 status = __ffopen(FHANDLE(m_fitsfile), std::string(filename).c_str(), 0, &status);
1046 m_readwrite = false; 1051 m_readwrite = false;
1047 } 1052 }
1048 1053
1049 // If failed and if we are allowed to create a new FITS file then create 1054 // If failed and if we are allowed to create a new FITS file then create
1050 - // FITS file now  
1051 - if (create && status == 104) { 1055 + // FITS file now. We pass the URL as filename since we want to create a
  1056 + // fresh file without any extension. We also remove any file before in
  1057 + // case that file exists but is not a FITS file.
  1058 + //
  1059 + // Possible error codes are:
  1060 + // 104: FILE_NOT_OPENED (could not open the named file)
  1061 + // 107: END_OF_FILE (tried to move past end of file, occurs if extname is invalid)
  1062 + if (create && (status == 104 || status == 107)) {
  1063 + filename.remove();
1052 status = 0; 1064 status = 0;
1053 - status = __ffinit(FHANDLE(m_fitsfile), std::string(filename).c_str(), &status); 1065 + status = __ffinit(FHANDLE(m_fitsfile), filename.url().c_str(), &status);
1054 m_readwrite = true; 1066 m_readwrite = true;
1055 m_created = true; 1067 m_created = true;
1056 } 1068 }
test/test_GObservation.cpp
@@ -262,12 +262,6 @@ void TestGObservation::test_ebounds(void) @@ -262,12 +262,6 @@ void TestGObservation::test_ebounds(void)
262 ***************************************************************************/ 262 ***************************************************************************/
263 void TestGObservation::test_gti(void) 263 void TestGObservation::test_gti(void)
264 { 264 {
265 - // Remove test files  
266 - GFilename file1("test_gti1.fits");  
267 - GFilename file2("test_gti2.fits");  
268 - file1.remove();  
269 - file2.remove();  
270 -  
271 // Test void constructor 265 // Test void constructor
272 test_try("Void constructor"); 266 test_try("Void constructor");
273 try { 267 try {