my_malloc.c
上传用户:jmzj888
上传日期:2007-01-02
资源大小:220k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
  2.    This file is public domain and comes with NO WARRANTY of any kind */
  3. #ifdef SAFEMALLOC /* We don't need SAFEMALLOC here */
  4. #undef SAFEMALLOC
  5. #endif
  6. #include "mysys_priv.h"
  7. #include "mysys_err.h"
  8. #include <m_string.h>
  9. /* My memory allocator */
  10. gptr my_malloc(unsigned int Size, myf MyFlags)
  11. {
  12.   gptr point;
  13.   DBUG_ENTER("my_malloc");
  14.   DBUG_PRINT("my",("Size: %u  MyFlags: %d",Size, MyFlags));
  15.   if (!Size)
  16.     Size=1; /* Safety */
  17.   if ((point = malloc(Size)) == NULL)
  18.   {
  19.     my_errno=errno;
  20.     if (MyFlags & MY_FAE)
  21.       error_handler_hook=fatal_error_handler_hook;
  22.     if (MyFlags & (MY_FAE+MY_WME))
  23.       my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),Size);
  24.     if (MyFlags & MY_FAE)
  25.       exit(1);
  26.   }
  27.   else if (MyFlags & MY_ZEROFILL)
  28.     bzero(point,Size);
  29.   DBUG_PRINT("exit",("ptr: %lx",point));
  30.   DBUG_RETURN(point);
  31. } /* my_malloc */
  32. /* Free memory allocated with my_malloc */
  33. /*ARGSUSED*/
  34. void my_no_flags_free(gptr ptr)
  35. {
  36.   DBUG_ENTER("my_free");
  37.   DBUG_PRINT("my",("ptr: %lx",ptr));
  38.   if (ptr)
  39.     free(ptr);
  40.   DBUG_VOID_RETURN;
  41. } /* my_free */
  42. /* malloc and copy */
  43. gptr my_memdup(const byte *from, uint length, myf MyFlags)
  44. {
  45.   gptr ptr;
  46.   if ((ptr=my_malloc(length,MyFlags)) != 0)
  47.     memcpy((byte*) ptr, (byte*) from,(size_t) length);
  48.   return(ptr);
  49. }
  50. my_string my_strdup(const char *from, myf MyFlags)
  51. {
  52.   gptr ptr;
  53.   uint length=(uint) strlen(from)+1;
  54.   if ((ptr=my_malloc(length,MyFlags)) != 0)
  55.     memcpy((byte*) ptr, (byte*) from,(size_t) length);
  56.   return((my_string) ptr);
  57. }