k->flags |= KEYFLAG_SUBKEY; k->parent = mainkey;
pgp_uid_t **l;  k->flags  |= KEYFLAG_SUBKEY; k->parent  = mainkey; for (l = &k->address; *l; l = &(*l)->next) ; *l = pgp_copy_uids (mainkey->address, k);
pgp_key_t *gpg_get_candidates (struct pgp_vinfo * pgp, pgp_ring_t keyring,			       LIST * hints){  FILE *fp;  pid_t thepid;  char buf[LONG_STRING];  pgp_key_t *db = NULL, **kend, *k = NULL, *kk, *mainkey = NULL;  int is_sub;  int devnull;  if ((devnull = open ("/dev/null", O_RDWR)) == -1)    return NULL;  thepid = gpg_invoke_list_keys (pgp, NULL, &fp, NULL, -1, -1, devnull,				 keyring, hints);  if (thepid == -1)  {    close (devnull);    return NULL;  }  kend = &db;  k = NULL;  while (fgets (buf, sizeof (buf) - 1, fp))  {    kk = parse_pub_line (buf, &is_sub, k);    if (!kk)      continue;    /* Only append kk to the list if it's new. */    if (kk != k)    {      if (k)	kend = &k->next;      *kend = k = kk;            if (is_sub)      {	k->flags |= KEYFLAG_SUBKEY;	k->parent = mainkey;      }      else	mainkey = k;    }  }  if (ferror (fp))    mutt_perror ("fgets");  fclose (fp);  mutt_wait_filter (thepid);  close (devnull);  return db;}