diff options
Diffstat (limited to 'fitz/node_misc1.c')
-rw-r--r-- | fitz/node_misc1.c | 65 |
1 files changed, 35 insertions, 30 deletions
diff --git a/fitz/node_misc1.c b/fitz/node_misc1.c index 128406e3..48bd1278 100644 --- a/fitz/node_misc1.c +++ b/fitz/node_misc1.c @@ -32,39 +32,44 @@ fz_initnode(fz_node *node, fz_nodekind kind) void fz_dropnode(fz_node *node) { - if (node->first) - fz_dropnode(node->first); - if (node->next) - fz_dropnode(node->next); + fz_node *next; - switch (node->kind) + while (node) { - case FZ_NTRANSFORM: - case FZ_NOVER: - case FZ_NMASK: - case FZ_NBLEND: - break; - case FZ_NCOLOR: - fz_dropsolidnode((fz_solidnode *) node); - break; - case FZ_NPATH: - fz_droppathnode((fz_pathnode *) node); - break; - case FZ_NTEXT: - fz_droptextnode((fz_textnode *) node); - break; - case FZ_NIMAGE: - fz_dropimagenode((fz_imagenode *) node); - break; - case FZ_NSHADE: - fz_dropshadenode((fz_shadenode *) node); - break; - case FZ_NLINK: - fz_droplinknode((fz_linknode *) node); - break; + if (node->first) + fz_dropnode(node->first); + + switch (node->kind) + { + case FZ_NTRANSFORM: + case FZ_NOVER: + case FZ_NMASK: + case FZ_NBLEND: + break; + case FZ_NCOLOR: + fz_dropsolidnode((fz_solidnode *) node); + break; + case FZ_NPATH: + fz_droppathnode((fz_pathnode *) node); + break; + case FZ_NTEXT: + fz_droptextnode((fz_textnode *) node); + break; + case FZ_NIMAGE: + fz_dropimagenode((fz_imagenode *) node); + break; + case FZ_NSHADE: + fz_dropshadenode((fz_shadenode *) node); + break; + case FZ_NLINK: + fz_droplinknode((fz_linknode *) node); + break; + } + + next = node->next; + fz_free(node); + node = next; } - - fz_free(node); } fz_rect |