# include <dirent.h>
#endif /*! _WIN32 && !defined(__MINGW32__) */
+/*===================================================================*/
+/*=========================== stat.c ================================*/
+/*===================================================================*/
+typedef struct {
+ size_t key;
+ size_t value;
+} stat_size_entry_t, **stat_size_table_t;
+
+void stat_info();
+
+char *stat_mem_strdup (const char *, size_t, const char *, bool);
+void *stat_mem_reallocate(void *, size_t, size_t, const char *);
+void stat_mem_deallocate(void *);
+void *stat_mem_allocate (size_t, size_t, const char *);
+
+stat_size_table_t stat_size_new();
+stat_size_entry_t *stat_size_get(stat_size_table_t, size_t);
+void stat_size_del(stat_size_table_t);
+void stat_size_put(stat_size_table_t, size_t, size_t);
+
+/* getters for hashtable: */
+stat_size_table_t *stat_size_hashtables_get();
+uint64_t *stat_type_hashtables_get();
+uint64_t *stat_used_hashtables_get();
+stat_size_table_t *stat_hashtables_init();
+
+#define mem_a(SIZE) stat_mem_allocate ((SIZE), __LINE__, __FILE__)
+#define mem_d(PTRN) stat_mem_deallocate((void*)(PTRN))
+#define mem_r(PTRN, SIZE) stat_mem_reallocate((void*)(PTRN), (SIZE), __LINE__, __FILE__)
+#define mem_af(SIZE, FILE, LINE) stat_mem_allocate ((SIZE), (LINE), (FILE))
+
+/* TODO: rename to mem variations */
+#define util_strdup(SRC) stat_mem_strdup((char*)(SRC), __LINE__, __FILE__, false)
+#define util_strdupe(SRC) stat_mem_strdup((char*)(SRC), __LINE__, __FILE__, true)
/*===================================================================*/
/*=========================== util.c ================================*/
/*===================================================================*/
-void *util_memory_a (size_t, /*****/ unsigned int, const char *);
-void *util_memory_r (void *, size_t, unsigned int, const char *);
-void util_memory_d (void *);
-void util_meminfo ();
-
bool util_filexists (const char *);
bool util_strupper (const char *);
bool util_strdigit (const char *);
-char *_util_Estrdup (const char *, const char *, size_t);
-char *_util_Estrdup_empty(const char *, const char *, size_t);
void util_debug (const char *, const char *, ...);
void util_endianswap (void *, size_t, unsigned int);
char *util_strncpy (char *dest, const char *src, size_t num);
const char *util_strerror (int num);
-
-#ifdef NOTRACK
-# define mem_a(x) malloc (x)
-# define mem_d(x) free ((void*)x)
-# define mem_r(x, n) realloc((void*)x, n)
-# define mem_af(x,f,l) malloc (x)
-#else
-# define mem_a(x) util_memory_a((x), __LINE__, __FILE__)
-# define mem_d(x) util_memory_d((void*)(x))
-# define mem_r(x, n) util_memory_r((void*)(x), (n), __LINE__, __FILE__)
-# define mem_af(x,f,l) util_memory_a((x), __LINE__, __FILE__)
-#endif /*! NOTRACK */
-
-#define util_strdup(X) _util_Estrdup((X), __FILE__, __LINE__)
-#define util_strdupe(X) _util_Estrdup_empty((X), __FILE__, __LINE__)
-
/*
* A flexible vector implementation: all vector pointers contain some
* data about themselfs exactly - sizeof(vector_t) behind the pointer