Changeset 5c925ce in mainline for uspace/app/bithenge/tree.c
- Timestamp:
- 2012-06-07T17:00:12Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8375d0eb
- Parents:
- 5f679702
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bithenge/tree.c
r5f679702 r5c925ce 37 37 #include <errno.h> 38 38 #include <stdlib.h> 39 #include "blob.h" 39 40 #include "tree.h" 41 42 static int blob_destroy(bithenge_node_t *base) 43 { 44 bithenge_blob_t *blob = bithenge_node_as_blob(base); 45 assert(blob->base.blob_ops); 46 return blob->base.blob_ops->destroy(blob); 47 } 40 48 41 49 int bithenge_node_destroy(bithenge_node_t *node) 42 50 { 43 51 switch (bithenge_node_type(node)) { 52 case BITHENGE_NODE_BLOB: 53 return blob_destroy(node); 44 54 case BITHENGE_NODE_STRING: 45 55 if (node->string_value.needs_free) … … 47 57 break; 48 58 case BITHENGE_NODE_INTERNAL: 49 /* TODO */ 50 break; 59 return node->internal_ops->destroy(node); 51 60 case BITHENGE_NODE_BOOLEAN: 52 61 return EOK; // the boolean nodes are allocated statically below … … 84 93 } 85 94 95 static int simple_internal_node_destroy(bithenge_node_t *base) 96 { 97 int rc; 98 simple_internal_node_t *node = node_as_simple(base); 99 for (bithenge_int_t i = 0; i < node->len; i++) { 100 rc = bithenge_node_destroy(node->nodes[2*i+0]); 101 if (rc != EOK) 102 return rc; 103 rc = bithenge_node_destroy(node->nodes[2*i+1]); 104 if (rc != EOK) 105 return rc; 106 } 107 if (node->needs_free) 108 free(node->nodes); 109 free(node); 110 return EOK; 111 } 112 86 113 static bithenge_internal_node_ops_t simple_internal_node_ops = { 87 .for_each = simple_internal_node_for_each 114 .for_each = simple_internal_node_for_each, 115 .destroy = simple_internal_node_destroy, 88 116 }; 89 117
Note:
See TracChangeset
for help on using the changeset viewer.