xmlfree.c 1008 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*====================================================================*
  2. *
  3. * NODE * xmlfree (NODE * node);
  4. *
  5. * node.h
  6. *
  7. * recursively free child nodes; minimize recursion by following
  8. * node->after at each level;
  9. *
  10. * the caller must free the root node; this allows that the root
  11. * to be statically declared, if desired;
  12. *
  13. * Motley Tools by Charles Maier;
  14. * Copyright (c) 2001-2006 by Charles Maier Associates;
  15. * Licensed under the Internet Software Consortium License;
  16. *
  17. *--------------------------------------------------------------------*/
  18. #ifndef XMLFREE_SOURCE
  19. #define XMLFREE_SOURCE
  20. #include <stdlib.h>
  21. #include <memory.h>
  22. #include "../nodes/node.h"
  23. void xmlfree (NODE * node)
  24. {
  25. if (node)
  26. {
  27. node = node->below;
  28. }
  29. while (node)
  30. {
  31. NODE * temp = node;
  32. if (node->above)
  33. {
  34. node->above->below = (NODE *)(0);
  35. }
  36. if (node->prior)
  37. {
  38. node->prior->after = (NODE *)(0);
  39. }
  40. xmlfree (node);
  41. node = node->after;
  42. free (temp);
  43. }
  44. return;
  45. }
  46. #endif