Changeset 6190 for trunk/psLib/src/types
- Timestamp:
- Jan 25, 2006, 12:18:00 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/types/psMetadataConfig.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/types/psMetadataConfig.c
r6189 r6190 10 10 * @author Eric Van Alst, MHPCC 11 11 * 12 * @version $Revision: 1.5 0$ $Name: not supported by cvs2svn $13 * @date $Date: 2006-01-25 03:02:47$12 * @version $Revision: 1.51 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2006-01-25 22:18:00 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 1221 1221 } 1222 1222 1223 1224 /* 1223 1225 psString psMetadataConfigFormat(psMetadata *md) 1224 1226 { 1225 1227 PS_ASSERT_PTR_NON_NULL(md, NULL); 1226 1228 1227 1229 psString newString = NULL; 1228 1230 psString newStr = NULL; … … 1238 1240 strcpy(content, "\0"); 1239 1241 strcpy(mdString, "\0"); 1240 1242 1241 1243 while ( (item = psMetadataGetAndIncrement(iter)) ) { 1242 1244 type = item->type; … … 1256 1258 type = PS_DATA_UNKNOWN; 1257 1259 } 1258 1260 1259 1261 switch (type) { 1260 1262 case PS_DATA_BOOL: … … 1343 1345 snprintf(content, MAXSTR, "\n%s METADATA ", item->name); 1344 1346 strncat(mdString, content, MAXSTR); 1345 1347 1346 1348 newStr = psMetadataConfigFormat(item->data.md); 1347 1349 strncpy(buffer, (char *)newStr, MAXSTR); … … 1379 1381 } 1380 1382 strncat(mdString, content, MAXSTR); 1381 1383 1382 1384 snprintf(content, MAXSTR, "%ld, ", (long)((psTime*)(item->data.V))->sec); 1383 1385 strncat(mdString, content, MAXSTR); … … 1465 1467 return newString; 1466 1468 } 1469 */ 1470 1471 psString psMetadataConfigFormat(psMetadata *md) 1472 { 1473 PS_ASSERT_PTR_NON_NULL(md, NULL); 1474 1475 psString mdString = NULL; 1476 psString content = NULL; 1477 1478 psMetadataItem *item = NULL; 1479 psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); 1480 1481 while ( (item = psMetadataGetAndIncrement(iter)) ) { 1482 if (item == NULL) { 1483 // XXX : this is probably not the right error value 1484 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, PS_DATA_UNKNOWN); 1485 psFree(iter); 1486 return NULL; 1487 } 1488 1489 // In this block, the single item is used to build 'content' 1490 switch (item->type) { 1491 case PS_DATA_BOOL: 1492 psStringAppend (&content, "%s BOOL ", item->name); 1493 if ( item->data.B ) { 1494 psStringAppend(&content, "TRUE"); 1495 } else { 1496 psStringAppend(&content, "FALSE"); 1497 } 1498 if ( item->comment != NULL ) { 1499 psStringAppend(&content, " #%s", item->comment); 1500 } 1501 psStringAppend(&content, " \n", item->comment); 1502 break; 1503 case PS_DATA_S32: 1504 psStringAppend(&content, "%s S32 ", item->name); 1505 psStringAppend(&content, "%d ", item->data.S32); 1506 if ( strncmp(item->comment,"",2) ) { 1507 psStringAppend(&content, " #%s", item->comment); 1508 } 1509 psStringAppend(&content, " \n"); 1510 break; 1511 case PS_DATA_F32: 1512 psStringAppend(&content, "%s F32 ", item->name); 1513 psStringAppend(&content, "%.15g ", item->data.F32); 1514 if ( strncmp(item->comment,"",2) ) { 1515 psStringAppend(&content, " #%s", item->comment); 1516 } 1517 psStringAppend(&content, " \n"); 1518 break; 1519 case PS_DATA_F64: 1520 psStringAppend(&content, "%s F64 ", item->name); 1521 psStringAppend(&content, "%.15g ", item->data.F64); 1522 if ( strncmp(item->comment,"",2) ) { 1523 psStringAppend(&content, " #%s", item->comment); 1524 } 1525 psStringAppend(&content, " \n"); 1526 break; 1527 case PS_DATA_STRING: 1528 psStringAppend(&content, "%s STR ", item->name); 1529 psStringAppend(&content, "%s ", ((char *)(item->data.V))); 1530 if ( strncmp(item->comment,"",2) ) { 1531 psStringAppend(&content, " #%s", item->comment); 1532 } 1533 psStringAppend(&content, " \n"); 1534 break; 1535 case PS_DATA_METADATA: 1536 psStringAppend(&content, "\n%s METADATA ", item->name); 1537 psString newStr = psMetadataConfigFormat(item->data.md); 1538 // XXX need to check for NULL return value, implying error 1539 // from a lower level 1540 1541 // add 3 extra spaces to each metadata folder item 1542 char *buffer2 = strtok(newStr, "\n"); 1543 while( buffer2 != NULL ) { 1544 psStringAppend(&content, "\n %s", buffer2); 1545 buffer2 = strtok(NULL, "\n"); 1546 } 1547 if ( strncmp(item->comment,"",2) ) { 1548 psStringAppend(&content, "\nEND #%s\n\n", item->comment); 1549 } else { 1550 psStringAppend(&content, "\nEND\n\n"); 1551 } 1552 psFree(newStr); 1553 break; 1554 case PS_DATA_TIME: 1555 psStringAppend(&content, "%s ", item->name); 1556 psTime *time = item->data.V; 1557 if ( time->type == PS_TIME_UTC ) 1558 psStringAppend(&content, "PS_TIME_UTC "); 1559 else if ( time->type == PS_TIME_TAI ) 1560 psStringAppend(&content, "PS_TIME_TAI "); 1561 else if ( time->type == PS_TIME_UT1 ) 1562 psStringAppend(&content, "PS_TIME_UT1 "); 1563 else if ( time->type == PS_TIME_TT ) 1564 psStringAppend(&content, "PS_TIME_TT "); 1565 else { 1566 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, time->type); 1567 // XXX memory leak: should free content and mdString before returning 1568 psFree(iter); 1569 return NULL; 1570 } 1571 1572 psStringAppend(&content, "%ld, ", (long)time->sec); 1573 psStringAppend(&content, "%u, ", time->nsec); 1574 if ( time->leapsecond ) 1575 psStringAppend(&content, "T "); 1576 else 1577 psStringAppend(&content, "F "); 1578 if ( strncmp(item->comment,"",2) ) { 1579 psStringAppend(&content, " #%s", item->comment); 1580 } 1581 psStringAppend(&content, " \n"); 1582 break; 1583 case PS_DATA_VECTOR: 1584 psStringAppend(&content, "@%s ", item->name); 1585 psVector *vector = item->data.V; 1586 1587 switch (vector->type.type) { 1588 case PS_DATA_S32: 1589 psStringAppend(&content, "S32 "); 1590 for (int i = 0; i < vector->n; i++) { 1591 psStringAppend(&content, "%d ", vector->data.S32[i]); 1592 } 1593 break; 1594 case PS_DATA_F32: 1595 psStringAppend(&content, "F32 ", MAXSTR); 1596 for (int i = 0; i < vector->n; i++) { 1597 psStringAppend(&content, "%.15g ", vector->data.F32[i]); 1598 } 1599 break; 1600 case PS_DATA_F64: 1601 psStringAppend(&content, "F64 ", MAXSTR); 1602 for (int i = 0; i < vector->n; i++) { 1603 psStringAppend(&content, "%.15g", vector->data.F64[i]); 1604 } 1605 break; 1606 case PS_DATA_UNKNOWN: 1607 default: 1608 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 1609 PS_ERRORTEXT_psMetadata_METATYPE_INVALID, vector->type.type); 1610 psFree(iter); 1611 // XXX memory leak: should free content and mdString before returning 1612 return NULL; 1613 } 1614 if ( strncmp(item->comment,"",2) ) { 1615 psStringAppend(&content, " #%s", item->comment); 1616 } 1617 psStringAppend(&content, " \n"); 1618 break; 1619 case PS_DATA_UNKNOWN: 1620 default: 1621 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 1622 PS_ERRORTEXT_psMetadata_METATYPE_INVALID, item->type); 1623 psFree(iter); 1624 // XXX memory leak: should free content and mdString before returning 1625 return NULL; 1626 } 1627 psStringAppend(&mdString, content); 1628 psFree(content); 1629 content = NULL; 1630 } 1631 psFree(iter); 1632 return mdString; 1633 } 1634 1467 1635 1468 1636 bool psMetadataConfigWrite(psMetadata *md, 1469 1637 const char *filename) 1470 1638 { 1639 PS_ASSERT_PTR_NON_NULL(md, NULL); 1640 PS_ASSERT_PTR_NON_NULL(filename, NULL); 1471 1641 psString fileString = NULL; 1642 fileString = psMetadataConfigFormat(md); 1643 if (fileString == NULL) { 1644 psError(PS_ERR_BAD_PARAMETER_NULL, false, 1645 "psMetadataConfigFormat returned NULL.\n"); 1646 return false; 1647 } 1472 1648 FILE *file; 1473 file = fopen(filename, "w"); 1474 fileString = psMetadataConfigFormat(md); 1649 if ( !(file = fopen(filename, "w")) ) { 1650 psError(PS_ERR_IO, true, 1651 "Failed to open specified file, %s\n", filename); 1652 psFree(fileString); 1653 return false; 1654 } 1475 1655 fprintf(file, "%s", fileString); 1476 1656 fclose(file);
Note:
See TracChangeset
for help on using the changeset viewer.
