|
- /*
- * This file is a part of SMalloc.
- * SMalloc is MIT licensed.
- * Copyright (c) 2017 Andrey Rys.
- */
-
- #include "smalloc_i.h"
-
- int sm_malloc_stats_pool(struct smalloc_pool *spool, size_t *total, size_t *user, size_t *free, int *nr_blocks)
- {
- struct smalloc_hdr *shdr, *basehdr;
- int r = 0;
-
- if (!smalloc_verify_pool(spool)) {
- errno = EINVAL;
- return -1;
- }
-
- if (!total && !user && !free && !nr_blocks) return 0;
-
- if (total) *total = 0;
- if (user) *user = 0;
- if (free) *free = 0;
- if (nr_blocks) *nr_blocks = 0;
-
- shdr = basehdr = spool->pool;
- while (CHAR_PTR(shdr)-CHAR_PTR(basehdr) < spool->pool_size) {
- if (smalloc_is_alloc(spool, shdr)) {
- if (total) *total += HEADER_SZ + shdr->rsz + HEADER_SZ;
- if (user) *user += shdr->usz;
- if (nr_blocks) *nr_blocks += 1;
- r = 1;
- }
-
- shdr++;
- }
-
- *free = spool->pool_size - *total;
-
- return r;
- }
-
- int sm_malloc_stats(size_t *total, size_t *user, size_t *free, int *nr_blocks)
- {
- return sm_malloc_stats_pool(&smalloc_curr_pool, total, user, free, nr_blocks);
- }
|