Changeset 14785
- Timestamp:
- 06/28/08 19:36:56 (5 months ago)
- Files:
-
- trunk/gdal/port/cpl_minixml.cpp (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/gdal/port/cpl_minixml.cpp
r14693 r14785 60 60 } XMLTokenType; 61 61 62 typedef struct 63 { 64 CPLXMLNode *psFirstNode; 65 CPLXMLNode *psLastChild; 66 } StackContext; 67 62 68 typedef struct { 63 69 const char *pszInput; … … 72 78 int nStackMaxSize; 73 79 int nStackSize; 74 CPLXMLNode **papsStack;80 StackContext *papsStack; 75 81 76 82 CPLXMLNode *psFirstNode; 83 CPLXMLNode *psLastNode; 77 84 } ParseContext; 78 85 … … 441 448 { 442 449 psContext->nStackMaxSize += 10; 443 psContext->papsStack = ( CPLXMLNode **)450 psContext->papsStack = (StackContext *) 444 451 CPLRealloc(psContext->papsStack, 445 sizeof(CPLXMLNode*) * psContext->nStackMaxSize); 446 } 447 448 psContext->papsStack[psContext->nStackSize++] = psNode; 452 sizeof(StackContext) * psContext->nStackMaxSize); 453 } 454 455 psContext->papsStack[psContext->nStackSize].psFirstNode = psNode; 456 psContext->papsStack[psContext->nStackSize].psLastChild = NULL; 457 psContext->nStackSize ++; 449 458 } 450 459 … … 461 470 { 462 471 if( psContext->psFirstNode == NULL ) 472 { 463 473 psContext->psFirstNode = psNode; 474 psContext->psLastNode = psNode; 475 } 464 476 else if( psContext->nStackSize == 0 ) 465 477 { 466 CPLXMLNode *psSibling; 467 468 psSibling = psContext->psFirstNode; 469 while( psSibling->psNext != NULL ) 470 psSibling = psSibling->psNext; 471 psSibling->psNext = psNode; 472 } 473 else if( psContext->papsStack[psContext->nStackSize-1]->psChild == NULL ) 474 { 475 psContext->papsStack[psContext->nStackSize-1]->psChild = psNode; 478 psContext->psLastNode->psNext = psNode; 479 psContext->psLastNode = psNode; 480 } 481 else if( psContext->papsStack[psContext->nStackSize-1].psFirstNode->psChild == NULL ) 482 { 483 psContext->papsStack[psContext->nStackSize-1].psFirstNode->psChild = psNode; 484 psContext->papsStack[psContext->nStackSize-1].psLastChild = psNode; 476 485 } 477 486 else 478 487 { 479 CPLXMLNode *psSibling; 480 481 psSibling = psContext->papsStack[psContext->nStackSize-1]->psChild; 482 while( psSibling->psNext != NULL ) 483 psSibling = psSibling->psNext; 484 psSibling->psNext = psNode; 488 psContext->papsStack[psContext->nStackSize-1].psLastChild->psNext = psNode; 489 psContext->papsStack[psContext->nStackSize-1].psLastChild = psNode; 485 490 } 486 491 } … … 542 547 sContext.papsStack = NULL; 543 548 sContext.psFirstNode = NULL; 549 sContext.psLastNode = NULL; 544 550 545 551 /* ensure token is initialized */ … … 577 583 if( sContext.nStackSize == 0 578 584 || !EQUAL(sContext.pszToken+1, 579 sContext.papsStack[sContext.nStackSize-1] ->pszValue) )585 sContext.papsStack[sContext.nStackSize-1].psFirstNode->pszValue) ) 580 586 { 581 587 CPLError( CE_Failure, CPLE_AppDefined, … … 676 682 break; 677 683 } 678 else if( sContext.papsStack[sContext.nStackSize-1] ->pszValue[0] != '?' )684 else if( sContext.papsStack[sContext.nStackSize-1].psFirstNode->pszValue[0] != '?' ) 679 685 { 680 686 CPLError( CE_Failure, CPLE_AppDefined, … … 741 747 "Parse error at EOF, not all elements have been closed,\n" 742 748 "starting with %.500s\n", 743 sContext.papsStack[sContext.nStackSize-1] ->pszValue );749 sContext.papsStack[sContext.nStackSize-1].psFirstNode->pszValue ); 744 750 } 745 751 … … 755 761 CPLDestroyXMLNode( sContext.psFirstNode ); 756 762 sContext.psFirstNode = NULL; 763 sContext.psLastNode = NULL; 757 764 } 758 765
