Changeset 4795:cf3e4ecde1f5 in roaraudio


Ignore:
Timestamp:
03/14/11 15:47:34 (13 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

Added Adler32 support (Closes: #123) (pr1)

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r4794 r4795  
    1515        * Moved error string lookup from VS into error.c (pr1) 
    1616        * Added Meta Data types COMPOSER, RIGHTS, ISRC, LANGUAGE, GTIN, PUBLISHER (pr1) 
     17        * Added Adler32 support (Closes: #123) (pr1) 
    1718 
    1819v. 0.4beta3 - Wed Jan 26 2011 23:26 CET 
  • doc/new-cmds

    r4728 r4795  
    219219  +HT_ISBN10     = 72003 
    220220  +HT_ISBN13     = HT_GTIN13 #(ISBN-13 and GTIN/EAN-13 are the same) 
     221  +HT_ADLER32    = 73001 #(RFC1950) 
    221222  +HF_NONE       =  0 #(This entry does not have anything to do with the object...) 
    222223  +HF_OBJECT     =  1 #(This is an entry for exacltly this object) 
  • include/libroar/crc.h

    r4708 r4795  
    4242#define roar_crc24_init() roar_crc24_add(0, NULL, 0) 
    4343 
     44uint32_t roar_adler32_add(uint32_t state, const void * data, size_t len); 
     45#define roar_adler32_init() roar_adler32_add(0, NULL, 0) 
     46 
    4447int roar_hash_crc24_init(void * state); 
    4548int roar_hash_crc24_digest(void * state, void * digest, size_t * len); 
    4649int roar_hash_crc24_proc(void * state, const void * data, size_t len); 
    4750 
     51int roar_hash_adler32_init(void * state); 
     52int roar_hash_adler32_digest(void * state, void * digest, size_t * len); 
     53int roar_hash_adler32_proc(void * state, const void * data, size_t len); 
     54 
    4855#endif 
    4956 
  • include/libroar/hash.h

    r4708 r4795  
    7575#define ROAR_HT_ISBN10      72003 
    7676#define ROAR_HT_ISBN13      ROAR_HT_GTIN13 
     77#define ROAR_HT_ADLER32     73001 
    7778 
    7879struct roar_hash_cmds { 
  • libroar/crc.c

    r4708 r4795  
    3939#define CRC24_INIT 0x00B704CEL 
    4040 
     41#define ADLER32_BASE 65521L 
     42#define ADLER32_INIT 1L 
     43 
    4144uint32_t roar_crc24_add(uint32_t state, const void * data, size_t len) { 
    4245 const unsigned char * p = data; 
     
    5760 return state & 0x00FFFFFFL; 
    5861} 
     62 
     63uint32_t roar_adler32_add(uint32_t state, const void * data, size_t len) { 
     64 const unsigned char * p = data; 
     65 uint32_t s1 =  state        & 0xFFFFL; 
     66 uint32_t s2 = (state >> 16) & 0xFFFFL; 
     67 size_t n; 
     68 
     69 if ( data == NULL ) 
     70  return ADLER32_INIT; 
     71 
     72 for (n = 0; n < len; n++) { 
     73  s1 = (s1 + p[n]) % ADLER32_BASE; 
     74  s2 = (s2 + s1  ) % ADLER32_BASE; 
     75 } 
     76 
     77 return (s2 << 16) + s1; 
     78} 
     79 
    5980 
    6081int roar_hash_crc24_init(void * state) { 
     
    93114} 
    94115 
     116 
     117int roar_hash_adler32_init(void * state) { 
     118 uint32_t * self = state; 
     119 
     120 *self = roar_adler32_init(); 
     121 
     122 return 0; 
     123} 
     124 
     125int roar_hash_adler32_digest(void * state, void * digest, size_t * len) { 
     126 uint32_t * self = state; 
     127 unsigned char * out  = digest; 
     128 register uint32_t crc; 
     129 
     130 if ( *len < 4 ) 
     131  return -1; 
     132 
     133 *len = 4; 
     134 
     135 crc = *self; 
     136 
     137 out[0] = ((crc & 0xFF000000) >> 24) & 0xFF; 
     138 out[1] = ((crc & 0x00FF0000) >> 16) & 0xFF; 
     139 out[2] = ((crc & 0x0000FF00) >>  8) & 0xFF; 
     140 out[3] = ((crc & 0x000000FF) >>  0) & 0xFF; 
     141 
     142 return 0; 
     143} 
     144 
     145int roar_hash_adler32_proc(void * state, const void * data, size_t len) { 
     146 uint32_t * self = state; 
     147 
     148 *self = roar_adler32_add(*self, data, len); 
     149 
     150 return 0; 
     151} 
     152 
    95153//ll 
  • libroar/hash.c

    r4708 r4795  
    4646 
    4747static const struct hashes { 
    48  const int    id; 
    49  const char * name; 
    50  const ssize_t dlen; 
     48 const uint_least32_t id; 
     49 const char         * name; 
     50 const ssize_t        dlen; 
    5151} _libroar_hashes[] = { 
    5252/* 
     
    8888 {ROAR_HT_ISBN10,      "ISBN10",      8   }, 
    8989 {ROAR_HT_ISBN13,      "ISBN13",      8   }, 
     90 {ROAR_HT_ADLER32,     "ADLER32",     4   }, 
    9091 {-1, NULL} 
    9192}; 
     
    102103  roar_hash_crc24_digest, NULL, roar_hash_crc24_proc 
    103104 }, 
     105 {ROAR_HT_ADLER32, sizeof(uint32_t), -1, 
     106  roar_hash_adler32_init, NULL, 
     107  roar_hash_adler32_digest, NULL, roar_hash_adler32_proc 
     108 }, 
    104109 {-1, -1, -1, NULL, NULL, NULL, NULL, NULL} 
    105110}; 
Note: See TracChangeset for help on using the changeset viewer.