#include "moisture_detector.h" #include #include typedef struct { int32_t reading; uint32_t valid; uint32_t idle; uint32_t collect; uint32_t saturated; uint32_t errors; int has_reading; } moisture_session_t; static moisture_session_t session; void moisture_session_start(void) { session = (moisture_session_t){0}; } int moisture_detector_has_next(void) { // nosemgrep: fixed-width integer input; no character buffer is written. session.has_reading = scanf("%" SCNd32, &session.reading) == 1; return session.has_reading; } int32_t moisture_detector_reading(void) { return session.reading; } void moisture_record_error(int32_t reading) { printf("error: negative=%" PRId32 "\n", reading); ++session.errors; } void moisture_record_idle(void) { printf("idle: 0\n"); ++session.valid; ++session.idle; } void moisture_record_collect(int32_t reading) { printf("collect: %" PRId32 "\n", reading); ++session.valid; ++session.collect; } void moisture_record_saturated(int32_t reading) { printf("saturated: %" PRId32 "\n", reading); ++session.valid; ++session.saturated; } void moisture_print_summary(void) { printf("summary: valid=%" PRIu32 " idle=%" PRIu32 " collect=%" PRIu32 " saturated=%" PRIu32 " errors=%" PRIu32 "\n", session.valid, session.idle, session.collect, session.saturated, session.errors); }