Changeset 6195
- Timestamp:
- Jan 25, 2006, 2:46:54 PM (20 years ago)
- Location:
- trunk/psLib
- Files:
-
- 2 edited
-
src/types/psMetadata.c (modified) (2 diffs)
-
test/types/tst_psMetadata_07.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/types/psMetadata.c
r6189 r6195 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1.9 5$ $Name: not supported by cvs2svn $15 * @date $Date: 2006-01-2 5 03:02:47$14 * @version $Revision: 1.96 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2006-01-26 00:46:54 $ 16 16 * 17 17 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 324 324 out = psMetadataAlloc(); 325 325 } 326 psMetadataItem *item = NULL;326 // psMetadataItem *item = NULL; 327 327 psMetadataIterator *iter = NULL; 328 328 iter = psMetadataIteratorAlloc(*(psMetadata**)&in, PS_LIST_HEAD, NULL); 329 item = psMetadataGetAndIncrement(iter); 330 while (item != NULL) { 331 psMetadataAddItem(out, item, PS_LIST_TAIL, 0); 329 /* 332 330 item = psMetadataGetAndIncrement(iter); 333 } 334 psFree(item); 331 while (item != NULL) { 332 psMetadataAddItem(out, item, PS_LIST_TAIL, 0); 333 item = psMetadataGetAndIncrement(iter); 334 } 335 psFree(item); 336 psFree(iter); 337 return out; 338 */ 339 psMetadataItem *inItem = NULL; 340 unsigned long numPointers = 0; // Number of pointers we were forced to copy 341 while ((inItem = psMetadataGetAndIncrement(iter))) { 342 // Need to look for MULTI, which won't be picked up using the iterator. 343 psMetadataItem *multiCheckItem = psMetadataLookup(in, inItem->name); 344 unsigned int flag = PS_META_REPLACE; // Flag to indicate MULTI; otherwise, replace 345 if (multiCheckItem->type == PS_DATA_METADATA_MULTI) { 346 psTrace(__func__, 10, "MULTI: %s (%s)\n", inItem->name, inItem->comment); 347 flag = PS_DATA_METADATA_MULTI; 348 } 349 psTrace(__func__, 5, "Copying %s (%s)...\n", inItem->name, inItem->comment); 350 351 352 // case PS_TYPE_##NAME: 353 #define PS_METADATA_COPY_CASE(NAME,TYPE) \ 354 case PS_DATA_##NAME: \ 355 if (! psMetadataAdd(out, PS_LIST_TAIL, inItem->name, \ 356 PS_DATA_##NAME | flag, inItem->comment, inItem->data.TYPE)) { \ 357 psErrorStackPrint(stderr, "Error copying %s (%s) in the metadata\n", \ 358 inItem->name, inItem->comment); \ 359 } \ 360 break; 361 362 switch (inItem->type) { 363 // Numerical types 364 PS_METADATA_COPY_CASE(BOOL,B); 365 // PS_METADATA_COPY_CASE(S8,S8); 366 // PS_METADATA_COPY_CASE(S16,S16); 367 PS_METADATA_COPY_CASE(S32,S32); 368 // PS_METADATA_COPY_CASE(U8,U8); 369 // PS_METADATA_COPY_CASE(U16,U16); 370 // PS_METADATA_COPY_CASE(U32,U32); 371 PS_METADATA_COPY_CASE(F32,F32); 372 PS_METADATA_COPY_CASE(F64,F64); 373 374 case PS_DATA_VECTOR: { 375 psVector *vecCopy = psVectorCopy(NULL, (psVector*)(inItem->data.V), 376 ((psVector*)(inItem->data.V))->type.type); 377 if (vecCopy == NULL) { 378 psError(PS_ERR_BAD_PARAMETER_NULL, false, 379 "Error copying vector. Vector skipped.\n"); 380 } else { 381 psMetadataAddVector(out, PS_LIST_TAIL, inItem->name, flag, 382 inItem->comment, vecCopy); 383 psFree(vecCopy); 384 } 385 break; 386 } 387 case PS_DATA_TIME: { 388 psTime *timeCopy = p_psTimeCopy( (psTime*)(inItem->data.V) ); 389 if (timeCopy == NULL) { 390 psError(PS_ERR_BAD_PARAMETER_NULL, false, 391 "Error copying time. Time skipped.\n"); 392 } else { 393 psMetadataAddTime(out, PS_LIST_TAIL, inItem->name, flag, 394 inItem->comment, timeCopy); 395 psFree(timeCopy); 396 } 397 break; 398 } 399 // String: relying on the fact that this will copy the string, not point at it. 400 case PS_DATA_STRING: 401 psMetadataAdd(out, PS_LIST_TAIL, inItem->name, PS_DATA_STRING | 402 flag, inItem->comment, inItem->data.V); 403 break; 404 // Metadata: copy the next level and stuff that in too 405 case PS_DATA_METADATA: { 406 psMetadata *metadata = psMetadataCopy(NULL, inItem->data.md); 407 psMetadataAdd(out, PS_LIST_TAIL, inItem->name, 408 PS_DATA_METADATA | flag, inItem->comment, metadata); 409 psFree(metadata); 410 break; 411 } 412 // Other kinds of pointers 413 default: 414 numPointers++; 415 psTrace(__func__, 10, "Copying a pointer in the metadata: %x\n", inItem->type); 416 psMetadataAdd(out, PS_LIST_TAIL, inItem->name, inItem->type | flag, 417 inItem->comment, inItem->data.V); 418 break; 419 } 420 } 335 421 psFree(iter); 422 423 if (numPointers > 0) { 424 psLogMsg(__func__, PS_LOG_WARN, 425 "Forced to copy %d pointers when copying metadata. Updating the " 426 "copied psMetadata will affect the original!\n", numPointers); 427 } 428 336 429 return out; 337 430 } -
trunk/psLib/test/types/tst_psMetadata_07.c
r6190 r6195 16 16 * @author David Robbins, MHPCC 17 17 * 18 * @version $Revision: 1.1 8$ $Name: not supported by cvs2svn $19 * @date $Date: 2006-01-2 5 22:18:00$18 * @version $Revision: 1.19 $ $Name: not supported by cvs2svn $ 19 * @date $Date: 2006-01-26 00:46:54 $ 20 20 * 21 21 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 291 291 psMetadata *md = setupMeta(); 292 292 293 294 293 //Return NULL for NULL input Metadata 295 294 test = psMetadataCopy(test, empty); 295 if (test != NULL) { 296 psError(PS_ERR_BAD_PARAMETER_VALUE, false, 297 "psMetadataCopy failed to return NULL for NULL input metadata.\n"); 298 psFree(md); 299 return 1; 300 } 296 301 297 302 //Return a copy in of md in test 298 test = psMetadataCopy( test, md);303 test = psMetadataCopy(NULL, md); 299 304 //Check if contents are the same 300 305 psMetadataItem *testItem = NULL; … … 307 312 mdItem = psMetadataGetAndIncrement(mdIterator); 308 313 while (testItem != NULL || mdItem != NULL ) { 309 if (testItem != mdItem) {310 psError(PS_ERR_BAD_PARAMETER_VALUE, false,311 "Copied psMetadataItem does not match Original.\n");312 }313 314 testItem = psMetadataGetAndIncrement(testIterator); 314 315 mdItem = psMetadataGetAndIncrement(mdIterator); 315 316 } 317 318 if (!psMetadataConfigWrite(md, "MDCopy.in") ) { 319 psError(PS_ERR_BAD_PARAMETER_VALUE, false, 320 "psMetadataConfigWrite failed to output original metadata contents.\n"); 321 return 3; 322 } 323 if (!psMetadataConfigWrite(test, "MDCopy.out") ) { 324 psError(PS_ERR_BAD_PARAMETER_VALUE, false, 325 "psMetadataConfigWrite failed to output copied metadata contents.\n"); 326 return 4; 327 } 328 FILE *verified; 329 FILE *output; 330 verified = fopen("MDCopy.in", "r"); 331 output = fopen("MDCopy.out", "r"); 332 char buffer1[100]; 333 char buffer2[100]; 334 while ( fscanf(verified, "%s", buffer1) != EOF ) { 335 if (fscanf(output, "%s", buffer2) == EOF) { 336 psError(PS_ERR_BAD_PARAMETER_SIZE, false, 337 "Copied metadata is smaller than the original.\n"); 338 return 5; 339 } 340 if (strncmp(buffer1, buffer2, 100) ) { 341 psError(PS_ERR_BAD_PARAMETER_VALUE, false, 342 "Copied metadata contents do not match original metadata contents.\n"); 343 return 6; 344 } 345 } 346 if (fscanf(output, "%s", buffer2) != EOF) { 347 psError(PS_ERR_BAD_PARAMETER_SIZE, false, 348 "Copied metadata is larger than the original.\n"); 349 return 7; 350 } 351 fclose(verified); 352 fclose(output); 353 316 354 317 355 psFree(testItem);
Note:
See TracChangeset
for help on using the changeset viewer.
