| 619 | |
| 620 | |
| 621 | static void writeTreeNode(SHPTreeHandle disktree, treeNodeObj *node) |
| 622 | { |
| 623 | int i,j; |
| 624 | ms_int32 offset; |
| 625 | char *pabyRec = NULL; |
| 626 | |
| 627 | offset = getSubNodeOffset(node); |
| 628 | |
| 629 | pabyRec = msSmallMalloc(sizeof(rectObj) + (3 * sizeof(ms_int32)) + (node->numshapes * sizeof(ms_int32)) ); |
| 630 | |
| 631 | memcpy( pabyRec, &offset, 4); |
| 632 | if( disktree->needswap ) SwapWord( 4, pabyRec ); |
| 633 | |
| 634 | memcpy( pabyRec+4, &node->rect, sizeof(rectObj)); |
| 635 | for (i=0; i < 4; i++) |
| 636 | if( disktree->needswap ) SwapWord( 8, pabyRec+4+(8*i) ); |
| 637 | |
| 638 | memcpy( pabyRec+36, &node->numshapes, 4); |
| 639 | if( disktree->needswap ) SwapWord( 4, pabyRec+36 ); |
| 640 | |
| 641 | j = node->numshapes*sizeof(ms_int32); |
| 642 | memcpy( pabyRec+40, node->ids, j); |
| 643 | for (i=0; i<node->numshapes; i++) |
| 644 | if( disktree->needswap ) SwapWord( 4, pabyRec+40+(4*i)); |
| 645 | |
| 646 | memcpy( pabyRec+j+40, &node->numsubnodes, 4); |
| 647 | if( disktree->needswap ) SwapWord( 4, pabyRec+40+j ); |
| 648 | |
| 649 | fwrite( pabyRec, 44+j, 1, disktree->fp); |
| 650 | free (pabyRec); |
| 651 | |
| 652 | for(i=0; i<node->numsubnodes; i++ ) { |
| 653 | if(node->subnode[i]) |
| 654 | writeTreeNode(disktree, node->subnode[i]); |
| 655 | } |
| 656 | |
| 657 | |
| 658 | return; |
| 659 | |
| 660 | } |
| 661 | |
| 662 | int msWriteTree(treeObj *tree, char *filename, int B_order) |
| 663 | { |
no test coverage detected