/* -*-c-*-
*
- * $Id: utils.h,v 1.2 1997/08/04 10:24:26 mdw Exp $
+ * $Id: utils.h,v 1.4 1998/01/12 16:46:52 mdw Exp $
*
* Miscellaneous useful bits of code.
*
- * (c) 1997 Mark Wooding
+ * (c) 1998 Mark Wooding
*/
/*----- Licensing notice --------------------------------------------------*
/*----- Revision history --------------------------------------------------*
*
* $Log: utils.h,v $
+ * Revision 1.4 1998/01/12 16:46:52 mdw
+ * Fix copyright date.
+ *
+ * Revision 1.3 1997/08/20 16:25:37 mdw
+ * Add some simple `malloc' tracking.
+ *
* Revision 1.2 1997/08/04 10:24:26 mdw
* Sources placed under CVS control.
*
extern void *xrealloc(void */*p*/, size_t /*sz*/);
+/*----- Simple memory use tracking ----------------------------------------*/
+
+#undef TRACK_MALLOC
+
+#ifdef TRACK_MALLOC
+
+/* --- @track_malloc@ --- *
+ *
+ * Arguments: @size_t sz@ = size requested
+ *
+ * Returns: Pointer to allocated space, or null
+ *
+ * Use: Allocates memory, and tracks how much is allocated.
+ */
+
+extern void *track_malloc(size_t /*sz*/);
+
+/* --- @track_free@ --- *
+ *
+ * Arguments: @void *p@ = pointer to an allocated block
+ *
+ * Returns: ---
+ *
+ * Use: Frees memory, and tracks how much is still allocated.
+ */
+
+extern void track_free(void */*p*/);
+
+/* --- @track_realloc@ --- *
+ *
+ * Arguments: @void *p@ = pointer to an allocated block
+ * @size_t sz@ = how big it wants to be
+ *
+ * Returns: Pointer to the new block.
+ *
+ * Use: Reallocates a block, tracking how much memory is still
+ * available.
+ */
+
+extern void *track_realloc(void */*p*/, size_t /*sz*/);
+
+/* --- @track_memused@ --- *
+ *
+ * Arguments: ---
+ *
+ * Returns: A count of how much memory is used currently.
+ *
+ * Use: Returns the amount of memory which the @track_@-functions
+ * above have counted as being currently allocated.
+ */
+
+extern unsigned long track_memused(void);
+
+/* --- @track_memlist@ --- *
+ *
+ * Arguments: ---
+ *
+ * Returns: ---
+ *
+ * Use: Dumps a list of allocated blocks to standard output.
+ */
+
+extern void track_memlist(void);
+
+#undef malloc
+#define malloc(sz) track_malloc(sz)
+
+#undef free
+#define free(p) track_free(p)
+
+#undef realloc
+#define realloc(p, sz) track_realloc(p, sz)
+
+#endif
+
/*----- That's all, folks -------------------------------------------------*/
#ifdef __cplusplus