Changeset 458
- Timestamp:
- Apr 19, 2004, 11:28:12 AM (22 years ago)
- File:
-
- 1 edited
-
trunk/archive/pslib/src/Metadata/metadata.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/archive/pslib/src/Metadata/metadata.c
r446 r458 51 51 ) 52 52 { 53 va_list ap; 54 va_start(ap, name); 55 56 psMetadataItem *mi = psVMetadataItemAlloc(typeFlags, data, comment, name, ap); 57 58 va_end(ap); 59 60 return mi; 61 } 62 63 psMetadataItem *psVMetadataItemAlloc( 64 int typeFlags, // type of this piece of metadata + flags 65 const void *data, // value of new item 66 const char *comment, // comment associated with item; may be NULL 67 const char *name, // name of new item of metadata (may be an sprintf format) 68 va_list ap // possible arguments for name format 69 ) 70 { 53 71 const psMetadataType type = typeFlags & PS_META_TYPE_MASK; // the type part of typeFlags 54 72 psMetadataFlags flags = typeFlags & ~PS_META_TYPE_MASK; // the flags part of typeFlags … … 77 95 static char tmp[201]; // should be enough; we won't overflow even if it isn't 78 96 79 va_list ap;80 va_start(ap, name);81 97 if(vsnprintf(tmp, sizeof(tmp), name, ap) > sizeof(tmp) - 1) { 82 98 psTrace("metadata.name", 1, "Keyword \"%s\" was truncated to \"%s\" upon expansion\n", name, tmp); 83 99 } 84 va_end(ap);85 100 86 101 name = tmp; … … 169 184 * Add an new psMetadataItem to a psMetadata 170 185 */ 171 psMetadataItem *psMetadataAppend (psMetadata *restrict ms, psMetadataItem *restrict item)186 psMetadataItem *psMetadataAppendItem(psMetadata *restrict ms, psMetadataItem *restrict item) 172 187 { 173 188 psMetadataItem *meta = NULL; // an item of metadata … … 180 195 psMetadataItem *head = meta; 181 196 if (head == NULL) { // this is the first item of this name 182 head = psMetadataAppend(ms, psMetadataItemAlloc(PS_META_ITEM_SET, NULL, NULL, item->name));197 head = psMetadataAppend(ms, PS_META_ITEM_SET, NULL, NULL, item->name); 183 198 } 184 199 … … 218 233 return item; 219 234 } 235 236 /************************************************************************************************************/ 237 /* 238 * Convenience wrapper for psMetadataAppend() 239 */ 240 psMetadataItem *psMetadataAppend(psMetadata *restrict md, ///< Metadata to add to 241 int typeFlags, ///< type of this piece of metadata + flags 242 const void *val, ///< value of new item N.b. a pointer even if the item 243 ///< is of type e.g. int 244 const char *comment, ///< comment associated with item 245 const char *name, ///< name of new item of metadata (may be in sprintf 246 ///< format) 247 ... ///< possible arguments for name format 248 ) 249 { 250 va_list ap; 251 va_start(ap, name); 252 253 psMetadataItem *mi = psVMetadataItemAlloc(typeFlags, val, comment, name, ap); 254 255 va_end(ap); 256 257 return psMetadataAppendItem(md, mi); 258 } 259 220 260 221 261 /*****************************************************************************/ … … 375 415 for (int i = 0; i < 10; i += 5) { 376 416 float sqrti = sqrt(i); 377 psMetadataAppend(ms, psMetadataItemAlloc(PS_META_INT, &i, NULL, "const.%d", i)); 378 psMetadataAppend(ms, psMetadataItemAlloc(PS_META_FLOAT, &sqrti, "square root", "const.sqrt%d", i)); 379 } 380 psMetadataAppend(ms, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE, 381 "Bonjour", "French", "lang.hello")); 382 psMetadataAppend(ms, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE, 383 "Aloha", "Hawaiian", "lang.hello")); 384 psMetadataAppend(ms, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE, 385 "Good Morning", "English", "lang.hello")); 417 psMetadataAppend(ms, PS_META_INT, &i, NULL, "const.%d", i); 418 psMetadataAppend(ms, PS_META_FLOAT, &sqrti, "square root", "const.sqrt%d", i); 419 } 420 psMetadataAppend(ms, PS_META_STR | PS_META_NON_UNIQUE, "Bonjour", "French", "lang.hello"); 421 psMetadataAppend(ms, PS_META_STR | PS_META_NON_UNIQUE, "Aloha", "Hawaiian", "lang.hello"); 422 psMetadataAppend(ms, PS_META_STR | PS_META_NON_UNIQUE, "Good Morning", "English", "lang.hello"); 386 423 /* 387 424 * Print all metadata starting "lang"
Note:
See TracChangeset
for help on using the changeset viewer.
