/* * var_lmSensorsTable(): * Handle this table separately from the scalar value case. * The workings of this are basically the same as for var_lmSensors above. */ unsigned char * var_lmSensorsTable(struct variable *vp, oid * name, size_t * length, int exact, size_t * var_len, WriteMethod ** write_method) { static long long_ret; static char string[SPRINT_MAX_LEN]; int s_index; int s_type = -1; int n_sensors; unsigned char* ret = NULL; _sensor s; if (sensor_load()) { ret = NULL; goto leaving; } switch (vp->magic) { case LMTEMPSENSORSINDEX: case LMTEMPSENSORSDEVICE: case LMTEMPSENSORSVALUE: s_type = TEMP_TYPE; n_sensors = sensor_array[s_type].n; break; case LMFANSENSORSINDEX: case LMFANSENSORSDEVICE: case LMFANSENSORSVALUE: s_type = FAN_TYPE; n_sensors = sensor_array[s_type].n; break; case LMVOLTSENSORSINDEX: case LMVOLTSENSORSDEVICE: case LMVOLTSENSORSVALUE: s_type = VOLT_TYPE; n_sensors = sensor_array[s_type].n; break; case LMMISCSENSORSINDEX: case LMMISCSENSORSDEVICE: case LMMISCSENSORSVALUE: s_type = MISC_TYPE; n_sensors = sensor_array[s_type].n; break; default: s_type = -1; n_sensors = 0; } if (header_simple_table(vp, name, length, exact, var_len, write_method, n_sensors) == MATCH_FAILED) { ret = NULL; goto leaving; } if (s_type < 0) { ret = NULL; goto leaving; } s_index = name[*length - 1] - 1; s = sensor_array[s_type].sensor[s_index]; switch (vp->magic) { case LMTEMPSENSORSINDEX: case LMFANSENSORSINDEX: case LMVOLTSENSORSINDEX: case LMMISCSENSORSINDEX: long_ret = s_index; ret = (unsigned char *) &long_ret; goto leaving; case LMTEMPSENSORSDEVICE: case LMFANSENSORSDEVICE: case LMVOLTSENSORSDEVICE: case LMMISCSENSORSDEVICE: strlcpy(string, s.name, sizeof(string)); *var_len = strlen(string); ret = (unsigned char *) string; goto leaving; case LMTEMPSENSORSVALUE: case LMFANSENSORSVALUE: case LMVOLTSENSORSVALUE: case LMMISCSENSORSVALUE: long_ret = s.value; ret = (unsigned char *) &long_ret; goto leaving; default: ERROR_MSG("Unable to handle table request"); } leaving: return ret; }
/* * var_lmSensorsTable(): * Handle this table separately from the scalar value case. * The workings of this are basically the same as for var_lmSensors above. */ unsigned char * var_lmSensorsTable(struct variable *vp, oid * name, size_t * length, int exact, size_t * var_len, WriteMethod ** write_method) { static long long_ret; static unsigned char string[SPRINT_MAX_LEN]; int i; /* generates a variable not used error message in Solaris - that's OK */ int s_index; int s_type = -1; int n_sensors; _sensor s; sensor_load(); switch (vp->magic) { case LMTEMPSENSORSINDEX: case LMTEMPSENSORSDEVICE: case LMTEMPSENSORSVALUE: s_type = 0; n_sensors = sensor_array[0].n; break; case LMFANSENSORSINDEX: case LMFANSENSORSDEVICE: case LMFANSENSORSVALUE: s_type = 1; n_sensors = sensor_array[1].n; break; case LMVOLTSENSORSINDEX: case LMVOLTSENSORSDEVICE: case LMVOLTSENSORSVALUE: s_type = 2; n_sensors = sensor_array[2].n; break; case LMMISCSENSORSINDEX: case LMMISCSENSORSDEVICE: case LMMISCSENSORSVALUE: s_type = 3; n_sensors = sensor_array[3].n; break; default: s_type = -1; n_sensors = 0; } if (header_simple_table(vp, name, length, exact, var_len, write_method, n_sensors) == MATCH_FAILED) return NULL; if (s_type < 0) return NULL; s_index = name[*length - 1] - 1; s = sensor_array[s_type].sensor[s_index]; switch (vp->magic) { case LMTEMPSENSORSINDEX: case LMFANSENSORSINDEX: case LMVOLTSENSORSINDEX: case LMMISCSENSORSINDEX: long_ret = s_index; return (unsigned char *) &long_ret; case LMTEMPSENSORSDEVICE: case LMFANSENSORSDEVICE: case LMVOLTSENSORSDEVICE: case LMMISCSENSORSDEVICE: strncpy(string, s.name, SPRINT_MAX_LEN - 1); *var_len = strlen(string); return (unsigned char *) string; case LMTEMPSENSORSVALUE: case LMFANSENSORSVALUE: case LMVOLTSENSORSVALUE: case LMMISCSENSORSVALUE: long_ret = s.value; return (unsigned char *) &long_ret; default: ERROR_MSG("Unable to handle table request"); } return NULL; }