Changeset 4617

Show
Ignore:
Timestamp:
02/14/07 11:55:49 (2 years ago)
Author:
morris
Message:

Make wi_string_init_with_contents_of_file() use wi_file_read_to_end_of_file() again

Fix wi_file_read_to_end_of_file() so that it doesn't attempt to allocate massive amounts of memory

Some size_t -> wi_uinteger_t changes

Files:

Legend:

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

    r4590 r4617  
    218218 
    219219 
    220 wi_string_t * wi_string_with_bytes(const char *buffer, size_t size) { 
     220wi_string_t * wi_string_with_bytes(const void *buffer, wi_uinteger_t size) { 
    221221        return wi_autorelease(wi_string_init_with_bytes(wi_string_alloc(), buffer, size)); 
    222222} 
     
    264264 
    265265 
    266 wi_string_t * wi_string_init_with_bytes(wi_string_t *string, const char *buffer, size_t size) { 
     266wi_string_t * wi_string_init_with_bytes(wi_string_t *string, const void *buffer, wi_uinteger_t size) { 
    267267        string = wi_string_init_with_capacity(string, size); 
    268268         
     
    327327 
    328328wi_string_t * wi_string_init_with_contents_of_file(wi_string_t *string, wi_string_t *path) { 
    329         struct stat             sb; 
    330         FILE                    *fp; 
    331         const char              *cstring; 
    332         char                    buffer[BUFSIZ]; 
    333         size_t                  bytes; 
    334  
    335         cstring = wi_string_cstring(path); 
    336          
    337         if(stat(cstring, &sb) < 0) { 
    338                 wi_error_set_errno(errno); 
    339                  
    340                 wi_release(string); 
    341                  
    342                 return NULL; 
    343         } 
    344  
    345         fp = fopen(cstring, "r"); 
    346  
    347         if(!fp) { 
    348                 wi_error_set_errno(errno); 
    349  
    350                 wi_release(string); 
    351                  
    352                 return NULL; 
    353         } 
    354          
    355         string = wi_string_init_with_capacity(string, sb.st_size); 
    356          
    357         while((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) 
    358                 wi_string_append_bytes(string, buffer, bytes); 
    359          
    360         fclose(fp); 
    361  
    362         return string; 
     329        wi_file_t       *file;  
     330         
     331        file = wi_file_for_reading(path);  
     332         
     333        if(!file) {  
     334                wi_release(string);  
     335                 
     336                return NULL;  
     337        }  
     338         
     339        return wi_file_read_to_end_of_file(file);  
    363340} 
    364341 
     
    776753 
    777754 
    778 void wi_string_append_bytes(wi_string_t *string, const char *buffer, size_t length) { 
     755void wi_string_append_bytes(wi_string_t *string, const void *buffer, wi_uinteger_t length) { 
    779756        _WI_STRING_GROW(string, length); 
    780757         
     
    787764 
    788765 
    789 wi_string_t * wi_string_by_appending_bytes(wi_string_t *string, const char *buffer, size_t length) { 
     766wi_string_t * wi_string_by_appending_bytes(wi_string_t *string, const void *buffer, wi_uinteger_t length) { 
    790767        wi_string_t             *newstring; 
    791768         
     
    16061583        wi_string_t                     *base64_string; 
    16071584        unsigned char           inbuffer[3], outbuffer[4]; 
    1608         wi_uinteger_t           i, count, position, offset, remaining; 
    1609         size_t                          size; 
     1585        wi_uinteger_t           i, count, position, offset, remaining, size; 
    16101586 
    16111587        position = offset = 0; 
  • libwired/trunk/libwired/data/wi-string.h

    r4578 r4617  
    5656WI_EXPORT wi_string_t *                                         wi_string_with_cstring(const char *); 
    5757WI_EXPORT wi_string_t *                                         wi_string_with_format(wi_string_t *, ...); 
    58 WI_EXPORT wi_string_t *                                         wi_string_with_bytes(const char *, size_t); 
     58WI_EXPORT wi_string_t *                                         wi_string_with_bytes(const void *, wi_uinteger_t); 
    5959 
    6060WI_EXPORT wi_string_t *                                         wi_string_alloc(void); 
     
    6363WI_EXPORT wi_string_t *                                         wi_string_init_with_cstring(wi_string_t *, const char *); 
    6464WI_EXPORT wi_string_t *                                         wi_string_init_with_data(wi_string_t *, wi_data_t *); 
    65 WI_EXPORT wi_string_t *                                         wi_string_init_with_bytes(wi_string_t *, const char *, size_t); 
     65WI_EXPORT wi_string_t *                                         wi_string_init_with_bytes(wi_string_t *, const void *, wi_uinteger_t); 
    6666WI_EXPORT wi_string_t *                                         wi_string_init_random_string_with_length(wi_string_t *, wi_uinteger_t); 
    6767WI_EXPORT wi_string_t *                                         wi_string_init_with_format(wi_string_t *, wi_string_t *, ...); 
     
    8484WI_EXPORT void                                                          wi_string_append_cstring(wi_string_t *, const char *); 
    8585WI_EXPORT wi_string_t *                                         wi_string_by_appending_cstring(wi_string_t *, const char *); 
    86 WI_EXPORT void                                                          wi_string_append_bytes(wi_string_t *, const char *, size_t); 
    87 WI_EXPORT wi_string_t *                                         wi_string_by_appending_bytes(wi_string_t *, const char *, size_t); 
     86WI_EXPORT void                                                          wi_string_append_bytes(wi_string_t *, const void *, wi_uinteger_t); 
     87WI_EXPORT wi_string_t *                                         wi_string_by_appending_bytes(wi_string_t *, const void *, wi_uinteger_t); 
    8888WI_EXPORT void                                                          wi_string_append_string(wi_string_t *, wi_string_t *); 
    8989WI_EXPORT wi_string_t *                                         wi_string_by_appending_string(wi_string_t *, wi_string_t *); 
  • libwired/trunk/libwired/file/wi-file.c

    r4590 r4617  
    738738#pragma mark - 
    739739 
    740 wi_string_t * wi_file_read(wi_file_t *file, size_t length) { 
     740wi_string_t * wi_file_read(wi_file_t *file, wi_uinteger_t length) { 
    741741        wi_string_t             *string; 
    742742        char                    buffer[WI_FILE_BUFFER_SIZE]; 
    743         int                           bytes = -1; 
     743        wi_integer_t  bytes = -1; 
    744744         
    745745        _WI_FILE_ASSERT_OPEN(file); 
     
    780780 
    781781wi_string_t * wi_file_read_to_end_of_file(wi_file_t *file) { 
    782         return wi_file_read(file, UINT_MAX); 
     782        wi_string_t             *string; 
     783        char                    buffer[WI_FILE_BUFFER_SIZE]; 
     784        wi_integer_t    bytes; 
     785         
     786        string = wi_string_init(wi_string_alloc()); 
     787         
     788        while((bytes = wi_file_read_buffer(file, buffer, sizeof(buffer)))) 
     789                wi_string_append_bytes(string, buffer, bytes); 
     790         
     791        if(bytes <= 0) { 
     792                wi_release(string); 
     793                 
     794                string = NULL; 
     795        } 
     796         
     797        return wi_autorelease(string); 
    783798} 
    784799 
     
    837852 
    838853 
    839 wi_integer_t wi_file_read_buffer(wi_file_t *file, char *buffer, size_t length) { 
     854wi_integer_t wi_file_read_buffer(wi_file_t *file, void *buffer, wi_uinteger_t length) { 
    840855        wi_integer_t    bytes; 
    841856         
     
    872887 
    873888 
    874 wi_integer_t wi_file_write_buffer(wi_file_t *file, const char *buffer, size_t length) { 
     889wi_integer_t wi_file_write_buffer(wi_file_t *file, const void *buffer, wi_uinteger_t length) { 
    875890        wi_integer_t    bytes; 
    876891         
  • libwired/trunk/libwired/file/wi-file.h

    r4447 r4617  
    102102WI_EXPORT int                                           wi_file_descriptor(wi_file_t *); 
    103103 
    104 WI_EXPORT wi_string_t *                         wi_file_read(wi_file_t *, size_t); 
     104WI_EXPORT wi_string_t *                         wi_file_read(wi_file_t *, wi_uinteger_t); 
    105105WI_EXPORT wi_string_t *                         wi_file_read_to_end_of_file(wi_file_t *); 
    106106WI_EXPORT wi_string_t *                         wi_file_read_line(wi_file_t *); 
    107107WI_EXPORT wi_string_t *                         wi_file_read_config_line(wi_file_t *); 
    108108WI_EXPORT wi_string_t *                         wi_file_read_to_string(wi_file_t *, wi_string_t *); 
    109 WI_EXPORT wi_integer_t                          wi_file_read_buffer(wi_file_t *, char *, size_t); 
     109WI_EXPORT wi_integer_t                          wi_file_read_buffer(wi_file_t *, void *, wi_uinteger_t); 
    110110WI_EXPORT wi_integer_t                          wi_file_write(wi_file_t *, wi_string_t *, ...); 
    111 WI_EXPORT wi_integer_t                          wi_file_write_buffer(wi_file_t *, const char *, size_t); 
     111WI_EXPORT wi_integer_t                          wi_file_write_buffer(wi_file_t *, const void *, wi_uinteger_t); 
    112112 
    113113WI_EXPORT void                                          wi_file_seek(wi_file_t *, wi_file_offset_t);