about summary refs log tree commit diff
path: root/src/libstddjb/strn_fmt.c
blob: 1a36f2cd8c20c7f6044665e77f9bd92bb42b13c9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* ISC license. */

#include <skalibs/types.h>
#include <skalibs/fmtscan.h>

size_t strn_fmt (char *blah, char const *s, size_t len)
{
  char *d = blah ;
  size_t i ;
  for (i = 0 ; i < len ; i++)
    if ((s[i] >= 32) && ((unsigned char)s[i] < 127)) *d++ = s[i] ;
    else
    {
      *d++ = '\\' ;
      *d++ = '0' ;
      *d++ = 'x' ;
      if ((unsigned char)s[i] < 16) *d++ = '0' ;
      d += uint_xfmt(d, (unsigned char)s[i]) ;
    }
  return d - blah ;
}