Logo Search packages:      
Sourcecode: dmraid version File versions

dbg_malloc.c

/*
 * Copyright (C) 2004,2005  Heinz Mauelshagen, Red Hat GmbH.
 *                          All rights reserved.
 *
 * See file LICENSE at the top of this source tree for license information.
 */

#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <stdint.h>
#include "dbg_malloc.h"
#include "log/log.h"

static void *
__dbg_malloc(size_t size, int init)
{
      void *ret = malloc(size);

      if (init && ret)
            memset(ret, 0, size);

      return ret;
}

#ifdef      DEBUG_MALLOC

void *
_dbg_malloc(size_t size, struct lib_context *lc,
          const char *who, unsigned int line)
{
      void *ret = __dbg_malloc(size, 1);

      log_dbg(lc, "%s: dbg_malloc(%zu) at line %u returned 0x%x",
            (char *) who, size, line, (unsigned long) ret);

      return ret;
}

void *
_dbg_realloc(void *ptr, size_t size, struct lib_context *lc,
           const char *who, unsigned int line)
{
      void *ret = realloc(ptr, size);

      log_dbg(lc, "%s: dbg_realloc(0x%x, %zu) at line %u returned 0x%x",
            (char *) who, (unsigned long) ptr, size, line,
            (unsigned long) ret);

      return ret;
}

void *
_dbg_strndup(void *ptr, size_t len, struct lib_context *lc,
           const char *who, unsigned int line)
{
      char *ret;

      if ((ret = __dbg_malloc(len + 1, 0))) {
            ret[len] = 0;
            strncpy(ret, ptr, len);
      }

      log_dbg(lc, "%s: dbg_strndup(0x%x) at line %u returned 0x%x",
            (char *) who, (unsigned long) ptr, line, (unsigned long) ret);

      return ret;

}

void *
_dbg_strdup(void *ptr, struct lib_context *lc,
          const char *who, unsigned int line)
{
      return _dbg_strndup(ptr, strlen(ptr), lc, who, line);
}


void
_dbg_free(void *ptr, struct lib_context *lc, const char *who, unsigned int line)
{
      log_dbg(lc, "%s: dbg_free(0x%x) at line %u",
            (char *) who, (unsigned long) ptr, line);
      free(ptr);
}

#else

void *
_dbg_malloc(size_t size)
{
      return __dbg_malloc(size, 1);
}

void *
_dbg_realloc(void *ptr, size_t size)
{
      return realloc(ptr, size);
}

void *
_dbg_strndup(void *ptr, size_t len)
{
      char *ret;

      if ((ret = __dbg_malloc(len + 1, 0))) {
            ret[len] = 0;
            strncpy(ret, ptr, len);
      }

      return ret;
}

void *
_dbg_strdup(void *ptr)
{
      return _dbg_strndup(ptr, strlen(ptr));
}

void
_dbg_free(void *ptr)
{
      free(ptr);
}

#endif /* #ifdef DEBUG_MALLOC */

Generated by  Doxygen 1.6.0   Back to index