while (!isdigit (*str))
while (*str < L_('0') || *str > L_('9'))
str_to_mpn (const char *str, int digcnt, mp_limb *n, mp_size_t *nsize,	    int *exponent){  /* Number of digits for actual limb.  */  int cnt = 0;  mp_limb low = 0;  mp_limb base;  *nsize = 0;  assert (digcnt > 0);  do    {      if (cnt == MAX_DIG_PER_LIMB)	{	  if (*nsize == 0)	    n[0] = low;	  else	    {	      mp_limb cy;	      cy = __mpn_mul_1 (n, n, *nsize, MAX_FAC_PER_LIMB);	      cy += __mpn_add_1 (n, n, *nsize, low);	      if (cy != 0)		n[*nsize] = cy;	    }	  ++(*nsize);	  cnt = 0;	  low = 0;	}      /* There might be thousands separators or radix characters in the string.	 But these all can be ignored because we know the format of the number	 is correct and we have an exact number of characters to read.  */      while (!isdigit (*str))	++str;      low = low * 10 + *str++ - '0';      ++cnt;    }  while (--digcnt > 0);  if (*exponent > 0 && cnt + *exponent <= MAX_DIG_PER_LIMB)    {      low *= _tens_in_limb[*exponent];      base = _tens_in_limb[cnt + *exponent];      *exponent = 0;    }  else    base = _tens_in_limb[cnt];  if (*nsize == 0)    {      n[0] = low;      *nsize = 1;    }  else    {      mp_limb cy;      cy = __mpn_mul_1 (n, n, *nsize, base);      cy += __mpn_add_1 (n, n, *nsize, low);      if (cy != 0)	n[(*nsize)++] = cy;    }  return str;}