sprintf (tmp, (base == 10 ? "%.*s%0*d" : "%.*s%0*X"), cp - last_str, last_str, now->val.str.lenmb - (cp - last_str), from);
sprintf (tmp, (base == 10 ? "%.*s%0*ld" : "%.*s%0*lX"), cp - last_str, last_str, (int) (now->val.str.lenmb - (cp - last_str)), from);
charclass_symbolic_ellipsis (struct linereader *ldfile,			     struct locale_ctype_t *ctype,			     struct charmap_t *charmap,			     struct repertoire_t *repertoire,			     struct token *now,			     const char *last_str,			     unsigned long int class256_bit,			     unsigned long int class_bit, int base,			     int ignore_content, int handle_digits, int step){  const char *nowstr = now->val.str.startmb;  char tmp[now->val.str.lenmb + 1];  const char *cp;  char *endp;  unsigned long int from;  unsigned long int to;  /* We have to compute the ellipsis values using the symbolic names.  */  assert (last_str != NULL);  if (strlen (last_str) != now->val.str.lenmb)    {    invalid_range:      lr_error (ldfile,		_("`%s' and `%.*s' are no valid names for symbolic range"),		last_str, (int) now->val.str.lenmb, nowstr);      return;    }  if (memcmp (last_str, nowstr, now->val.str.lenmb) == 0)    /* Nothing to do, the names are the same.  */    return;  for (cp = last_str; *cp == *(nowstr + (cp - last_str)); ++cp)    ;  errno = 0;  from = strtoul (cp, &endp, base);  if ((from == UINT_MAX && errno == ERANGE) || *endp != '\0')    goto invalid_range;  to = strtoul (nowstr + (cp - last_str), &endp, base);  if ((to == UINT_MAX && errno == ERANGE)      || (endp - nowstr) != now->val.str.lenmb || from >= to)    goto invalid_range;  /* OK, we have a range FROM - TO.  Now we can create the symbolic names.  */  if (!ignore_content)    {      now->val.str.startmb = tmp;      while ((from += step) <= to)	{	  struct charseq *seq;	  uint32_t wch;	  sprintf (tmp, (base == 10 ? "%.*s%0*d" : "%.*s%0*X"), cp - last_str,		   last_str, now->val.str.lenmb - (cp - last_str), from);	  get_character (now, charmap, repertoire, &seq, &wch);	  if (seq != NULL && seq->nbytes == 1)	    /* Yep, we can store information about this byte sequence.  */	    ctype->class256_collection[seq->bytes[0]] |= class256_bit;	  if (wch != ILLEGAL_CHAR_VALUE && class_bit != 0)	    /* We have the UCS4 position.  */	    *find_idx (ctype, &ctype->class_collection,		       &ctype->class_collection_max,		       &ctype->class_collection_act, wch) |= class_bit;	  if (handle_digits == 1)	    {	      /* We must store the digit values.  */	      if (ctype->mbdigits_act == ctype->mbdigits_max)		{		  ctype->mbdigits_max *= 2;		  ctype->mbdigits = xrealloc (ctype->mbdigits,					      (ctype->mbdigits_max					       * sizeof (char *)));		  ctype->wcdigits_max *= 2;		  ctype->wcdigits = xrealloc (ctype->wcdigits,					      (ctype->wcdigits_max					       * sizeof (uint32_t)));		}	      ctype->mbdigits[ctype->mbdigits_act++] = seq;	      ctype->wcdigits[ctype->wcdigits_act++] = wch;	    }	  else if (handle_digits == 2)	    {	      /* We must store the digit values.  */	      if (ctype->outdigits_act >= 10)		{		  lr_error (ldfile, _("\%s: field `%s' does not contain exactly ten entries"),			    "LC_CTYPE", "outdigit");		  return;		}	      ctype->mboutdigits[ctype->outdigits_act] = seq;	      ctype->wcoutdigits[ctype->outdigits_act] = wch;	      ++ctype->outdigits_act;	    }	}    }}