string.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. /*
  4.   Code for handling strings with can grow dynamicly.
  5.   Copyright Monty Program KB.
  6.   By monty.
  7. */
  8. #include "mysys_priv.h"
  9. #include <m_string.h>
  10. my_bool init_dynamic_string(DYNAMIC_STRING *str, my_string init_str,
  11.     uint init_alloc, uint alloc_increment)
  12. {
  13.   uint length;
  14.   DBUG_ENTER("init_dynamic_string");
  15.   if (!alloc_increment)
  16.     alloc_increment=128;
  17.   length=1;
  18.   if (init_str && (length=strlen(init_str)+1) < init_alloc)
  19.     init_alloc=((length+alloc_increment-1)/alloc_increment)*alloc_increment;
  20.   if (!init_alloc)
  21.     init_alloc=alloc_increment;
  22.   if (!(str->str=(char*) my_malloc(init_alloc,MYF(MY_WME))))
  23.     DBUG_RETURN(TRUE);
  24.   str->length=length-1;
  25.   if (init_str)
  26.     memcpy(str->str,init_str,length);
  27.   str->max_length=init_alloc;
  28.   str->alloc_increment=alloc_increment;
  29.   DBUG_RETURN(FALSE);
  30. }
  31. my_bool dynstr_append(DYNAMIC_STRING *str, my_string append)
  32. {
  33.   char *new_ptr;
  34.   uint length=(uint) strlen(append)+1;
  35.   if (str->length+length > str->max_length)
  36.   {
  37.     uint new_length=(str->length+length+str->alloc_increment-1)/
  38.       str->alloc_increment;
  39.     new_length*=str->alloc_increment;
  40.     if (!(new_ptr=(char*) my_realloc(str->str,new_length,MYF(MY_WME))))
  41.       return TRUE;
  42.     str->str=new_ptr;
  43.     str->max_length=new_length;
  44.   }
  45.   memcpy(str->str + str->length,append,length);
  46.   str->length+=length-1;
  47.   return FALSE;
  48. }
  49. void dynstr_free(DYNAMIC_STRING *str)
  50. {
  51.   if (str->str)
  52.   {
  53.     my_free(str->str,MYF(MY_WME));
  54.     str->str=0;
  55.   }
  56. }