Changeset 5508 for libwired

Show
Ignore:
Timestamp:
05/08/08 13:50:55 (7 months ago)
Author:
morris
Message:

Keep better track of changed config keys

Files:

Legend:

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

    r5445 r5508  
    130130 
    131131wi_boolean_t wi_config_read_file(wi_config_t *config) { 
     132        wi_enumerator_t                 *enumerator; 
    132133        wi_runtime_instance_t   *instance; 
    133134        wi_file_t                               *file; 
    134135        wi_array_t                              *array; 
     136        wi_hash_t                               *previous_values; 
    135137        wi_string_t                             *string, *name, *value; 
    136138        wi_config_type_t                type; 
     
    151153        wi_lock_lock(config->lock); 
    152154         
    153         if(config->values) 
    154                 wi_release(config->values); 
    155         else 
    156                 wi_set_add_data_from_array(config->changes, wi_hash_all_keys(config->types)); 
     155        previous_values = config->values; 
    157156         
    158157        config->values = wi_hash_init(wi_hash_alloc()); 
     
    193192                } 
    194193        } 
     194         
     195        enumerator = wi_hash_key_enumerator(config->values); 
     196         
     197        while((name = wi_enumerator_next_data(enumerator))) { 
     198                instance = wi_hash_data_for_key(config->values, name); 
     199                 
     200                if(!previous_values || !wi_is_equal(instance, wi_hash_data_for_key(previous_values, name))) 
     201                        wi_set_add_data(config->changes, name); 
     202        } 
     203         
     204        wi_release(previous_values); 
    195205 
    196206        wi_lock_unlock(config->lock);