Changeset 4839

Show
Ignore:
Timestamp:
09/23/07 14:18:46 (6 years ago)
Author:
khali
Message:

We can plain skip the feature lookup and compute statement search for
subfeatures with no compute mapping.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/branches/lm-sensors-3.0.0/lib/access.c

    r4838 r4839  
    227227{ 
    228228        const sensors_subfeature *subfeature; 
    229         const sensors_feature *feature; 
    230         const sensors_chip *chip; 
    231229        const sensors_expr *expr = NULL; 
    232230        double val; 
     
    237235        if (!(subfeature = sensors_lookup_subfeature_nr(name, subfeat_nr))) 
    238236                return -SENSORS_ERR_NO_ENTRY; 
    239  
    240         if (subfeature->flags & SENSORS_COMPUTE_MAPPING) 
     237        if (!(subfeature->flags & SENSORS_MODE_R)) 
     238                return -SENSORS_ERR_ACCESS_R; 
     239 
     240        /* Apply compute statement if it exists */ 
     241        if (subfeature->flags & SENSORS_COMPUTE_MAPPING) { 
     242                const sensors_feature *feature; 
     243                const sensors_chip *chip; 
     244 
    241245                feature = sensors_lookup_feature_nr(name, 
    242246                                        subfeature->mapping); 
    243         else 
    244                 feature = NULL; 
    245  
    246         if (!(subfeature->flags & SENSORS_MODE_R)) 
    247                 return -SENSORS_ERR_ACCESS_R; 
    248         for (chip = NULL; 
    249              !expr && (chip = sensors_for_all_config_chips(name, chip));) 
    250                 for (i = 0; !expr && (i < chip->computes_count); i++) { 
    251                         if (feature && !strcmp(feature->name, 
    252                                                chip->computes[i].name)) { 
    253                                 expr = chip->computes[i].from_proc; 
     247 
     248                chip = NULL; 
     249                while ((chip = sensors_for_all_config_chips(name, chip))) 
     250                        for (i = 0; i < chip->computes_count; i++) { 
     251                                if (!strcmp(feature->name, 
     252                                            chip->computes[i].name)) { 
     253                                        expr = chip->computes[i].from_proc; 
     254                                        break; 
     255                                } 
    254256                        } 
    255                 } 
     257        } 
     258 
    256259        if (sensors_read_sysfs_attr(name, subfeat_nr, &val)) 
    257260                return -SENSORS_ERR_PROC; 
     
    270273{ 
    271274        const sensors_subfeature *subfeature; 
    272         const sensors_feature *feature; 
    273         const sensors_chip *chip; 
    274275        const sensors_expr *expr = NULL; 
    275276        int i, res; 
     
    280281        if (!(subfeature = sensors_lookup_subfeature_nr(name, subfeat_nr))) 
    281282                return -SENSORS_ERR_NO_ENTRY; 
    282  
    283         if (subfeature->flags & SENSORS_COMPUTE_MAPPING) 
     283        if (!(subfeature->flags & SENSORS_MODE_W)) 
     284                return -SENSORS_ERR_ACCESS_W; 
     285 
     286        /* Apply compute statement if it exists */ 
     287        if (subfeature->flags & SENSORS_COMPUTE_MAPPING) { 
     288                const sensors_feature *feature; 
     289                const sensors_chip *chip; 
     290 
    284291                feature = sensors_lookup_feature_nr(name, 
    285292                                        subfeature->mapping); 
    286         else 
    287                 feature = NULL; 
    288  
    289         if (!(subfeature->flags & SENSORS_MODE_W)) 
    290                 return -SENSORS_ERR_ACCESS_W; 
    291         for (chip = NULL; 
    292              !expr && (chip = sensors_for_all_config_chips(name, chip));) 
    293                 for (i = 0; !expr && (i < chip->computes_count); i++) { 
    294                         if (feature && !strcmp(feature->name, 
    295                                                chip->computes[i].name)) { 
    296                                 expr = chip->computes[i].to_proc; 
     293 
     294                chip = NULL; 
     295                while ((chip = sensors_for_all_config_chips(name, chip))) 
     296                        for (i = 0; i < chip->computes_count; i++) { 
     297                                if (!strcmp(feature->name, 
     298                                            chip->computes[i].name)) { 
     299                                        expr = chip->computes[i].to_proc; 
     300                                        break; 
     301                                } 
    297302                        } 
    298                 } 
     303        } 
    299304 
    300305        to_write = value;