Added lzma_memlimit_count().
authorLasse Collin <lasse.collin@tukaani.org>
Wed, 16 Jan 2008 12:46:50 +0000 (14:46 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Wed, 16 Jan 2008 12:46:50 +0000 (14:46 +0200)
src/liblzma/api/lzma/memlimit.h
src/liblzma/common/memory_limitter.c

index 26ec50f..6f78289 100644 (file)
@@ -93,6 +93,16 @@ extern size_t lzma_memlimit_used(const lzma_memlimit *mem);
 
 
 /**
+ * \brief       Gets the number of allocations owned by the memory limitter
+ *
+ * The count does not include the helper structures; if no memory has
+ * been allocated with lzma_memlimit_alloc() or all memory allocated
+ * has been freed or detached, this will return zero.
+ */
+extern size_t lzma_memlimit_count(const lzma_memlimit *mem);
+
+
+/**
  * \brief       Allocates memory with malloc() if memory limit allows
  *
  * \param       mem     Pointer to a lzma_memlimit structure returned
index 19cdefc..0983c82 100644 (file)
@@ -85,6 +85,25 @@ lzma_memlimit_used(const lzma_memlimit *mem)
 }
 
 
+extern LZMA_API size_t
+lzma_memlimit_count(const lzma_memlimit *mem)
+{
+       // This is slow; we could have a counter in lzma_memlimit
+       // for fast version. I expect the primary use of this
+       // function to be limited to easy checking of memory leaks,
+       // in which this implementation is just fine.
+       size_t count = 0;
+       const lzma_memlimit_list *record = mem->list;
+       
+       while (record != NULL) {
+               ++count;
+               record = record->next;
+       }
+       
+       return count;
+}
+
+
 extern LZMA_API void
 lzma_memlimit_end(lzma_memlimit *mem, lzma_bool free_allocated)
 {