if (toupper (*pp) == 'Q')
if (toupper ((unsigned char) *pp) == 'Q')
static int rfc2047_decode_word (char *d, const char *s, size_t len){  const char *pp, *pp1;  char *pd, *d0;  const char *t, *t1;  int enc = 0, count = 0;  char *charset = NULL;  pd = d0 = safe_malloc (strlen (s));  for (pp = s; (pp1 = strchr (pp, '?')); pp = pp1 + 1)  {    count++;    switch (count)    {      case 2:	/* ignore language specification a la RFC 2231 */        	t = pp1;        if ((t1 = memchr (pp, '*', t - pp)))	  t = t1;	charset = safe_malloc (t - pp + 1);	memcpy (charset, pp, t - pp);	charset[t-pp] = '\0';	break;      case 3:	if (toupper (*pp) == 'Q')	  enc = ENCQUOTEDPRINTABLE;	else if (toupper (*pp) == 'B')	  enc = ENCBASE64;	else	{	  FREE (&charset);	  FREE (&d0);	  return (-1);	}	break;      case 4:	if (enc == ENCQUOTEDPRINTABLE)	{	  for (; pp < pp1; pp++)	  {	    if (*pp == '_')	      *pd++ = ' ';	    else if (*pp == '=' &&		     (!(pp[1] & ~127) && hexval(pp[1]) != -1) &&		     (!(pp[2] & ~127) && hexval(pp[2]) != -1))	    {	      *pd++ = (hexval(pp[1]) << 4) | hexval(pp[2]);	      pp += 2;	    }	    else	      *pd++ = *pp;	  }	  *pd = 0;	}	else if (enc == ENCBASE64)	{	  int c, b = 0, k = 0;	  for (; pp < pp1; pp++)	  {	    if (*pp == '=')	      break;	    if ((*pp & ~127) || (c = base64val(*pp)) == -1)	      continue;	    if (k + 6 >= 8)	    {	      k -= 2;	      *pd++ = b | (c >> k);	      b = c << (8 - k);	    }	    else	    {	      b |= c << (k + 2);	      k += 6;	    }	  }	  *pd = 0;	}	break;    }  }    if (charset)    mutt_convert_string (&d0, charset, Charset, M_ICONV_HOOK_FROM);  strfcpy (d, d0, len);  FREE (&charset);  FREE (&d0);  return (0);}