IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 9, 2006, 3:04:45 PM (20 years ago)
Author:
magnier
Message:

fleshing out support for detselect

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/camera/pmFPAfileIO.c

    r8879 r9437  
    3636
    3737    bool status;
    38     char *extra;
    3938    char *mode = NULL;
    4039    char *readMode = "r";
     
    7675    // indirect filenames
    7776    if (!strcasecmp (file->filename, "@FILES")) {
     77        char *extra = pmFPAfileNameFromRule (file->filextra, file, view);
     78        if (extra == NULL) {
     79            psError(PS_ERR_IO, false, "error converting extrule to name %s\n", file->extrule);
     80            return false;
     81        }
     82
    7883        psFree (file->filename);
    79         extra = pmFPAfileNameFromRule (file->filextra, file, view);
    8084        file->filename = psMetadataLookupStr (&status, file->names, extra);
    81         psFree (extra);
     85
    8286        if (file->filename == NULL) {
    8387            psError(PS_ERR_IO, true, "filename lookup error (@FILES) for %s : %s\n", file->filextra, extra);
     88            psFree (extra);
    8489            return false;
    8590        }
    8691        // psMetadataLookupStr just returns a view, file->filename must be protected
    8792        psMemIncrRefCounter (file->filename);
    88     }
     93        psFree (extra);
     94    }
     95
     96    // get name from detrend database
     97    // extrule expands to yield the class_id
     98    // filextra contains the desired -det_id detID -iteration iter string
    8999    if (!strcasecmp (file->filename, "@DETDB")) {
     100        char *extra = pmFPAfileNameFromRule (file->extrule, file, view);
     101        if (extra == NULL) {
     102            psError(PS_ERR_IO, false, "error converting extrule to name %s\n", file->extrule);
     103            return false;
     104        }
     105        psTrace ("pmFPAfile", 6, "looking for detrend (%s, %s)\n", file->filextra, extra);
     106
    90107        psFree (file->filename);
    91         extra = pmFPAfileNameFromRule (file->extrule, file, view);
    92         psTrace ("pmFPAfile", 6, "looking for detrend (%s, %s)\n", file->filextra, extra);
     108
    93109        file->filename = pmDetrendFile (file->filextra, extra);
     110        if (file->filename == NULL) {
     111            psError(PS_ERR_IO, false, "failed to find a valid detrend image for detID %s : classID %s\n", file->filextra, extra);
     112            psFree (extra);
     113            return false;
     114        }
     115
     116        // XXXX this is very ad-hoc
     117        // XXXX prepend the value config[WORKDIR] to the filename...
     118        char *workdir = psMetadataLookupStr (NULL, config->site, "WORKDIR");
     119        if (workdir) {
     120            psStringPrepend (&file->filename, "%s/", workdir);
     121        }
     122
    94123        psTrace ("pmFPAfile", 6, "got detrend file %s\n", file->filename);
    95124        psFree (extra);
    96         if (file->filename == NULL) {
    97             psError(PS_ERR_IO, true, "filename lookup error (@DETBD) for %s : %s\n", file->filextra, extra);
    98             return false;
    99         }
    100125    }
    101126    // if () "neb://" -> get from neb...
     
    571596    PS_ASSERT_PTR_NON_NULL(view, false);
    572597
    573     bool status = true;
    574598    psMetadata *files = config->files;
    575599
    576     // attempt to perform all create, read, write
     600    // attempt to perform all create, read, write, close operations
    577601    psMetadataItem *item = NULL;
    578602    psMetadataIterator *iter = psMetadataIteratorAlloc (files, PS_LIST_HEAD, NULL);
     
    584608            if (!pmFPAfileRead (file, view, config)) {
    585609                psError(PS_ERR_IO, false, "failed READ in FPA_BEFORE block for %s", file->name);
    586                 status = false;
     610                goto failure;
    587611            }
    588612            if (!pmFPAfileCreate(file, view)) {
    589613                psError(PS_ERR_IO, false, "failed CREATE in FPA_BEFORE block for %s", file->name);
    590                 status = false;
     614                goto failure;
    591615            }
    592616            break;
     
    594618            if (!pmFPAfileWrite (file, view, config)) {
    595619                psError(PS_ERR_IO, false, "failed WRITE in FPA_AFTER block for %s", file->name);
    596                 status = false;
     620                goto failure;
    597621            }
    598622            if (!pmFPAfileClose(file, view)) {
    599623                psError(PS_ERR_IO, false, "failed CLOSE in FPA_AFTER block for %s", file->name);
    600                 status = false;
     624                goto failure;
    601625            }
    602626            break;
     
    617641            if (!pmFPAfileFreeData(file, view)) {
    618642                psError(PS_ERR_IO, false, "failed FREE in FPA_AFTER block for %s", file->name);
    619                 status = false;
     643                goto failure;
    620644            }
    621645            break;
     
    625649    }
    626650    psFree (iter);
    627     return status;
    628 }
    629 
     651    return true;
     652
     653failure:
     654    psFree (iter);
     655    return false;
     656}
     657
Note: See TracChangeset for help on using the changeset viewer.