Ejemplo n.º 1
0
void mutt_select_fcc (char *path, size_t pathlen, HEADER *hdr)
{
  ADDRESS *adr;
  char buf[_POSIX_PATH_MAX];
  ENVELOPE *env = hdr->env;

  if (mutt_addr_hook (path, pathlen, M_FCCHOOK, NULL, hdr) != 0)
  {
    if ((option (OPTSAVENAME) || option (OPTFORCENAME)) &&
	(env->to || env->cc || env->bcc))
    {
      adr = env->to ? env->to : (env->cc ? env->cc : env->bcc);
      mutt_safe_path (buf, sizeof (buf), adr);
      mutt_concat_path (path, NONULL(Maildir), buf, pathlen);
      if (!option (OPTFORCENAME) && mx_access (path, W_OK) != 0)
	strfcpy (path, NONULL (Outbox), pathlen);
    }
    else
      strfcpy (path, NONULL (Outbox), pathlen);
  }
  mutt_pretty_mailbox (path, pathlen);
}
Ejemplo n.º 2
0
/* return 0 on success, -1 on abort, 1 on error */
int mutt_check_overwrite (const char *attname, const char *path,
                          char *fname, size_t flen, int *append,
                          char **directory)
{
  int rc = 0;
  char tmp[_POSIX_PATH_MAX];
  struct stat st;

  strfcpy (fname, path, flen);
  if (access (fname, F_OK) != 0)
    return 0;
  if (stat (fname, &st) != 0)
    return -1;
  if (S_ISDIR (st.st_mode)) {
    if (directory) {
      switch (mutt_multi_choice
              (_("File is a directory, save under it? [(y)es, (n)o, (a)ll]"),
               _("yna"))) {
      case 3:                  /* all */
        str_replace (directory, fname);
        break;
      case 1:                  /* yes */
        mem_free (directory);
        break;
      case -1:                 /* abort */
        mem_free (directory);
        return -1;
      case 2:                  /* no */
        mem_free (directory);
        return 1;
      }
    }
    else
      if ((rc =
           mutt_yesorno (_("File is a directory, save under it?"),
                         M_YES)) != M_YES)
      return (rc == M_NO) ? 1 : -1;

    if (!attname || !attname[0]) {
      tmp[0] = 0;
      if (mutt_get_field (_("File under directory: "), tmp, sizeof (tmp),
                          M_FILE | M_CLEAR) != 0 || !tmp[0])
        return (-1);
      mutt_concat_path (fname, path, tmp, flen);
    }
    else
      mutt_concat_path (fname, path, mutt_basename (attname), flen);
  }

  if (*append == 0 && access (fname, F_OK) == 0) {
    switch (mutt_multi_choice
            (_("File exists, (o)verwrite, (a)ppend, or (c)ancel?"), _("oac")))
    {
    case -1:                   /* abort */
      return -1;
    case 3:                    /* cancel */
      return 1;

    case 2:                    /* append */
      *append = M_SAVE_APPEND;
      break;
    case 1:                    /* overwrite */
      *append = M_SAVE_OVERWRITE;
      break;
    }
  }
  return 0;
}