Changeset 4557

Show
Ignore:
Timestamp:
02/09/07 20:30:04 (2 years ago)
Author:
morris
Message:

Clean up API a bit, remove duplicate implementations

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libwired/trunk/libwired/data/wi-data.c

    r4511 r4557  
    3838 
    3939#include <wired/wi-data.h> 
     40#include <wired/wi-file.h> 
    4041#include <wired/wi-private.h> 
    4142#include <wired/wi-runtime.h> 
     
    216217 
    217218 
     219wi_data_t * wi_data_init_with_contents_of_file(wi_data_t *data, wi_string_t *path) { 
     220        wi_file_t               *file; 
     221        struct stat             sb; 
     222        char                    buffer[WI_FILE_BUFFER_SIZE]; 
     223        wi_integer_t    bytes; 
     224         
     225        if(!wi_file_stat(path, &sb)) { 
     226                wi_release(data); 
     227                 
     228                return NULL; 
     229        } 
     230         
     231        file = wi_file_for_reading(path); 
     232         
     233        if(!file) { 
     234                wi_release(data); 
     235                 
     236                return NULL; 
     237        } 
     238         
     239        data = wi_data_init_with_capacity(data, sb.st_size); 
     240         
     241        while((bytes = wi_file_read_buffer(file, buffer, sizeof(buffer)))) 
     242                wi_data_append_bytes(data, buffer, bytes); 
     243         
     244        return data; 
     245} 
     246 
     247 
     248 
    218249static void _wi_data_dealloc(wi_runtime_instance_t *instance) { 
    219250        wi_data_t               *data = instance; 
  • libwired/trunk/libwired/data/wi-data.h

    r4437 r4557  
    4646WI_EXPORT wi_data_t *                                   wi_data_init_with_random_bytes(wi_data_t *, wi_uinteger_t); 
    4747WI_EXPORT wi_data_t *                                   wi_data_init_with_base64(wi_data_t *, wi_string_t *); 
     48WI_EXPORT wi_data_t *                                   wi_data_init_with_contents_of_file(wi_data_t *, wi_string_t *); 
    4849 
    4950WI_EXPORT const void *                                  wi_data_bytes(wi_data_t *); 
  • libwired/trunk/libwired/data/wi-string.c

    r4556 r4557  
    310310 
    311311 
     312wi_string_t * wi_string_init_with_base64(wi_string_t *string, wi_string_t *base64) { 
     313        wi_data_t               *data; 
     314         
     315        data = wi_data_init_with_base64(wi_data_alloc(), base64); 
     316        string = wi_string_init_with_bytes(string, wi_data_bytes(data), wi_data_length(data)); 
     317        wi_release(data); 
     318         
     319        return string; 
     320} 
     321 
     322 
     323 
    312324wi_string_t * wi_string_init_with_contents_of_file(wi_string_t *string, wi_string_t *path) { 
    313         struct stat             sb; 
    314         FILE                    *fp; 
    315         const char              *cstring; 
    316         char                    buffer[BUFSIZ]; 
    317         size_t                  bytes; 
    318  
    319         cstring = wi_string_cstring(path); 
    320          
    321         if(stat(cstring, &sb) < 0) { 
    322                 wi_error_set_errno(errno); 
    323                  
     325        wi_file_t               *file; 
     326         
     327        file = wi_file_for_reading(path); 
     328         
     329        if(!file) { 
    324330                wi_release(string); 
    325331                 
    326332                return NULL; 
    327333        } 
    328  
    329         fp = fopen(cstring, "r"); 
    330  
    331         if(!fp) { 
    332                 wi_error_set_errno(errno); 
    333  
    334                 wi_release(string); 
    335                  
    336                 return NULL; 
    337         } 
    338          
    339         string = wi_string_init_with_capacity(string, sb.st_size); 
    340          
    341         while((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) 
    342                 wi_string_append_bytes(string, buffer, bytes); 
    343          
    344         fclose(fp); 
    345  
    346         return string; 
     334         
     335        return wi_file_read_to_end_of_file(file); 
    347336} 
    348337 
     
    394383        wi_string_t             *string1 = instance1; 
    395384        wi_string_t             *string2 = instance2; 
     385         
     386        if(string1 == string2) 
     387                return true; 
    396388 
    397389        return strcmp(string1->string, string2->string); 
     
    403395        wi_string_t             *string1 = instance1; 
    404396        wi_string_t             *string2 = instance2; 
     397         
     398        if(string1 == string2) 
     399                return true; 
    405400 
    406401        return strcasecmp(string1->string, string2->string); 
     
    15681563 
    15691564wi_data_t * wi_string_data(wi_string_t *string) { 
    1570         return wi_data_init_with_bytes(wi_data_alloc(), string->string, string->length); 
     1565        return wi_autorelease(wi_data_init_with_bytes(wi_data_alloc(), string->string, string->length)); 
    15711566} 
    15721567 
     
    15761571 
    15771572wi_string_t * wi_string_md5(wi_string_t *string) { 
    1578         static unsigned char    hex[] = "0123456789abcdef"; 
    1579         MD5_CTX                                 c; 
    1580         unsigned char                   md5[MD5_DIGEST_LENGTH]; 
    1581         char                                    md5_hex[sizeof(md5) * 2 + 1]; 
    1582         wi_uinteger_t                   i; 
    1583  
    1584         MD5_Init(&c); 
    1585         MD5_Update(&c, (unsigned char *) string->string, string->length); 
    1586         MD5_Final(md5, &c); 
    1587          
    1588         for(i = 0; i < MD5_DIGEST_LENGTH; i++) { 
    1589                 md5_hex[i+i]    = hex[md5[i] >> 4]; 
    1590                 md5_hex[i+i+1]  = hex[md5[i] & 0x0F]; 
    1591         } 
    1592  
    1593         md5_hex[i+i] = '\0'; 
    1594  
    1595         return wi_string_with_cstring(md5_hex); 
     1573        return wi_data_md5(wi_string_data(string)); 
    15961574} 
    15971575 
     
    15991577 
    16001578wi_string_t * wi_string_sha1(wi_string_t *string) { 
    1601         static unsigned char    hex[] = "0123456789abcdef"; 
    1602         SHA_CTX                                 c; 
    1603         unsigned char                   sha1[SHA_DIGEST_LENGTH]; 
    1604         char                                    sha1_hex[sizeof(sha1) * 2 + 1]; 
    1605         wi_uinteger_t                   i; 
    1606  
    1607         SHA1_Init(&c); 
    1608         SHA1_Update(&c, (unsigned char *) string->string, string->length); 
    1609         SHA1_Final(sha1, &c); 
    1610          
    1611         for(i = 0; i < SHA_DIGEST_LENGTH; i++) { 
    1612                 sha1_hex[i+i]   = hex[sha1[i] >> 4]; 
    1613                 sha1_hex[i+i+1] = hex[sha1[i] & 0x0F]; 
    1614         } 
    1615  
    1616         sha1_hex[i+i] = '\0'; 
    1617  
    1618         return wi_string_with_cstring(sha1_hex); 
     1579        return wi_data_sha1(wi_string_data(string)); 
    16191580} 
    16201581 
     
    16241585 
    16251586wi_string_t * wi_string_base64(wi_string_t *string) { 
    1626         static char                     base64_table[] = 
    1627                 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 
    1628         wi_string_t                     *base64_string; 
    1629         unsigned char           inbuffer[3], outbuffer[4]; 
    1630         wi_uinteger_t           i, count, position, offset, remaining; 
    1631         size_t                          size; 
    1632  
    1633         position = offset = 0; 
    1634         size = string->length * (4.0f / 3.0f) + 4; 
    1635         base64_string = wi_string_init_with_capacity(wi_string_alloc(), size); 
    1636  
    1637         while(position < string->length) { 
    1638                 for(i = 0; i < 3; i++) { 
    1639                         if(position + i < string->length) 
    1640                                 inbuffer[i] = string->string[position + i]; 
    1641                         else 
    1642                                 inbuffer[i] = '\0'; 
    1643                 } 
    1644  
    1645                 outbuffer[0] =  (inbuffer[0] & 0xFC) >> 2; 
    1646                 outbuffer[1] = ((inbuffer[0] & 0x03) << 4) | ((inbuffer[1] & 0xF0) >> 4); 
    1647                 outbuffer[2] = ((inbuffer[1] & 0x0F) << 2) | ((inbuffer[2] & 0xC0) >> 6); 
    1648                 outbuffer[3] =   inbuffer[2] & 0x3F; 
    1649  
    1650                 remaining = string->length - position; 
    1651                  
    1652                 if(remaining == 1) 
    1653                         count = 2; 
    1654                 else if(remaining == 2) 
    1655                         count = 3; 
    1656                 else 
    1657                         count = 4; 
    1658  
    1659                 for(i = 0; i < count; i++) 
    1660                         base64_string->string[offset++] = base64_table[outbuffer[i]]; 
    1661  
    1662                 for(i = count; i < 4; i++) 
    1663                         base64_string->string[offset++] = '='; 
    1664  
    1665                 position += 3; 
    1666         } 
    1667  
    1668         base64_string->string[offset] = '\0'; 
    1669          
    1670         return wi_autorelease(base64_string); 
     1587        return wi_data_base64(wi_string_data(string)); 
    16711588} 
    16721589 
  • libwired/trunk/libwired/data/wi-string.h

    r4540 r4557  
    6666WI_EXPORT wi_string_t *                                         wi_string_init_with_format(wi_string_t *, wi_string_t *, ...); 
    6767WI_EXPORT wi_string_t *                                         wi_string_init_with_format_and_arguments(wi_string_t *, wi_string_t *, va_list); 
     68WI_EXPORT wi_string_t *                                         wi_string_init_with_base64(wi_string_t *, wi_string_t *); 
    6869WI_EXPORT wi_string_t *                                         wi_string_init_with_contents_of_file(wi_string_t *, wi_string_t *); 
    6970