Exemplo n.º 1
0
wi_data_t * wi_file_read_to_end_of_file(wi_file_t *file) {
    wi_mutable_data_t   *data;
    char                buffer[WI_FILE_BUFFER_SIZE];
    wi_integer_t        bytes;
    
    _WI_FILE_ASSERT_OPEN(file);
    
    data = wi_data_init_with_capacity(wi_mutable_data_alloc(), WI_FILE_BUFFER_SIZE);
    
    while(true) {
        bytes = wi_file_read_bytes(file, buffer, sizeof(buffer));
        
        if(bytes <= 0)
            break;

        wi_mutable_data_append_bytes(data, buffer, bytes);
    }

    if(bytes < 0) {
        wi_release(data);
        
        data = NULL;
    }
    
    wi_runtime_make_immutable(data);
    
    return wi_autorelease(data);
}
Exemplo n.º 2
0
wi_data_t * wi_file_read(wi_file_t *file, wi_uinteger_t length) {
    wi_mutable_data_t   *data;
    char                buffer[WI_FILE_BUFFER_SIZE];
    wi_integer_t        bytes = -1;
    
    _WI_FILE_ASSERT_OPEN(file);
    
    data = wi_data_init_with_capacity(wi_mutable_data_alloc(), length);
    
    while(length > 0) {
        bytes = wi_file_read_bytes(file, buffer, WI_MIN(sizeof(buffer), length));
        
        if(bytes <= 0)
            break;
        
        wi_mutable_data_append_bytes(data, buffer, bytes);
        
        length -= bytes;
    }
    
    if(bytes < 0) {
        wi_release(data);
        
        data = NULL;
    }
    
    wi_runtime_make_immutable(data);

    return wi_autorelease(data);
}
Exemplo n.º 3
0
wi_data_t * wi_data_init_with_contents_of_file(wi_data_t *data, wi_string_t *path) {
	wi_file_t		*file;
	wi_fs_stat_t	sb;
	char			buffer[WI_FILE_BUFFER_SIZE];
	wi_integer_t	bytes;
	
	if(!wi_fs_stat_path(path, &sb)) {
		wi_release(data);
		
		return NULL;
	}
	
	file = wi_file_for_reading(path);
	
	if(!file) {
		wi_release(data);
		
		return NULL;
	}
	
	data = wi_data_init_with_capacity(data, sb.size);
	
	while((bytes = wi_file_read_buffer(file, buffer, sizeof(buffer))))
		_wi_data_append_bytes(data, buffer, bytes);
	
	return data;
}
Exemplo n.º 4
0
wi_data_t * wi_data_init_with_random_bytes(wi_data_t *data, wi_uinteger_t length) {
	data = wi_data_init_with_capacity(data, length);
	
	wi_random_get_bytes(data->bytes, length);
	
	data->length = length;
	
	return data;
}
Exemplo n.º 5
0
wi_data_t * wi_data_init_with_bytes(wi_data_t *data, const void *bytes, wi_uinteger_t length) {
	data = wi_data_init_with_capacity(data, length);

	memcpy(data->bytes, bytes, length);
	
	data->length = length;

	return data;
}
Exemplo n.º 6
0
wi_data_t * wi_data_init(wi_data_t *data) {
	return wi_data_init_with_capacity(data, 0);
}