Make snprintf() return full strlen when truncating
authorBarret Rhoden <brho@cs.berkeley.edu>
Sat, 18 Jul 2015 19:17:18 +0000 (15:17 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 24 Jul 2015 07:05:13 +0000 (03:05 -0400)
commitd25d50f44b3c949568e281752bd29b5703644af8
tree9b4f9b76509b200e07b97cd0635124ab41eff093
parent80f09b979730786422e2691e2ba9db1e6dcf845d
Make snprintf() return full strlen when truncating

Previously, we would only return the amount of bytes written, excluding
null.  This is what glibc does too, for success.  But although we always
returned that amount, when the buffer is too small and the string is
truncated, glibc returns the total that *would* be written.

This change brings our snprintf() more in line with glibc; though I
still prefer not returning errors and just returning 0.

Note that this common pattern still works:

  l += snprintf(p + l, READSTR - l, "ierrs %d\n", ctlr->ierrs);
  l += snprintf(p + l, READSTR - l, "etxth %d\n", ctlr->etxth);
  l += snprintf(p + l, READSTR - l, "taligned %d\n", ctlr->taligned);

If we overrun the buffer, READSTR - l will be negative, at which point
snprintf() does not print into the buffer (and returns 0 for us).
kern/src/printfmt.c