LCOV - code coverage report
Current view: top level - redis - zmalloc.c (source / functions) Hit Total Coverage
Test: redis_test.info Lines: 11 28 39.3 %
Date: 2021-05-15 09:19:17 Functions: 2 5 40.0 %

          Line data    Source code
       1             : /* zmalloc - total amount of allocated memory aware version of malloc()
       2             :  *
       3             :  * Copyright (c) 2006-2009, Salvatore Sanfilippo <antirez at gmail dot com>
       4             :  * All rights reserved.
       5             :  *
       6             :  * Redistribution and use in source and binary forms, with or without
       7             :  * modification, are permitted provided that the following conditions are met:
       8             :  *
       9             :  *   * Redistributions of source code must retain the above copyright notice,
      10             :  *     this list of conditions and the following disclaimer.
      11             :  *   * Redistributions in binary form must reproduce the above copyright
      12             :  *     notice, this list of conditions and the following disclaimer in the
      13             :  *     documentation and/or other materials provided with the distribution.
      14             :  *   * Neither the name of Redis nor the names of its contributors may be used
      15             :  *     to endorse or promote products derived from this software without
      16             :  *     specific prior written permission.
      17             :  *
      18             :  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
      19             :  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      20             :  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      21             :  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
      22             :  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
      23             :  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
      24             :  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
      25             :  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
      26             :  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
      27             :  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
      28             :  * POSSIBILITY OF SUCH DAMAGE.
      29             :  */
      30             : 
      31             : #include <stdlib.h>
      32             : #include <string.h>
      33             : 
      34             : static size_t used_memory = 0;
      35             : 
      36           8 : void *zmalloc(size_t size) {
      37           8 :     void *ptr = malloc(size+sizeof(size_t));
      38             : 
      39           8 :     *((size_t*)ptr) = size;
      40           8 :     used_memory += size+sizeof(size_t);
      41           8 :     return ptr+sizeof(size_t);
      42             : }
      43             : 
      44           0 : void *zrealloc(void *ptr, size_t size) {
      45             :     void *realptr;
      46             :     size_t oldsize;
      47             :     void *newptr;
      48             : 
      49           0 :     if (ptr == NULL) return zmalloc(size);
      50           0 :     realptr = ptr-sizeof(size_t);
      51           0 :     oldsize = *((size_t*)realptr);
      52           0 :     newptr = realloc(realptr,size+sizeof(size_t));
      53           0 :     if (!newptr) return NULL;
      54             : 
      55           0 :     *((size_t*)newptr) = size;
      56           0 :     used_memory -= oldsize;
      57           0 :     used_memory += size;
      58           0 :     return newptr+sizeof(size_t);
      59             : }
      60             : 
      61           8 : void zfree(void *ptr) {
      62             :     void *realptr;
      63             :     size_t oldsize;
      64             : 
      65           8 :     if (ptr == NULL) return;
      66           8 :     realptr = ptr-sizeof(size_t);
      67           8 :     oldsize = *((size_t*)realptr);
      68           8 :     used_memory -= oldsize+sizeof(size_t);
      69           8 :     free(realptr);
      70             : }
      71             : 
      72           0 : char *zstrdup(const char *s) {
      73           0 :     size_t l = strlen(s)+1;
      74           0 :     char *p = zmalloc(l);
      75             : 
      76           0 :     memcpy(p,s,l);
      77           0 :     return p;
      78             : }
      79             : 
      80           0 : size_t zmalloc_used_memory(void) {
      81           0 :     return used_memory;
      82             : }

Generated by: LCOV version 1.14