IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 11358


Ignore:
Timestamp:
Jan 29, 2007, 7:34:15 AM (19 years ago)
Author:
magnier
Message:

fixed SEPARATE TIME concept and related leaks/double frees

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/concepts/pmConceptsStandard.c

    r11148 r11358  
    429429
    430430    // Work out how the time is represented
     431    bool separateTime = false;
    431432    bool usaTime = false;               // Is the time specified in USA (MM-DD-YYYY) order?
    432433    bool backwardsTime = false;         // Is the time specified in backwards (DD-MM-YYYY) order?
     
    454455    psListIterator *timeFormatsIter = psListIteratorAlloc(timeFormats, PS_LIST_HEAD, false); // Iter
    455456    while ((timeFormat = psListGetAndIncrement(timeFormatsIter))) {
    456         if (strcasecmp(timeFormat, "USA") == 0) {
     457        if (strcasecmp(timeFormat, "SEPARATE") == 0) {
     458            separateTime = true;
     459        } else if (strcasecmp(timeFormat, "USA") == 0) {
    457460            usaTime = true;
    458461            backwardsTime = false;
     
    500503    switch (concept->type) {
    501504    case PS_DATA_LIST: {
     505            if (!separateTime) {
     506                psWarning ("DATE and TIME stored separately, but not specified in format\n");
     507            }
    502508            // The date and time are stored separately
    503509            // Assume the date is first and the time second
     
    836842    bool jdTime = false;                // Is the date stored as a JD?
    837843    bool mjdTime = false;               // Is the date stored as a MJD?
     844    bool yearFirst = false;
    838845
    839846    bool mdok = true;                   // Status of MD lookup
     
    847854                if (strcasecmp(format, "SEPARATE") == 0) {
    848855                    separateTime = true;
    849                 } else if (strcasecmp(format, "PRE2000") == 0) {
    850                     pre2000Time = true;
     856                } else if (strcasecmp(format, "USA") == 0) {
     857                    usaTime = true;
     858                    backwardsTime = false;
     859                    jdTime = false;
     860                    mjdTime = false;
    851861                } else if (strcasecmp(format, "BACKWARDS") == 0) {
    852862                    backwardsTime = true;
     
    854864                    mjdTime = false;
    855865                    jdTime = false;
    856                 } else if (strcasecmp(format, "USA") == 0) {
    857                     usaTime = true;
     866                } else if (strcasecmp(format, "YEAR.FIRST") == 0) {
     867                    yearFirst = true;
     868                    usaTime = false;
    858869                    backwardsTime = false;
    859870                    jdTime = false;
    860871                    mjdTime = false;
     872                } else if (strcasecmp(format, "PRE2000") == 0) {
     873                    pre2000Time = true;
     874                } else if (strcasecmp(format, "MJD") == 0) {
     875                    mjdTime = true;
     876                    usaTime = false;
     877                    backwardsTime = false;
     878                    jdTime = false;
     879                    separateTime = false;
    861880                } else if (strcasecmp(format, "JD") == 0) {
    862881                    jdTime = true;
     
    864883                    backwardsTime = false;
    865884                    mjdTime = false;
    866                     separateTime = false;
    867                 } else if (strcasecmp(format, "MJD") == 0) {
    868                     mjdTime = true;
    869                     usaTime = false;
    870                     backwardsTime = false;
    871                     jdTime = false;
    872885                    separateTime = false;
    873886                } else {
     
    896909        }
    897910        if (backwardsTime) {
    898             psError(PS_ERR_UNKNOWN, true, "You want it BACKWARDS?  Not right now, thanks.\n");
    899             return NULL;
     911            int day, month, year;
     912            psTrace ("psModules.concepts", 5, "ISO time has year first, convert to DD-MM-YYYY");
     913            sscanf (dateString, "%d-%d-%d", &year, &month, &day);
     914            sprintf (dateString, "%02d-%02d-%04d", day, month, year);
     915            // XXX fix this for str length
    900916        }
    901917        if (usaTime) {
    902             psError(PS_ERR_UNKNOWN, true, "USA?  No OK.\n");
    903             return NULL;
     918            int day, month, year;
     919            psTrace ("psModules.concepts", 5, "ISO time has year first, convert to MM-DD-YYYY");
     920            sscanf (dateString, "%d-%d-%d", &year, &month, &day);
     921            sprintf (dateString, "%02d-%02d-%04d", month, day, year);
     922            // XXX fix this for str length
     923        }
     924        if (yearFirst) {
     925            psTrace ("psModules.concepts", 5, "ISO time has year first, no adjustment needed");
    904926        }
    905927
     
    908930        psMetadataItem *timeItem = psMetadataItemAllocStr(concept->name, "The time of observation",
    909931                                   timeString);
    910         psFree(dateString);
    911         psFree(timeString);
    912932
    913933        psListRemove(dateTime, PS_LIST_HEAD);
    914934        psListRemove(dateTime, PS_LIST_HEAD);
     935
    915936        psListAdd(dateTime, PS_LIST_HEAD, dateItem);
    916937        psListAdd(dateTime, PS_LIST_TAIL, timeItem);
     
    918939        psMetadataItem *item = psMetadataItemAllocPtr(concept->name, PS_DATA_LIST, concept->comment,
    919940                               dateTime);
     941        psFree (dateItem);
     942        psFree (timeItem);
     943        psFree (dateTime);
    920944        return item;
    921945    }
Note: See TracChangeset for help on using the changeset viewer.