The snprintf return value has dual meaning. If non-negative, it denotes the number of bytes written to the buffer. If negative, it denotes an error occurred, and the ...
in the current core 3.0.2 snprintf_P seems to just use printf and also seems to discard things like size limit strSize: int snprintf_P(char *str, size_t strSize, PGM_P formatP, ...) ...