Browse Source

esp32: setenv_cond() to avoid NULL pointer issues

Add setenv_cond() which, like setenv_config(), removes a string
(i.e. unsetenv) if the argument is NULL.
H. Peter Anvin 2 years ago
parent
commit
c2ea19d3be

+ 5 - 0
esp32/max80/config.c

@@ -28,6 +28,11 @@ int setenv_config(const char *name, const char *value)
 	name++;
 	value = NULL;
     }
+    return setenv_cond(name, value);
+}
+
+int setenv_cond(const char *name, const char *value)
+{
     if (value)
 	return setenv(name, value, 1);
     else

+ 1 - 0
esp32/max80/config.h

@@ -12,6 +12,7 @@ extern_c void init_config(void);
 
 extern_c int set_config_url_string(const char *str);
 
+extern_c int setenv_cond(const char *var, const char *val);
 extern_c int setenv_config(const char *var, const char *val);
 extern_c const char *getenv_def(const char *var, const char *def);
 extern_c long getenv_l(const char *var, long def);

+ 1 - 1
esp32/max80/max80.ino

@@ -73,7 +73,7 @@ void setup() {
     init_hw();
     fpga_service_init();
     init_config();
-    setenv("status.max80.fw.date", fwdate, 1);
+    setenv_cond("status.max80.fw.date", fwdate);
     fpga_service_enable(true);
     SetupWiFi();
     printf("[RDY]\n");

+ 9 - 7
esp32/max80/wifi.cpp

@@ -105,9 +105,12 @@ static void start_services(void)
 	}
     }
 
-    dns_ip = dns_getserver(0);
-    printf("[DNS]  DNS server: %s\n", inet_ntoa(*dns_ip));
-    setenv("status.net.dns.server", inet_ntoa(*dns_ip), 1);
+    {
+	dns_ip = dns_getserver(0);
+	const char *dns_server_str = inet_ntoa(*dns_ip);
+	printf("[DNS]  DNS server: %s\n", dns_server_str);
+	setenv_cond("status.net.dns.server", dns_server_str);
+    }
 
     // If Arduino supported both of these at the same that would be
     // awesome, but it requires ESP-IDF reconfiguration...
@@ -124,7 +127,7 @@ static void start_services(void)
 	if (!invalid_ip(sntp_ip)) {
 	    const char *sntp_server = inet_ntoa(*sntp_ip);
 	    printf("[SNTP] Time server: %s\n", sntp_server);
-	    setenv("status.net.sntp.server", sntp_server, 1);
+	    setenv_cond("status.net.sntp.server", sntp_server);
 	} else {
 	    unsetenv("status.net.sntp.server");
 	}
@@ -359,7 +362,7 @@ static void wifi_config_ap(void)
 
     printf("[WIFI] AP SSID %s IP %s netmask %s channel %u\n",
 	       ap_ssid, AP_IP.toString(), AP_Netmask.toString(), channel+1);
-    setenv("status.net.ap.ssid", ap_ssid, 1);
+    setenv_cond("status.net.ap.ssid", ap_ssid);
     setenv_ip("status.net.ap.ip4", AP_IP);
     setenv_ip("status.net.ap.ip4.mask", AP_Netmask);
     setenv_ul("status.net.ap.clients", 0);
@@ -382,12 +385,11 @@ static void wifi_config_sta(void)
     WiFi.macAddress(mac);
     setenv_mac("status.net.sta.mac", mac);
 
+    setenv_cond("status.net.sta.ssid", ssid.c_str());
     if (ssid == "") {
-	unsetenv("status.net.sta.ssid");
 	WiFi.enableSTA(false);
 	return;
     }
-    setenv("status.net.sta.ssid", ssid.c_str(), 1);
 
     sta_failure_timer = xTimerCreate("wifi_sta", configTICK_RATE_HZ*30,
 				     pdFALSE, NULL,

BIN
esp32/output/max80.ino.bin


BIN
fpga/output/v1.fw


BIN
fpga/output/v2.fw