rem: is_negative = 0;
add: unsigned long int val; if (xstrtoul (*format_ptr, format_ptr, 10, &val, NULL) != LONGINT_OK || SIZE_MAX < val) error (EXIT_FAILURE, 0, _("invalid format precision")); return val;
context: get_format_prec (char **format_ptr){  unsigned count = 0;  char *start;  int ch_save;  int is_negative;  if (**format_ptr != '.')    return 0;  (*format_ptr)++;  if (**format_ptr == '-' || **format_ptr == '+')    {      is_negative = (**format_ptr == '-');      (*format_ptr)++;    }  else    {      is_negative = 0;    }  start = *format_ptr;  for (; ISDIGIT (**format_ptr); (*format_ptr)++)    continue;  /* ANSI 4.9.6.1 says that if the precision is negative, it's as good as     not there. */  if (is_negative)    start = *format_ptr;  ch_save = **format_ptr;  **format_ptr = '\0';  count = (*format_ptr == start) ? 11 : atoi (start);  **format_ptr = ch_save;  return count;}