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 <b...@anduin.eldar.org>
@@ -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:

Reply via email to