Module Name: src
Committed By: brad
Date: Wed Mar 12 14:01:49 UTC 2025
Modified Files:
src/usr.sbin/emcfanctl: emcfanctloutputs.c
Log Message:
So... when libmj says "integer" it really means int64_t. This is in
the man page, I just missed it. Put some casts in place to make sure
we call the add-to-object function correctly. This wasn't noticed on
a amd64 system, but strange output with the JSON option showed up on
earmv7hf without the casts.
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/usr.sbin/emcfanctl/emcfanctloutputs.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/emcfanctl/emcfanctloutputs.c
diff -u src/usr.sbin/emcfanctl/emcfanctloutputs.c:1.1 src/usr.sbin/emcfanctl/emcfanctloutputs.c:1.2
--- src/usr.sbin/emcfanctl/emcfanctloutputs.c:1.1 Tue Mar 11 13:56:48 2025
+++ src/usr.sbin/emcfanctl/emcfanctloutputs.c Wed Mar 12 14:01:49 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: emcfanctloutputs.c,v 1.1 2025/03/11 13:56:48 brad Exp $ */
+/* $NetBSD: emcfanctloutputs.c,v 1.2 2025/03/12 14:01:49 brad Exp $ */
/*
* Copyright (c) 2025 Brad Spencer <[email protected]>
@@ -17,7 +17,7 @@
*/
#ifdef __RCSID
-__RCSID("$NetBSD: emcfanctloutputs.c,v 1.1 2025/03/11 13:56:48 brad Exp $");
+__RCSID("$NetBSD: emcfanctloutputs.c,v 1.2 2025/03/12 14:01:49 brad Exp $");
#endif
#include <inttypes.h>
@@ -58,9 +58,9 @@ output_emcfan_info(int fd, uint8_t produ
if (jsonify) {
memset(&obj, 0x0, sizeof(obj));
mj_create(&obj, "object");
- mj_append_field(&obj, "revision", "integer", res);
- mj_append_field(&obj, "product_id", "integer", product_id);
- mj_append_field(&obj, "product_family", "integer", product_family);
+ mj_append_field(&obj, "revision", "integer", (int64_t)res);
+ mj_append_field(&obj, "product_id", "integer", (int64_t)product_id);
+ mj_append_field(&obj, "product_family", "integer", (int64_t)product_family);
pn = emcfan_product_to_name(product_id);
mj_append_field(&obj, "chip_name", "string", pn, strlen(pn));
emcfan_family_to_name(product_family, fn, sizeof(fn));
@@ -108,7 +108,7 @@ output_emcfan_generic_reg_list(uint8_t p
memset(&obj, 0x0, sizeof(obj));
mj_create(&obj, "object");
mj_append_field(&obj, "register_name", "string", the_registers[i].name, strlen(the_registers[i].name));
- mj_append_field(&obj, "register", "integer", the_registers[i].reg);
+ mj_append_field(&obj, "register", "integer", (int64_t)the_registers[i].reg);
mj_append(&array, "object", &obj);
mj_delete(&obj);
} else {
@@ -198,8 +198,8 @@ output_emcfan_230x_read_reg(int fd, uint
mj_create(&obj, "object");
rn = emcfan_regname_by_reg(product_id, product_family, i);
mj_append_field(&obj, "register_name", "string", rn, strlen(rn));
- mj_append_field(&obj, "register", "integer", i);
- mj_append_field(&obj, "register_value", "integer", res);
+ mj_append_field(&obj, "register", "integer", (int64_t)i);
+ mj_append_field(&obj, "register_value", "integer", (int64_t)res);
mj_append(&array, "object", &obj);
mj_delete(&obj);
} else {
@@ -265,9 +265,9 @@ output_emcfan_minexpected_rpm(int fd, ui
if (jsonify) {
memset(&obj, 0x0, sizeof(obj));
mj_create(&obj, "object");
- mj_append_field(&obj, "minimum_expected_rpm", "integer", human_value);
- mj_append_field(&obj, "register", "integer", config_reg);
- mj_append_field(&obj, "register_value", "integer", raw_res);
+ mj_append_field(&obj, "minimum_expected_rpm", "integer", (int64_t)human_value);
+ mj_append_field(&obj, "register", "integer", (int64_t)config_reg);
+ mj_append_field(&obj, "register_value", "integer", (int64_t)raw_res);
mj_asprint(&s, &obj, MJ_JSON_ENCODE);
printf("%s",s);
if (s != NULL)
@@ -306,9 +306,9 @@ output_emcfan_edges(int fd, uint8_t prod
if (jsonify) {
memset(&obj, 0x0, sizeof(obj));
mj_create(&obj, "object");
- mj_append_field(&obj, "num_edges", "integer", human_value);
- mj_append_field(&obj, "register", "integer", config_reg);
- mj_append_field(&obj, "register_value", "integer", raw_res);
+ mj_append_field(&obj, "num_edges", "integer", (int64_t)human_value);
+ mj_append_field(&obj, "register", "integer", (int64_t)config_reg);
+ mj_append_field(&obj, "register_value", "integer", (int64_t)raw_res);
mj_asprint(&s, &obj, MJ_JSON_ENCODE);
printf("%s",s);
if (s != NULL)
@@ -336,9 +336,9 @@ output_emcfan_simple_int(int fd, uint8_t
if (jsonify) {
memset(&obj, 0x0, sizeof(obj));
mj_create(&obj, "object");
- mj_append_field(&obj, whatj, "integer", res);
- mj_append_field(&obj, "register", "integer", reg);
- mj_append_field(&obj, "register_value", "integer", res);
+ mj_append_field(&obj, whatj, "integer", (int64_t)res);
+ mj_append_field(&obj, "register", "integer", (int64_t)reg);
+ mj_append_field(&obj, "register_value", "integer",(int64_t) res);
mj_asprint(&s, &obj, MJ_JSON_ENCODE);
printf("%s",s);
if (s != NULL)
@@ -384,10 +384,10 @@ output_emcfan_pwm_basefreq(int fd, uint8
if (jsonify) {
memset(&obj, 0x0, sizeof(obj));
mj_create(&obj, "object");
- mj_append_field(&obj, "fan", "integer", the_fan+1);
- mj_append_field(&obj, "pwm_base_frequency", "integer", fan_pwm_basefreq[tindex].human_int);
- mj_append_field(&obj, "register", "integer", reg);
- mj_append_field(&obj, "register_value", "integer", res);
+ mj_append_field(&obj, "fan", "integer", (int64_t)the_fan+1);
+ mj_append_field(&obj, "pwm_base_frequency", "integer", (int64_t)fan_pwm_basefreq[tindex].human_int);
+ mj_append_field(&obj, "register", "integer", (int64_t)reg);
+ mj_append_field(&obj, "register_value", "integer", (int64_t)res);
mj_asprint(&s, &obj, MJ_JSON_ENCODE);
printf("%s",s);
if (s != NULL)
@@ -427,10 +427,10 @@ output_emcfan_polarity(int fd, uint8_t p
if (jsonify) {
memset(&obj, 0x0, sizeof(obj));
mj_create(&obj, "object");
- mj_append_field(&obj, "fan", "integer", the_fan+1);
- mj_append_field(&obj, "inverted", "integer", inverted);
- mj_append_field(&obj, "register", "integer", reg);
- mj_append_field(&obj, "register_value", "integer", res);
+ mj_append_field(&obj, "fan", "integer", (int64_t)the_fan+1);
+ mj_append_field(&obj, "inverted", "integer", (int64_t)inverted);
+ mj_append_field(&obj, "register", "integer", (int64_t)reg);
+ mj_append_field(&obj, "register_value", "integer", (int64_t)res);
mj_asprint(&s, &obj, MJ_JSON_ENCODE);
printf("%s",s);
if (s != NULL)
@@ -465,10 +465,10 @@ output_emcfan_pwm_output_type(int fd, ui
if (jsonify) {
memset(&obj, 0x0, sizeof(obj));
mj_create(&obj, "object");
- mj_append_field(&obj, "fan", "integer", the_fan+1);
- mj_append_field(&obj, "pwm_output_type", "integer", pushpull);
- mj_append_field(&obj, "register", "integer", reg);
- mj_append_field(&obj, "register_value", "integer", res);
+ mj_append_field(&obj, "fan", "integer", (int64_t)the_fan+1);
+ mj_append_field(&obj, "pwm_output_type", "integer", (int64_t)pushpull);
+ mj_append_field(&obj, "register", "integer", (int64_t)reg);
+ mj_append_field(&obj, "register_value", "integer", (int64_t)res);
mj_asprint(&s, &obj, MJ_JSON_ENCODE);
printf("%s",s);
if (s != NULL)
@@ -551,18 +551,18 @@ output_emcfan_fan_status(int fd, uint8_t
if (jsonify) {
memset(&obj, 0x0, sizeof(obj));
mj_create(&obj, "object");
- mj_append_field(&obj, "fan", "integer", the_fan+1);
- mj_append_field(&obj, "stalled", "integer", stalled);
- mj_append_field(&obj, "spin_up_fail", "integer", spin_up_fail);
- mj_append_field(&obj, "drive_fail", "integer", drive_fail);
- mj_append_field(&obj, "register1", "integer", start_reg);
- mj_append_field(&obj, "register1_value", "integer", res[0]);
- mj_append_field(&obj, "register2", "integer", start_reg+1);
- mj_append_field(&obj, "register2_value", "integer", res[1]);
- mj_append_field(&obj, "register3", "integer", start_reg+2);
- mj_append_field(&obj, "register3_value", "integer", res[2]);
- mj_append_field(&obj, "register4", "integer", start_reg+3);
- mj_append_field(&obj, "register4_value", "integer", res[3]);
+ mj_append_field(&obj, "fan", "integer", (int64_t)the_fan+1);
+ mj_append_field(&obj, "stalled", "integer", (int64_t)stalled);
+ mj_append_field(&obj, "spin_up_fail", "integer", (int64_t)spin_up_fail);
+ mj_append_field(&obj, "drive_fail", "integer", (int64_t)drive_fail);
+ mj_append_field(&obj, "register1", "integer", (int64_t)start_reg);
+ mj_append_field(&obj, "register1_value", "integer", (int64_t)res[0]);
+ mj_append_field(&obj, "register2", "integer", (int64_t)start_reg+1);
+ mj_append_field(&obj, "register2_value", "integer", (int64_t)res[1]);
+ mj_append_field(&obj, "register3", "integer", (int64_t)start_reg+2);
+ mj_append_field(&obj, "register3_value", "integer", (int64_t)res[2]);
+ mj_append_field(&obj, "register4", "integer", (int64_t)start_reg+3);
+ mj_append_field(&obj, "register4_value", "integer", (int64_t)res[3]);
mj_asprint(&s, &obj, MJ_JSON_ENCODE);
printf("%s",s);
if (s != NULL)
@@ -596,9 +596,9 @@ output_emcfan_apd(int fd, uint8_t produc
if (jsonify) {
memset(&obj, 0x0, sizeof(obj));
mj_create(&obj, "object");
- mj_append_field(&obj, "apd", "integer", antiparalleldiode);
- mj_append_field(&obj, "register", "integer", reg);
- mj_append_field(&obj, "register_value", "integer", res);
+ mj_append_field(&obj, "apd", "integer", (int64_t)antiparalleldiode);
+ mj_append_field(&obj, "register", "integer", (int64_t)reg);
+ mj_append_field(&obj, "register_value", "integer", (int64_t)res);
mj_asprint(&s, &obj, MJ_JSON_ENCODE);
printf("%s",s);
if (s != NULL)
@@ -630,20 +630,21 @@ output_emcfan_smbusto(int fd, uint8_t pr
if (debug)
fprintf(stderr,"%s: reg=%d 0x%02X, res=0x%02x, tindex=%d, instance=%d\n",__func__,reg,reg,res,tindex,instance);
- smbusto = (res & smbus_timeout[tindex].clear_mask) ? true : false;
+ /* The logic is inverted for the timeout */
+ smbusto = (res & smbus_timeout[tindex].clear_mask) ? false : true;
if (jsonify) {
memset(&obj, 0x0, sizeof(obj));
mj_create(&obj, "object");
- mj_append_field(&obj, "smbus_timeout", "integer", smbusto);
- mj_append_field(&obj, "register", "integer", reg);
- mj_append_field(&obj, "register_value", "integer", res);
+ mj_append_field(&obj, "smbus_timeout", "integer", (int64_t)smbusto);
+ mj_append_field(&obj, "register", "integer", (int64_t)reg);
+ mj_append_field(&obj, "register_value", "integer", (int64_t)res);
mj_asprint(&s, &obj, MJ_JSON_ENCODE);
printf("%s",s);
if (s != NULL)
free(s);
} else {
- printf("SMBUS timeout:%s\n",(smbusto ? "Off" : "On"));
+ printf("SMBUS timeout:%s\n",(smbusto ? "On" : "Off"));
}
out: