home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / d / desklib / !DeskSrc / FN / Libraries / DeskMem / c0 / Buffer next >
Encoding:
Text File  |  1996-05-10  |  2.5 KB  |  123 lines

  1. #include <string.h>
  2. #include <stdio.h>
  3.  
  4. #include "Desk.Debug.h"
  5. #include "Defs.h"
  6.  
  7.  
  8. void    Desk_DeskMem_BufferFree( Desk_deskmem_buffer* buffer)
  9. {
  10. Desk_Debug_Assert( buffer);
  11. Desk_Debug_Assert( buffer->data);
  12.  
  13. Desk_DeskMem_Free( buffer->data);
  14. buffer->data    = NULL;
  15. buffer->size    = 0;
  16. }
  17.  
  18.  
  19.  
  20.  
  21. void    Desk_DeskMem_BufferEnsure( Desk_deskmem_buffer* buffer, int min)
  22. {
  23. int    l;
  24.  
  25. Desk_Debug2_Printf( "Desk_DeskMem_BufferEnsure buffer=%p, min=%i\n", buffer, min);
  26.  
  27. Desk_Debug_Assert( buffer);
  28. Desk_Debug_Assert( buffer->increment > 0);
  29. Desk_Debug_Assert( min>=0);
  30.  
  31. l = ( 1 + min/buffer->increment) * buffer->increment;
  32.  
  33. if ( l!=buffer->size)    {
  34.     buffer->data    = Desk_DeskMem_Realloc( buffer->data, l);    
  35.     buffer->size    = l;
  36.     Desk_Debug2_Printf( "Desk_DeskMem_BufferEnsure - reallocating buffer %p, new datasize %i (size=%i)\n",
  37.         buffer, min, l
  38.         );
  39.     }
  40.  
  41. buffer->datasize    = min;
  42.  
  43. return;
  44. }
  45.  
  46.  
  47.  
  48.  
  49. void    Desk_DeskMem_BufferInit( Desk_deskmem_buffer* buffer, int increment)
  50. {
  51. Desk_Debug_Assert( buffer);
  52. Desk_Debug_Assert( increment>0);
  53.  
  54. Desk_Debug2_Printf( "Desk_DeskMem_BufferInit, buffer=%p, increment=%i\n", buffer, increment);
  55.  
  56. buffer->size        = 0;
  57. buffer->datasize    = 0;
  58. buffer->data        = Desk_DeskMem_Malloc( 0);
  59. buffer->increment    = increment;
  60.  
  61. Desk_DeskMem_BufferEnsure( buffer, 0);
  62. }
  63.  
  64.  
  65.  
  66.  
  67. void    Desk_DeskMem_BufferEnsureExtra( Desk_deskmem_buffer *buffer, int extra)
  68. {
  69. Desk_DeskMem_BufferEnsure( buffer, buffer->datasize+extra);
  70. }
  71.  
  72.  
  73.  
  74.  
  75. void    Desk_DeskMem_BufferStrNCat( Desk_deskmem_buffer* buffer, const char* extra, int extralen)
  76. {
  77. int    oldlen;
  78.  
  79. Desk_Debug_Printf( "Desk_DeskMem_BufferStrNCat buffer=%p, extra=%p, extralen=%i\n",
  80.     buffer, extra, extralen
  81.     );
  82.  
  83. Desk_Debug_Assert( buffer);
  84. Desk_Debug_Assert( extra);
  85.  
  86. oldlen    = (buffer->data) ? strlen( (char*) buffer->data) : 0;
  87.  
  88. Desk_Debug_Assert( oldlen < buffer->size);
  89. Desk_Debug_Assert( oldlen < buffer->datasize);
  90.  
  91. Desk_DeskMem_BufferEnsure( buffer, oldlen + extralen + 1);
  92.  
  93. strncat( ((char*) buffer->data) + oldlen, extra, extralen);
  94. }
  95.  
  96.  
  97.  
  98.  
  99.  
  100. void    Desk_DeskMem_BufferStrCat( Desk_deskmem_buffer* buffer, const char* extra)
  101. {
  102. Desk_Debug_Printf( "Desk_DeskMem_BufferStrCat buffer=%p, s=%p\n", buffer, extra);
  103. Desk_Debug_Assert( extra);
  104.  
  105. Desk_DeskMem_BufferStrNCat( buffer, extra, strlen( extra));
  106. }
  107.  
  108.  
  109.  
  110.  
  111. void    Desk_DeskMem_BufferStrCpy( Desk_deskmem_buffer* buffer, const char* s)
  112. {
  113. Desk_Debug_Printf( "Desk_DeskMem_BufferStrCpy buffer=%p, s=%p\n", buffer, s);
  114.  
  115. Desk_Debug_Assert( s);
  116. Desk_Debug_Assert( buffer);
  117.  
  118. Desk_DeskMem_BufferEnsure( buffer, 1 + strlen( s));
  119.  
  120. strcpy( (char*) buffer->data, s);
  121.  
  122. }
  123.