Changeset 4834
- Timestamp:
- 09/23/07 14:05:16 (6 years ago)
- Location:
- lm-sensors/branches/lm-sensors-3.0.0
- Files:
-
- 11 modified
-
lib/access.c (modified) (7 diffs)
-
lib/data.h (modified) (1 diff)
-
lib/init.c (modified) (1 diff)
-
lib/libsensors.3 (modified) (5 diffs)
-
lib/sensors.h (modified) (4 diffs)
-
lib/sysfs.c (modified) (2 diffs)
-
prog/sensord/chips.c (modified) (11 diffs)
-
prog/sensord/rrd.c (modified) (1 diff)
-
prog/sensord/sense.c (modified) (2 diffs)
-
prog/sensord/sensord.h (modified) (2 diffs)
-
prog/sensors/chips.c (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lm-sensors/branches/lm-sensors-3.0.0/lib/access.c
r4832 r4834 142 142 yourself). On failure, NULL is returned. 143 143 If no label exists for this feature, its name is returned itself. */ 144 char *sensors_get_label(const sensors_chip_name *name, int feature) 144 char *sensors_get_label(const sensors_chip_name *name, 145 const sensors_feature *feature) 145 146 { 146 147 char *label; 147 148 const sensors_chip *chip; 148 const sensors_subfeature *featureptr;149 149 char buf[128], path[PATH_MAX]; 150 150 FILE *f; … … 153 153 if (sensors_chip_name_has_wildcards(name)) 154 154 return NULL; 155 if (!(featureptr = sensors_lookup_feature_nr(name, feature)))156 return NULL;157 155 158 156 for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));) 159 157 for (i = 0; i < chip->labels_count; i++) 160 if (!strcmp(feature ptr->name, chip->labels[i].name)) {158 if (!strcmp(feature->name, chip->labels[i].name)) { 161 159 label = strdup(chip->labels[i].value); 162 160 goto sensors_get_label_exit; … … 164 162 165 163 /* No user specified label, check for a _label sysfs file */ 166 snprintf(path, PATH_MAX, "%s/%s_label", name->path, 167 featureptr->name); 164 snprintf(path, PATH_MAX, "%s/%s_label", name->path, feature->name); 168 165 169 166 if ((f = fopen(path, "r"))) { … … 179 176 180 177 /* No label, return the feature name instead */ 181 label = strdup(feature ptr->name);178 label = strdup(feature->name); 182 179 183 180 sensors_get_label_exit: … … 189 186 190 187 /* Looks up whether a feature should be ignored. Returns 191 1 if it should be ignored, 0 if not. This function takes 192 mappings into account. */ 188 1 if it should be ignored, 0 if not. */ 193 189 static int sensors_get_ignored(const sensors_chip_name *name, 194 const sensors_ subfeature *feature)190 const sensors_feature *feature) 195 191 { 196 192 const sensors_chip *chip; 197 const char *main_feature_name;198 193 int i; 199 200 if (feature->mapping == SENSORS_NO_MAPPING)201 main_feature_name = NULL;202 else203 main_feature_name = sensors_lookup_feature_nr(name,204 feature->mapping)->name;205 194 206 195 for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));) 207 196 for (i = 0; i < chip->ignores_count; i++) 208 if (!strcmp(feature->name, chip->ignores[i].name) || 209 (main_feature_name && 210 !strcmp(main_feature_name, chip->ignores[i].name))) 197 if (!strcmp(feature->name, chip->ignores[i].name)) 211 198 return 1; 212 199 return 0; … … 353 340 if (sensors_match_chip(&sensors_proc_chips[i].chip, name)) { 354 341 subfeature_list = sensors_proc_chips[i].subfeature; 355 while (*nr < sensors_proc_chips[i].subfeature_count 356 && sensors_get_ignored(name, &subfeature_list[*nr])) 357 (*nr)++; 358 if (*nr == sensors_proc_chips[i].subfeature_count) 342 if (*nr >= sensors_proc_chips[i].subfeature_count) 359 343 return NULL; 360 344 return &subfeature_list[(*nr)++]; … … 363 347 } 364 348 349 const sensors_feature * 350 sensors_get_features(const sensors_chip_name *name, int *nr) 351 { 352 const sensors_feature *feature_list; 353 int i; 354 355 for (i = 0; i < sensors_proc_chips_count; i++) 356 if (sensors_match_chip(&sensors_proc_chips[i].chip, name)) { 357 feature_list = sensors_proc_chips[i].feature; 358 while (*nr < sensors_proc_chips[i].feature_count 359 && sensors_get_ignored(name, &feature_list[*nr])) 360 (*nr)++; 361 if (*nr >= sensors_proc_chips[i].feature_count) 362 return NULL; 363 return &feature_list[(*nr)++]; 364 } 365 return NULL; /* end of list */ 366 } 367 365 368 const sensors_subfeature * 366 sensors_get_features(const sensors_chip_name *name, int *nr) 367 { 368 const sensors_subfeature *feature; 369 370 while ((feature = sensors_get_all_features(name, nr))) { 371 if (feature->mapping == SENSORS_NO_MAPPING) 372 return feature; 373 } 374 return NULL; /* end of list */ 375 } 376 377 const sensors_subfeature * 378 sensors_get_all_subfeatures(const sensors_chip_name *name, int feature, int *nr) 369 sensors_get_all_subfeatures(const sensors_chip_name *name, 370 const sensors_feature *feature, int *nr) 379 371 { 380 372 const sensors_subfeature *subfeature; 381 373 382 374 /* Seek directly to the first subfeature */ 383 if (*nr < feature )384 *nr = feature ;375 if (*nr < feature->first_subfeature) 376 *nr = feature->first_subfeature; 385 377 386 378 subfeature = sensors_get_all_features(name, nr); 387 379 if (!subfeature) 388 380 return NULL; /* end of list */ 389 if (subfeature->number == feature ||390 subfeature->mapping == feature )381 if (subfeature->number == feature->first_subfeature || 382 subfeature->mapping == feature->first_subfeature) 391 383 return subfeature; 392 384 return NULL; /* end of subfeature list */ -
lm-sensors/branches/lm-sensors-3.0.0/lib/data.h
r4832 r4834 124 124 typedef struct sensors_chip_features { 125 125 struct sensors_chip_name chip; 126 struct sensors_feature *feature; 126 127 struct sensors_subfeature *subfeature; 128 int feature_count; 127 129 int subfeature_count; 128 130 } sensors_chip_features; -
lm-sensors/branches/lm-sensors-3.0.0/lib/init.c
r4832 r4834 60 60 free(features->subfeature[i].name); 61 61 free(features->subfeature); 62 for (i = 0; i < features->feature_count; i++) 63 free(features->feature[i].name); 64 free(features->feature); 62 65 } 63 66 -
lm-sensors/branches/lm-sensors-3.0.0/lib/libsensors.3
r4832 r4834 37 37 \fBsensors_chip_name *res);\fP 38 38 .B const char *sensors_get_adapter_name(int bus_nr); 39 .B char *sensors_get_label(const sensors_chip_name *name, intfeature);\fP39 .B char *sensors_get_label(const sensors_chip_name *name, const sensors_feature *feature);\fP 40 40 .B int sensors_get_value(const sensors_chip_name *name, int feature, 41 41 \fBdouble *value);\fP … … 45 45 .B const sensors_chip_name *sensors_get_detected_chips(const sensors_chip_name 46 46 \fB*match, int *nr);\fP 47 .B const sensors_feature_data *sensors_get_features 48 \fB(const sensors_chip_name *name, int *nr);\fP 49 .B const sensors_feature_data *sensors_get_all_subfeatures 50 \fB(const sensors_chip_name *name, int feature, int *nr);\fP 47 .B const sensors_feature *sensors_get_features(const sensors_chip_name *name, int *nr);\fP 48 .B const sensors_subfeature *sensors_get_all_subfeatures(const sensors_chip_name *name, const sensors_feature *feature, int *nr);\fP 51 49 .B const char *libsensors_version; 52 50 .fi … … 74 72 sensors_chip_name structure. If it could not be found, it returns NULL. 75 73 76 \fBchar *sensors_get_label(const sensors_chip_name *name, intfeature);\fP74 \fBchar *sensors_get_label(const sensors_chip_name *name, const sensors_feature *feature);\fP 77 75 .br 78 76 Look up the label which belongs to this chip. Note that chip should not … … 125 123 (affected by the computation rules of the main feature). 126 124 127 \fBconst sensors_feature _data*sensors_get_features(const sensors_chip_name *name, int *nr);\fP125 \fBconst sensors_feature *sensors_get_features(const sensors_chip_name *name, int *nr);\fP 128 126 .br 129 127 This returns all main features of a specific chip. nr is an internally … … 133 131 data structures. 134 132 135 \fBconst sensors_ feature_data *sensors_get_all_subfeatures(const sensors_chip_name *name, intfeature, int *nr);\fP133 \fBconst sensors_subfeature *sensors_get_all_subfeatures(const sensors_chip_name *name, const sensors_feature *feature, int *nr);\fP 136 134 .br 137 135 This returns all subfeatures of a given main feature (including that 138 136 main feature itself, in first position.) nr is an internally used 139 137 variable. Set it to zero to start at the begin of the list. If no more 140 features are found NULL is returned.138 subfeatures are found NULL is returned. 141 139 Do not try to change the returned structure; you will corrupt internal 142 140 data structures. -
lm-sensors/branches/lm-sensors-3.0.0/lib/sensors.h
r4832 r4834 83 83 const char *sensors_get_adapter_name(const sensors_bus_id *bus); 84 84 85 typedef struct sensors_feature sensors_feature; 86 85 87 /* Look up the label which belongs to this chip. Note that chip should not 86 88 contain wildcard values! The returned string is newly allocated (free it 87 89 yourself). On failure, NULL is returned. 88 90 If no label exists for this feature, its name is returned itself. */ 89 char *sensors_get_label(const sensors_chip_name *name, int feature); 91 char *sensors_get_label(const sensors_chip_name *name, 92 const sensors_feature *feature); 90 93 91 94 /* Read the value of a feature of a certain chip. Note that chip should not … … 163 166 SENSORS_FEATURE_UNKNOWN = INT_MAX, 164 167 } sensors_feature_type; 168 169 /* Data about a single chip feature (or category leader) */ 170 struct sensors_feature { 171 char *name; 172 int first_subfeature; 173 sensors_feature_type type; 174 }; 165 175 166 176 /* Data about a single chip subfeature: … … 189 199 Do not try to change the returned structure; you will corrupt internal 190 200 data structures. */ 191 const sensors_ subfeature *201 const sensors_feature * 192 202 sensors_get_features(const sensors_chip_name *name, int *nr); 193 203 … … 199 209 data structures. */ 200 210 const sensors_subfeature * 201 sensors_get_all_subfeatures(const sensors_chip_name *name, int feature, int *nr); 211 sensors_get_all_subfeatures(const sensors_chip_name *name, 212 const sensors_feature *feature, int *nr); 202 213 203 214 #ifdef __cplusplus -
lm-sensors/branches/lm-sensors-3.0.0/lib/sysfs.c
r4832 r4834 164 164 sensors_subfeature *features; 165 165 sensors_subfeature *dyn_subfeatures; 166 sensors_feature *dyn_features; 166 167 167 168 attrs = sysfs_get_device_attributes(sysdir); … … 290 291 chip->subfeature_count = fnum; 291 292 293 /* And now the main features */ 294 fnum = 0; 295 for (i = 0; i < chip->subfeature_count; i++) { 296 if (chip->subfeature[i].mapping == SENSORS_NO_MAPPING) 297 fnum++; 298 } 299 300 dyn_features = calloc(fnum, sizeof(sensors_feature)); 301 if (dyn_features == NULL) { 302 sensors_fatal_error(__FUNCTION__, "Out of memory"); 303 } 304 305 fnum = 0; 306 for (i = 0; i < chip->subfeature_count; i++) { 307 if (chip->subfeature[i].mapping == SENSORS_NO_MAPPING) { 308 dyn_features[fnum].name = strdup(chip->subfeature[i].name); 309 dyn_features[fnum].first_subfeature = i; 310 dyn_features[fnum].type = chip->subfeature[i].type; 311 fnum++; 312 } 313 } 314 315 chip->feature = dyn_features; 316 chip->feature_count = fnum; 317 292 318 exit_free: 293 319 free(features); -
lm-sensors/branches/lm-sensors-3.0.0/prog/sensord/chips.c
r4833 r4834 142 142 143 143 static void getAvailableFeatures (const sensors_chip_name *name, 144 const sensors_ subfeature *feature,144 const sensors_feature *feature, 145 145 short *has_features, 146 146 int *feature_nrs, int size, … … 150 150 int i = 0; 151 151 152 while ((iter = sensors_get_all_subfeatures(name, feature ->number, &i))) {152 while ((iter = sensors_get_all_subfeatures(name, feature, &i))) { 153 153 int index0; 154 154 … … 167 167 static void fillChipVoltage (FeatureDescriptor *voltage, 168 168 const sensors_chip_name *name, 169 const sensors_ subfeature *feature)169 const sensors_feature *feature) 170 170 { 171 171 const int size = SENSORS_FEATURE_IN_BEEP - SENSORS_FEATURE_IN + 1; … … 216 216 static void fillChipTemperature (FeatureDescriptor *temperature, 217 217 const sensors_chip_name *name, 218 const sensors_ subfeature *feature)218 const sensors_feature *feature) 219 219 { 220 220 const int size = SENSORS_FEATURE_TEMP_BEEP - SENSORS_FEATURE_TEMP + 1; … … 268 268 static void fillChipFan (FeatureDescriptor *fan, 269 269 const sensors_chip_name *name, 270 const sensors_ subfeature *feature)270 const sensors_feature *feature) 271 271 { 272 272 const int size = SENSORS_FEATURE_FAN_BEEP - SENSORS_FEATURE_FAN + 1; … … 313 313 314 314 static void fillChipVid (FeatureDescriptor *vid, 315 const sensors_subfeature *feature) 316 { 315 const sensors_chip_name *name, 316 const sensors_feature *feature) 317 { 318 int i = 0; 319 const sensors_subfeature *sub; 320 321 sub = sensors_get_all_subfeatures(name, feature, &i); 322 if (!sub) 323 return; 324 317 325 vid->format = fmtVolt_3; 318 326 vid->rrd = rrdF3; … … 320 328 vid->alarmNumber = -1; 321 329 vid->beepNumber = -1; 322 vid->dataNumbers[0] = feature->number;330 vid->dataNumbers[0] = sub->number; 323 331 vid->dataNumbers[1] = -1; 324 332 } 325 333 326 334 static void fillChipBeepEnable (FeatureDescriptor *beepen, 327 const sensors_subfeature *feature) 328 { 335 const sensors_chip_name *name, 336 const sensors_feature *feature) 337 { 338 int i = 0; 339 const sensors_subfeature *sub; 340 341 sub = sensors_get_all_subfeatures(name, feature, &i); 342 if (!sub) 343 return; 344 329 345 beepen->format = fmtSoundAlarm; 330 346 beepen->rrd = rrdF0; … … 332 348 beepen->alarmNumber = -1; 333 349 beepen->beepNumber = -1; 334 beepen->dataNumbers[0] = feature->number;350 beepen->dataNumbers[0] = sub->number; 335 351 beepen->dataNumbers[1] = -1; 336 352 } … … 340 356 { 341 357 int nr, count = 1; 342 const sensors_ subfeature *sensor;358 const sensors_feature *sensor; 343 359 FeatureDescriptor *features; 344 360 … … 368 384 break; 369 385 case SENSORS_FEATURE_VID: 370 fillChipVid(&features[count], sensor);386 fillChipVid(&features[count], chip, sensor); 371 387 break; 372 388 case SENSORS_FEATURE_BEEP_ENABLE: 373 fillChipBeepEnable(&features[count], sensor);389 fillChipBeepEnable(&features[count], chip, sensor); 374 390 break; 375 391 default: … … 377 393 } 378 394 395 features[count].feature = sensor; 379 396 count++; 380 397 } -
lm-sensors/branches/lm-sensors-3.0.0/prog/sensord/rrd.c
r4828 r4834 157 157 for (index0 = 0; (ret == 0) && (num < MAX_RRD_SENSORS) && features[index0].format; ++ index0) { 158 158 const FeatureDescriptor *feature = features + index0; 159 int labelNumber = feature->dataNumbers[0]; 160 const char *rawLabel = NULL; 159 const char *rawLabel = features->feature->name; 161 160 char *label = NULL; 162 161 163 if (getRawLabel (chip, labelNumber, &rawLabel)) { 164 sensorLog (LOG_ERR, "Error getting raw sensor label: %s/#%d", chip->prefix, labelNumber); 165 ret = -1; 166 } else if (!(label = sensors_get_label (chip, labelNumber))) { 167 sensorLog (LOG_ERR, "Error getting sensor label: %s/#%d", chip->prefix, labelNumber); 162 if (!(label = sensors_get_label (chip, features->feature))) { 163 sensorLog (LOG_ERR, "Error getting sensor label: %s/%s", chip->prefix, rawLabel); 168 164 ret = -1; 169 165 } else { -
lm-sensors/branches/lm-sensors-3.0.0/prog/sensord/sense.c
r4832 r4834 33 33 #define DO_SET 2 34 34 #define DO_RRD 3 35 36 int37 getRawLabel38 (const sensors_chip_name *name, int feature, const char **label) {39 const sensors_subfeature *mainfeat, *sub;40 int a, b;41 42 a = 0;43 while ((mainfeat = sensors_get_features(name, &a))) {44 b = 0;45 while ((sub = sensors_get_all_subfeatures(name, mainfeat->number, &b))) {46 if (sub->number == feature) {47 *label = sub->name;48 return 0;49 }50 }51 }52 /* TODO: Ensure labels match RRD construct and are not repeated! */53 return -1;54 }55 35 56 36 static const char * … … 88 68 for (index0 = 0; (ret == 0) && features[index0].format; ++ index0) { 89 69 const FeatureDescriptor *feature = features + index0; 90 int labelNumber = feature->dataNumbers[0];91 70 int alarm, beep; 92 71 char *label = NULL; 93 72 94 if (!(label = sensors_get_label (chip, labelNumber))) {95 sensorLog (LOG_ERR, "Error getting sensor label: %s/ #%d", chip->prefix, labelNumber);73 if (!(label = sensors_get_label (chip, feature->feature))) { 74 sensorLog (LOG_ERR, "Error getting sensor label: %s/%s", chip->prefix, feature->feature->name); 96 75 ret = 22; 97 76 } else { -
lm-sensors/branches/lm-sensors-3.0.0/prog/sensord/sensord.h
r4828 r4834 57 57 /* from sense.c */ 58 58 59 extern int getRawLabel (const sensors_chip_name *name, int feature, const char **label);60 61 59 extern int readChips (void); 62 60 extern int scanChips (void); … … 92 90 int alarmNumber; 93 91 int beepNumber; 94 int dataNumbers[MAX_DATA + 1]; /* First entry is used for the label */ 92 const sensors_feature *feature; 93 int dataNumbers[MAX_DATA + 1]; 95 94 } FeatureDescriptor; 96 95 -
lm-sensors/branches/lm-sensors-3.0.0/prog/sensors/chips.c
r4833 r4834 32 32 { 33 33 int a, b; 34 const sensors_subfeature *feature, *sub; 34 const sensors_feature *feature; 35 const sensors_subfeature *sub; 35 36 char *label; 36 37 double val; … … 38 39 a = 0; 39 40 while ((feature = sensors_get_features(name, &a))) { 41 if (!(label = sensors_get_label(name, feature))) { 42 printf("ERROR: Can't get feature label!\n"); 43 continue; 44 } 45 printf("%s:\n", label); 46 free(label); 47 40 48 b = 0; 41 while ((sub = sensors_get_all_subfeatures(name, feature->number, 42 &b))) { 43 if (!(label = sensors_get_label(name, sub->number))) { 44 printf("ERROR: Can't get feature `%s' label!\n", 45 sub->name); 46 continue; 47 } 49 while ((sub = sensors_get_all_subfeatures(name, feature, &b))) { 48 50 if (sub->flags & SENSORS_MODE_R) { 49 51 if (sensors_get_value(name, sub->number, &val)) 50 52 printf("ERROR: Can't get feature `%s' " 51 53 "data!\n", sub->name); 52 else if (sub->mapping != SENSORS_NO_MAPPING)53 printf(" %s: %.2f\n", label, val);54 54 else 55 printf("%s: %.2f (%s)\n", label, val, 56 sub->name); 55 printf(" %s: %.2f\n", sub->name, val); 57 56 } else 58 57 printf("(%s)\n", label); 59 free(label);60 58 } 61 59 } … … 74 72 75 73 static void sensors_get_available_features(const sensors_chip_name *name, 76 const sensors_ subfeature *feature,74 const sensors_feature *feature, 77 75 short *has_features, 78 76 double *feature_vals, int size, … … 82 80 int i = 0; 83 81 84 while ((iter = sensors_get_all_subfeatures(name, feature ->number, &i))) {82 while ((iter = sensors_get_all_subfeatures(name, feature, &i))) { 85 83 int indx, err; 86 84 … … 104 102 { 105 103 int i; 106 const sensors_ subfeature *iter;104 const sensors_feature *iter; 107 105 char *label; 108 106 unsigned int max_size = 11; /* 11 as minumum label width */ … … 110 108 i = 0; 111 109 while ((iter = sensors_get_features(name, &i))) { 112 if ((label = sensors_get_label(name, iter ->number)) &&110 if ((label = sensors_get_label(name, iter)) && 113 111 strlen(label) > max_size) 114 112 max_size = strlen(label); … … 144 142 #define TEMP_FEATURE_VAL(x) feature_vals[x - SENSORS_FEATURE_TEMP] 145 143 static void print_chip_temp(const sensors_chip_name *name, 146 const sensors_ subfeature *feature,144 const sensors_feature *feature, 147 145 int label_size) 148 146 { … … 155 153 double feature_vals[SENSORS_FEATURE_TEMP_TYPE - SENSORS_FEATURE_TEMP + 1] = { 0.0, }; 156 154 157 if (!(label = sensors_get_label(name, feature ->number))) {155 if (!(label = sensors_get_label(name, feature))) { 158 156 printf("ERROR: Can't get temperature label!\n"); 159 157 return; … … 277 275 #define IN_FEATURE_VAL(x) feature_vals[x - SENSORS_FEATURE_IN] 278 276 static void print_chip_in(const sensors_chip_name *name, 279 const sensors_ subfeature *feature,277 const sensors_feature *feature, 280 278 int label_size) 281 279 { … … 286 284 char *label; 287 285 288 if (!(label = sensors_get_label(name, feature ->number))) {286 if (!(label = sensors_get_label(name, feature))) { 289 287 printf("ERROR: Can't get in label!\n"); 290 288 return; … … 337 335 #define FAN_FEATURE_VAL(x) feature_vals[x - SENSORS_FEATURE_FAN] 338 336 static void print_chip_fan(const sensors_chip_name *name, 339 const sensors_ subfeature *feature,337 const sensors_feature *feature, 340 338 int label_size) 341 339 { … … 346 344 double val; 347 345 348 if (!(label = sensors_get_label(name, feature ->number))) {346 if (!(label = sensors_get_label(name, feature))) { 349 347 printf("ERROR: Can't get fan label!\n"); 350 348 return; … … 384 382 } 385 383 386 static void print_chip_vid(const sensors_chip_name *name, int f_vid, 384 static void print_chip_vid(const sensors_chip_name *name, 385 const sensors_feature *feature, 387 386 int label_size) 388 387 { 389 388 char *label; 389 const sensors_subfeature *subfeature; 390 390 double vid; 391 392 if ((label = sensors_get_label(name, f_vid)) 393 && !sensors_get_value(name, f_vid, &vid)) { 391 int i = 0; 392 393 subfeature = sensors_get_all_subfeatures(name, feature, &i); 394 if (!subfeature) 395 return; 396 397 if ((label = sensors_get_label(name, feature)) 398 && !sensors_get_value(name, subfeature->number, &vid)) { 394 399 print_label(label, label_size); 395 400 printf("%+6.3f V\n", vid); … … 398 403 } 399 404 400 static void print_chip_beep_enable(const sensors_chip_name *name, int f_beep, 405 static void print_chip_beep_enable(const sensors_chip_name *name, 406 const sensors_feature *feature, 401 407 int label_size) 402 408 { 403 409 char *label; 410 const sensors_subfeature *subfeature; 404 411 double beep_enable; 405 406 if ((label = sensors_get_label(name, f_beep)) 407 && !sensors_get_value(name, f_beep, &beep_enable)) { 412 int i = 0; 413 414 subfeature = sensors_get_all_subfeatures(name, feature, &i); 415 if (!subfeature) 416 return; 417 418 if ((label = sensors_get_label(name, feature)) 419 && !sensors_get_value(name, subfeature->number, &beep_enable)) { 408 420 print_label(label, label_size); 409 421 printf("%s\n", beep_enable ? "enabled" : "disabled"); … … 414 426 void print_chip(const sensors_chip_name *name) 415 427 { 416 const sensors_ subfeature *feature;428 const sensors_feature *feature; 417 429 int i, label_size; 418 430 … … 432 444 break; 433 445 case SENSORS_FEATURE_VID: 434 print_chip_vid(name, feature ->number, label_size);446 print_chip_vid(name, feature, label_size); 435 447 break; 436 448 case SENSORS_FEATURE_BEEP_ENABLE: 437 print_chip_beep_enable(name, feature->number, 438 label_size); 449 print_chip_beep_enable(name, feature, label_size); 439 450 break; 440 451 default:
