my_malloc.c 2.41 KB
Newer Older
unknown's avatar
unknown committed
1 2 3 4 5 6 7 8
/* Copyright (C) 2000 MySQL AB

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
unknown's avatar
unknown committed
9
   but WITHOUT ANY WARRANTY; without even the implied warranty of
unknown's avatar
unknown committed
10 11 12 13 14 15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
unknown's avatar
unknown committed
16 17 18 19 20 21 22 23 24 25 26

#ifdef SAFEMALLOC			/* We don't need SAFEMALLOC here */
#undef SAFEMALLOC
#endif

#include "mysys_priv.h"
#include "mysys_err.h"
#include <m_string.h>

	/* My memory allocator */

unknown's avatar
unknown committed
27
gptr my_malloc(unsigned int size, myf my_flags)
unknown's avatar
unknown committed
28 29 30
{
  gptr point;
  DBUG_ENTER("my_malloc");
unknown's avatar
unknown committed
31
  DBUG_PRINT("my",("size: %u  my_flags: %d",size, my_flags));
unknown's avatar
unknown committed
32

unknown's avatar
unknown committed
33 34 35
  if (!size)
    size=1;					/* Safety */
  if ((point = (char*)malloc(size)) == NULL)
unknown's avatar
unknown committed
36 37
  {
    my_errno=errno;
unknown's avatar
unknown committed
38
    if (my_flags & MY_FAE)
unknown's avatar
unknown committed
39
      error_handler_hook=fatal_error_handler_hook;
unknown's avatar
unknown committed
40 41 42
    if (my_flags & (MY_FAE+MY_WME))
      my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),size);
    if (my_flags & MY_FAE)
unknown's avatar
unknown committed
43 44
      exit(1);
  }
unknown's avatar
unknown committed
45 46
  else if (my_flags & MY_ZEROFILL)
    bzero(point,size);
47
  DBUG_PRINT("exit",("ptr: 0x%lx",point));
unknown's avatar
unknown committed
48 49 50 51 52 53 54 55 56 57
  DBUG_RETURN(point);
} /* my_malloc */


	/* Free memory allocated with my_malloc */
	/*ARGSUSED*/

void my_no_flags_free(gptr ptr)
{
  DBUG_ENTER("my_free");
58
  DBUG_PRINT("my",("ptr: 0x%lx",ptr));
unknown's avatar
unknown committed
59 60 61 62 63 64 65 66
  if (ptr)
    free(ptr);
  DBUG_VOID_RETURN;
} /* my_free */


	/* malloc and copy */

unknown's avatar
unknown committed
67
gptr my_memdup(const byte *from, uint length, myf my_flags)
unknown's avatar
unknown committed
68 69
{
  gptr ptr;
unknown's avatar
unknown committed
70
  if ((ptr=my_malloc(length,my_flags)) != 0)
unknown's avatar
unknown committed
71 72 73 74 75
    memcpy((byte*) ptr, (byte*) from,(size_t) length);
  return(ptr);
}


unknown's avatar
unknown committed
76
char *my_strdup(const char *from, myf my_flags)
unknown's avatar
unknown committed
77 78 79
{
  gptr ptr;
  uint length=(uint) strlen(from)+1;
unknown's avatar
unknown committed
80
  if ((ptr=my_malloc(length,my_flags)) != 0)
unknown's avatar
unknown committed
81 82 83
    memcpy((byte*) ptr, (byte*) from,(size_t) length);
  return((my_string) ptr);
}
unknown's avatar
unknown committed
84 85


86
char *my_strndup(const byte *from, uint length, myf my_flags)
unknown's avatar
unknown committed
87 88
{
  gptr ptr;
unknown's avatar
unknown committed
89
  if ((ptr=my_malloc(length+1,my_flags)) != 0)
unknown's avatar
unknown committed
90 91
  {
    memcpy((byte*) ptr, (byte*) from,(size_t) length);
92
    ((char*) ptr)[length]=0;
unknown's avatar
unknown committed
93
  }
94
  return((char*) ptr);
unknown's avatar
unknown committed
95
}