rem: switch (p[length - 1])
add: switch (conversion) { case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': length_modifier = PRIdMAX; length_modifier_len = sizeof PRIdMAX - 2; break;  case 'a': case 'e': case 'f': case 'g': case 'A': case 'E': case 'F': case 'G': length_modifier = "L"; length_modifier_len = 1; break;  default: length_modifier = start;   length_modifier_len = 0; break; }  p = xmalloc (length + length_modifier_len + 2); q = mempcpy (p, start, length); q = mempcpy (q, length_modifier, length_modifier_len); *q++ = conversion; *q = '\0'; }  switch (conversion)
context: print_direc (const char *start, size_t length, int field_width,	     int precision, const char *argument){  char *p;		/* Null-terminated copy of % directive. */  p = xmalloc ((unsigned) (length + 1));  strncpy (p, start, length);  p[length] = 0;  switch (p[length - 1])    {    case 'd':    case 'i':      if (field_width == UNSPECIFIED)	{	  if (precision == UNSPECIFIED)	    printf (p, xstrtol (argument));	  else	    printf (p, precision, xstrtol (argument));	}      else	{	  if (precision == UNSPECIFIED)	    printf (p, field_width, xstrtol (argument));	  else	    printf (p, field_width, precision, xstrtol (argument));	}      break;    case 'o':    case 'u':    case 'x':    case 'X':      if (field_width == UNSPECIFIED)	{	  if (precision == UNSPECIFIED)	    printf (p, xstrtoul (argument));	  else	    printf (p, precision, xstrtoul (argument));	}      else	{	  if (precision == UNSPECIFIED)	    printf (p, field_width, xstrtoul (argument));	  else	    printf (p, field_width, precision, xstrtoul (argument));	}      break;    case 'f':    case 'e':    case 'E':    case 'g':    case 'G':      if (field_width == UNSPECIFIED)	{	  if (precision == UNSPECIFIED)	    printf (p, xstrtod (argument));	  else	    printf (p, precision, xstrtod (argument));	}      else	{	  if (precision == UNSPECIFIED)	    printf (p, field_width, xstrtod (argument));	  else	    printf (p, field_width, precision, xstrtod (argument));	}      break;    case 'c':      printf (p, *argument);      break;    case 's':      if (field_width == UNSPECIFIED)	{	  if (precision == UNSPECIFIED)	    printf (p, argument);	  else	    printf (p, precision, argument);	}      else	{	  if (precision == UNSPECIFIED)	    printf (p, field_width, argument);	  else	    printf (p, field_width, precision, argument);	}      break;    }  free (p);}