mirror of
https://github.com/esphome/esphome.git
synced 2026-09-16 17:48:40 +00:00
[time] Fix settimeofday() failure on ESP8266
ESP8266's settimeofday() returns EINVAL (22) directly as the return value when the timezone parameter is non-NULL, rather than following POSIX convention of returning -1 and setting errno. The previous fallback code checked errno == EINVAL which never matched because errno was never set, so the retry with nullptr never triggered. Fix by always passing nullptr on ESP8266 since the platform requires it.
This commit is contained in:
@@ -88,13 +88,13 @@ void RealTimeClock::synchronize_epoch_(uint32_t epoch) {
|
||||
struct timeval timev {
|
||||
.tv_sec = static_cast<time_t>(epoch), .tv_usec = 0,
|
||||
};
|
||||
#ifdef USE_ESP8266
|
||||
// ESP8266 settimeofday() requires tz to be nullptr
|
||||
int ret = settimeofday(&timev, nullptr);
|
||||
#else
|
||||
struct timezone tz = {0, 0};
|
||||
int ret = settimeofday(&timev, &tz);
|
||||
if (ret != 0 && errno == EINVAL) {
|
||||
// Some ESP8266 frameworks abort when timezone parameter is not NULL
|
||||
// while ESP32 expects it not to be NULL
|
||||
ret = settimeofday(&timev, nullptr);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ret != 0) {
|
||||
ESP_LOGW(TAG, "setimeofday() failed with code %d", ret);
|
||||
|
||||
Reference in New Issue
Block a user