my_realloc.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifdef SAFEMALLOC /* We don't need SAFEMALLOC here */
  14. #undef SAFEMALLOC
  15. #endif
  16. #include "mysys_priv.h"
  17. #include "mysys_err.h"
  18. /* My memory re allocator */
  19. gptr my_realloc(gptr oldpoint, uint size, myf my_flags)
  20. {
  21.   gptr point;
  22.   DBUG_ENTER("my_realloc");
  23.   DBUG_PRINT("my",("ptr: 0x%lx  size: %u  my_flags: %d",oldpoint, size,
  24.    my_flags));
  25.   if (!oldpoint && (my_flags & MY_ALLOW_ZERO_PTR))
  26.     DBUG_RETURN(my_malloc(size,my_flags));
  27. #ifdef USE_HALLOC
  28.   if (!(point = malloc(size)))
  29.   {
  30.     if (my_flags & MY_FREE_ON_ERROR)
  31.       my_free(oldpoint,my_flags);
  32.     if (my_flags & MY_HOLD_ON_ERROR)
  33.       DBUG_RETURN(oldpoint);
  34.     my_errno=errno;
  35.     if (my_flags & MY_FAE+MY_WME)
  36.       my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),size);
  37.   }
  38.   else
  39.   {
  40.     memcpy(point,oldpoint,size);
  41.     free(oldpoint);
  42.   }
  43. #else
  44.   if ((point = (char*)realloc(oldpoint,size)) == NULL)
  45.   {
  46.     if (my_flags & MY_FREE_ON_ERROR)
  47.       my_free(oldpoint,MyFLAGS);
  48.     if (my_flags & MY_HOLD_ON_ERROR)
  49.       DBUG_RETURN(oldpoint);
  50.     my_errno=errno;
  51.     if (my_flags & (MY_FAE+MY_WME))
  52.       my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG), size);
  53.   }
  54. #endif
  55.   DBUG_PRINT("exit",("ptr: 0x%lx",point));
  56.   DBUG_RETURN(point);
  57. } /* my_realloc */