Fix logging broken on 32-bit Linux systems with 64-bit time_t #383
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
On modern 32-bit Linux systems (Raspberry Pi with recent Debian/Raspbian),
the logging system produces corrupted log files with garbage filenames and
timestamps. The
/jlAPI endpoint returns empty results even though logfiles exist in the
logs/directory.Root Cause
Since glibc 2.34,
time_tis 64-bit on 32-bit systems to address theyear 2038 problem. The logging code passes
time_os_t(which istime_t)directly to
snprintfwith%luformat specifier, which expects 32-bitunsigned long. This type mismatch causes undefined behavior.Symptoms
5212016.txtinstead of20420.txt)/jl?hist=7API returns[]because expected filenames don't existSolution
Explicitly cast
time_os_tvalues tounsigned longbefore passing tosnprintfwith%lu:// Before
// After
Tested on:
/jlAPI returns expected log entriesThis should be tested on other devices to make sure it doesn't break it for those other devices. I only have this one raspberry pi so it's all I could test with.