1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 char *
 ss_insert_commas(char *buf)
 {
     SS_ENTER(ss_insert_commas, charP);
     char        sign[2];
     int         i;
     size_t      ndigits;

     /* Peel off the sign character and verify input value */
     sign[0] = sign[1] = '\0';
     if (!buf || !*buf) SS_ERROR_FMT(USAGE, ("empty or null input value"));
     if (!isdigit(*buf)) {
         *sign = *buf;
         memmove(buf, buf+1, strlen(buf));
     }
     if (!*buf || strspn(buf, "0123456789")!=strlen(buf)) SS_ERROR_FMT(USAGE, ("malformed input value: %s", sign, buf));

     /* Insert commas */
     if ((ndigits=strlen(buf))>4) {
         for (i=ndigits-3; i>0; i-=3) {
             memmove(buf+i+1, buf+i, strlen(buf+i)+1);
             buf[i] = ',';
         }
     }

     /* Prepend the sign */
     if (*sign) {
         memmove(buf+1, buf, strlen(buf)+1);
         *buf = *sign;
     }

 SS_CLEANUP:
     SS_LEAVE(buf);
 }