home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / snip9707.zip / LLS_BLOB.C < prev    next >
C/C++ Source or Header  |  1997-07-05  |  3KB  |  134 lines

  1. /* +++Date last modified: 05-Jul-1997 */
  2.  
  3. /* =======================================================================
  4.     LLS_BLOB.c      Generic Singly Linked Lists for Binary Large OBjects.
  5.                     Linked Lists for variable size data-items.
  6.                     This is a 'front end' for the generic LLS module.
  7.  
  8.                     v1.00  94-08-11
  9.  
  10.  _____              This version is Public Domain.
  11.  /_|__|             A.Reitsma, Delft, The Netherlands.
  12. /  | \  --------------------------------------------------------------- */
  13.  
  14. #include "ll_defs.h"
  15. #include "lls.h"            /* the generic LLS functions ...            */
  16. #include "lls_blob.h"       /* also includes extkword.h if necessary    */
  17.  
  18. struct BlobDesc
  19. {
  20.     void * data ;           /* 'data' can be obtained by LLSnodePtr() ! */
  21.     unsigned size ;
  22. };
  23.  
  24. #define ERR_MEMORY          -1
  25.  
  26. /* ---- LL blob system management ------------------------------------- */
  27.  
  28. int LLSblobCreate( void )
  29. {
  30.     return LLScreate( sizeof( struct BlobDesc ));
  31. }
  32.  
  33. /* ---- LL blob node management --------------------------------------- */
  34.  
  35. int LLSblobInsert( int List, void * Source, unsigned Size )
  36. {                                       /* insert _BEFORE_ current node */
  37.     struct BlobDesc Blob ;
  38.  
  39.     Blob.size = Size ;
  40.     Blob.data = malloc( Size );
  41.  
  42.     if( NULL == Blob.data )
  43.     {
  44.         return ERR_MEMORY ;
  45.     }
  46.  
  47.     memcpy( Blob.data, Source, Size );
  48.     LLSnodeInsertFrom( List, & Blob );
  49.  
  50.     return LIST_NO_PROBLEMS ;
  51. }
  52.  
  53. int LLSblobAdd( int List, void * Source, unsigned Size )
  54. {                                        /* insert _AFTER_ current node */
  55.     struct BlobDesc Blob ;
  56.  
  57.     Blob.size = Size ;
  58.     Blob.data = malloc( Size );
  59.  
  60.     if( NULL == Blob.data )
  61.     {
  62.         return ERR_MEMORY ;
  63.     }
  64.  
  65.     memcpy( Blob.data, Source, Size );
  66.     LLSnodeAddFrom( List, & Blob );
  67.  
  68.     return LIST_NO_PROBLEMS ;
  69. }
  70.  
  71. int LLSblobPrepend( int List, void * Source, unsigned Size )
  72. {                                               /* insert as first node */
  73.     struct BlobDesc Blob ;
  74.  
  75.     Blob.size = Size ;
  76.     Blob.data = malloc( Size );
  77.  
  78.     if( NULL == Blob.data )
  79.     {
  80.         return ERR_MEMORY ;
  81.     }
  82.  
  83.     memcpy( Blob.data, Source, Size );
  84.     LLSnodePrependFrom( List, & Blob );
  85.  
  86.     return LIST_NO_PROBLEMS ;
  87. }
  88.  
  89. int LLSblobAppend( int List, void * Source, unsigned Size )
  90. {                                                /* insert as last node */
  91.     struct BlobDesc Blob ;
  92.  
  93.     Blob.size = Size ;
  94.     Blob.data = malloc( Size );
  95.  
  96.     if( NULL == Blob.data )
  97.     {
  98.         return ERR_MEMORY ;
  99.     }
  100.  
  101.     memcpy( Blob.data, Source, Size );
  102.     LLSnodeAppendFrom( List, & Blob );
  103.  
  104.     return LIST_NO_PROBLEMS ;
  105. }
  106.  
  107. void LLSblobDelete( int List )
  108. {
  109.     struct BlobDesc Blob ;
  110.  
  111.     LLSnodeDataTo( List, & Blob );
  112.     free( Blob.data );
  113.  
  114.     LLSnodeDelete( List );
  115.  
  116.     return ;
  117. }
  118.  
  119. /* ---- stored data management ---------------------------------------- */
  120.  
  121. unsigned LLSblobData( int List, void * Destination )
  122. {
  123.     struct BlobDesc Blob ;
  124.  
  125.     LLSnodeDataTo( List, & Blob );
  126.  
  127.     if( NULL != Destination )
  128.         memcpy( Destination, Blob.data, Blob.size );
  129.  
  130.     return Blob.size ;       /* size needed for blob */
  131. }
  132.  
  133. /* ==== LLS_BLOB.c  end =============================================== */
  134.