if (*grouping == CHAR_MAX || *grouping < 0)
if (*grouping == CHAR_MAX #if CHAR_MIN < 0 || *grouping < 0 #endif )
group_number (char *buf, char *bufend, unsigned int intdig_no,	      const char *grouping, wchar_t thousands_sep){  unsigned int groups = __guess_grouping (intdig_no, grouping, thousands_sep);  char *p;  if (groups == 0)    return bufend;  /* Move the fractional part down.  */  memmove (buf + intdig_no + groups, buf + intdig_no,	   bufend - (buf + intdig_no));  p = buf + intdig_no + groups - 1;  do    {      unsigned int len = *grouping++;      do	*p-- = buf[--intdig_no];      while (--len > 0);      *p-- = thousands_sep;      if (*grouping == CHAR_MAX || *grouping < 0)	/* No more grouping should be done.  */	break;      else if (*grouping == 0)	/* Same grouping repeats.  */	--grouping;    } while (intdig_no > (unsigned int) *grouping);  /* Copy the remaining ungrouped digits.  */  do    *p-- = buf[--intdig_no];  while (p > buf);  return bufend + groups;}