no snprintf but it turns out that C89 does have strnc{mp,at,py}