I see code in core/m4/snprintf.m4 that looks like it's autoconf stuff to detect correctness of the sprintf() family, including a check for handling of %zu; so I'm surprised we're using a system snprintf that fails this test. Still, if this is the case, we have lots of other uses of %zu (and plenty of %zd, which are bogus when the parameter is size_t, not ssize_t).  I'll add a fix for all of those.  IMO, (unsigned long long) and %llu are the right way to deal with this.