rem: int field_width;		 int precision;
add: bool have_field_width;	 int field_width = 0;		 bool have_precision;		 int precision = 0;		 char ok[UCHAR_MAX + 1];
context: print_formatted (const char *format, int argc, char **argv){  int save_argc = argc;		/* Preserve original value.  */  const char *f;		/* Pointer into `format'.  */  const char *direc_start;	/* Start of % directive.  */  size_t direc_length;		/* Length of % directive.  */  int field_width;		/* Arg to first '*', or UNSPECIFIED if none. */  int precision;		/* Arg to second '*', or UNSPECIFIED if none. */  for (f = format; *f; ++f)    {      switch (*f)	{	case '%':	  direc_start = f++;	  direc_length = 1;	  field_width = precision = UNSPECIFIED;	  if (*f == '%')	    {	      putchar ('%');	      break;	    }	  if (*f == 'b')	    {	      if (argc > 0)		{		  print_esc_string (*argv);		  ++argv;		  --argc;		}	      break;	    }	  while (*f == ' ' || *f == '#' || *f == '+' || *f == '-')	    {	      ++f;	      ++direc_length;	    }	  if (*f == '*')	    {	      ++f;	      ++direc_length;	      if (argc > 0)		{		  field_width = xstrtoul (*argv);		  if (field_width == UNSPECIFIED)		    error (EXIT_FAILURE, 0, _("invalid field width: %s"),			   *argv);		  ++argv;		  --argc;		}	      else		field_width = 0;	    }	  else	    while (ISDIGIT (*f))	      {		++f;		++direc_length;	      }	  if (*f == '.')	    {	      ++f;	      ++direc_length;	      if (*f == '*')		{		  ++f;		  ++direc_length;		  if (argc > 0)		    {		      precision = xstrtoul (*argv);		      if (precision == UNSPECIFIED)			error (EXIT_FAILURE, 0, _("invalid precision: %s"),			       *argv);		      ++argv;		      --argc;		    }		  else		    precision = 0;		}	      else		while (ISDIGIT (*f))		  {		    ++f;		    ++direc_length;		  }	    }	  if (*f == 'l' || *f == 'L' || *f == 'h')	    {	      ++f;	      ++direc_length;	    }	  if (! (*f && strchr ("diouxXfeEgGcs", *f)))	    error (EXIT_FAILURE, 0, _("%%%c: invalid directive"), *f);	  ++direc_length;	  if (argc > 0)	    {	      print_direc (direc_start, direc_length, field_width,			   precision, *argv);	      ++argv;	      --argc;	    }	  else	    print_direc (direc_start, direc_length, field_width,			 precision, "");	  break;	case '\\':	  f += print_esc (f);	  break;	default:	  putchar (*f);	}    }  return save_argc - argc;}