IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 18713


Ignore:
Timestamp:
Jul 24, 2008, 12:38:14 PM (18 years ago)
Author:
Paul Price
Message:

We may write to a header already containing the MSKNAM, etc, values.
In that case, we don't want to simply overwrite with PS_META_REPLACE,
but we want to get rid of everything and start over (in case the
definitions have changed, and the number of elements is different).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/config/pmConfigMask.c

    r18651 r18713  
    138138}
    139139
     140// Remove from the header keywords starting with the provided string
     141static int maskRemoveHeader(psMetadata *header, // Header from which to remove keywords
     142                            const char *start // Remove keywords that start with this string
     143                            )
     144{
     145    psString regex = NULL;              // Regular expression for keywords
     146    psStringAppend(&regex, "^%s[0-9][0-9]", start);
     147    psMetadataIterator *iter = psMetadataIteratorAlloc(header, PS_LIST_HEAD, regex); // Iterator
     148    psFree(regex);
     149    psMetadataItem *item;               // Item from iteration
     150    int num = 0;                        // Number of items removed
     151    while ((item = psMetadataGetAndIncrement(iter))) {
     152        psMetadataRemoveKey(header, item->name);
     153        num++;
     154    }
     155    psFree(iter);
     156    return num;
     157}
     158
     159
    140160// write the named mask bits to the header
    141161bool pmConfigMaskWriteHeader(const pmConfig *config, psMetadata *header)
     
    143163    PS_ASSERT_PTR_NON_NULL(config, false);
    144164    PS_ASSERT_METADATA_NON_NULL(header, false);
     165
     166    maskRemoveHeader(header, "MSKNAM");
     167    maskRemoveHeader(header, "MSKVAL");
     168    if (psMetadataLookup(header, "MSKNUM")) {
     169        psMetadataRemoveKey(header, "MSKNUM");
     170    }
    145171
    146172    char namekey[80];
     
    168194        }
    169195
    170         snprintf (namekey,  64, "MSKNAM%02d", nMask);
    171         snprintf (valuekey, 64, "MSKVAL%02d", nMask);
    172 
    173         psMetadataAddStr (header, PS_LIST_TAIL, namekey, 0, "Bitmask bit name", item->name);
    174         psMetadataAddU8 (header, PS_LIST_TAIL, valuekey, 0, "Bitmask bit value", item->data.U8);
    175         nMask ++;
    176     }
    177 
    178     psMetadataAddS32 (header, PS_LIST_TAIL, "MSKNUM", 0, "Bitmask bit count", nMask);
     196        snprintf(namekey,  64, "MSKNAM%02d", nMask);
     197        snprintf(valuekey, 64, "MSKVAL%02d", nMask);
     198
     199        psMetadataAddStr(header, PS_LIST_TAIL, namekey, 0, "Bitmask bit name", item->name);
     200        psMetadataAddU8(header, PS_LIST_TAIL, valuekey, 0, "Bitmask bit value", item->data.U8);
     201        nMask++;
     202    }
     203
     204    psMetadataAddS32(header, PS_LIST_TAIL, "MSKNUM", 0, "Bitmask bit count", nMask);
    179205    return true;
    180206}
Note: See TracChangeset for help on using the changeset viewer.