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);
}