|
headers
headers
/*
* Copyright (C) 1996-2000 Michael R. Elkins
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*/
#include "mutt.h"
#ifdef HAVE_PGP
#include "pgp.h"
#endif
#include
#include
#include
void mutt_edit_headers (const char *editor,
const char *body,
HEADER *msg,
char *fcc,
size_t fcclen)
{
char path[_POSIX_PATH_MAX]; /* tempfile used to edit headers + body */
char buffer[LONG_STRING];
char *p;
FILE *ifp, *ofp;
int i, keep;
ENVELOPE *n;
time_t mtime;
struct stat st;
LIST *cur, **last = NULL, *tmp;
mutt_mktemp (path);
if ((ofp = safe_fopen (path, "w")) == NULL)
{
mutt_perror (path);
return;
}
mutt_write_rfc822_header (ofp, msg->env, NULL, 1, 0);
fputc ('\n', ofp); /* tie off the header. */
/* now copy the body of the message. */
if ((ifp = fopen (body, "r")) == NULL)
{
mutt_perror (body);
return;
}
mutt_copy_stream (ifp, ofp);
fclose (ifp);
fclose (ofp);
if (stat (path, &st) == -1)
{
mutt_perror (path);
return;
}
mtime = mutt_decrease_mtime (path, &st);
mutt_edit_file (editor, path);
stat (path, &st);
if (mtime == st.st_mtime)
{
dprint (1, (debugfile, "ci_edit_headers(): temp file was not modified.\n"));
/* the file has not changed! */
mutt_unlink (path);
return;
}
mutt_unlink (body);
mutt_free_list (&msg->env->userhdrs);
/* Read the temp file back in */
if ((ifp = fopen (path, "r")) == NULL)
{
mutt_perror (path);
return;
}
if ((ofp = safe_fopen (body, "w")) == NULL)
{
/* intentionally leak a possible temporary file here */
fclose (ifp);
mutt_perror (body);
return;
}
n = mutt_read_rfc822_header (ifp, NULL, 1, 0);
while ((i = fread (buffer, 1, sizeof (buffer), ifp)) > 0)
fwrite (buffer, 1, i, ofp);
fclose (ofp);
fclose (ifp);
mutt_unlink (path);
/* restore old info. */
n->references = msg->env->references;
msg->env->references = NULL;
mutt_free_envelope (&msg->env);
msg->env = n; n = NULL;
if (!msg->env->in_reply_to)
mutt_free_list (&msg->env->references);
mutt_expand_aliases_env (msg->env);
/* search through the user defined headers added to see if either a
* fcc: or attach-file: field was specified.
*/
cur = msg->env->userhdrs;
last = &msg->env->userhdrs;
while (cur)
{
keep = 1;
/* keep track of whether or not we see the in-reply-to field. if we did
* not, remove the references: field later so that we can generate a new
* message based upon this one.
*/
if (fcc && ascii_strncasecmp ("fcc:", cur->data, 4) == 0)
{
p = cur->data + 4;
SKIPWS (p);
if (*p)
{
strfcpy (fcc, p, fcclen);
mutt_pretty_mailbox (fcc);
}
keep = 0;
}
else if (ascii_strncasecmp ("attach:", cur->data, 7) == 0)
{
BODY *body;
BODY *parts;
char *q;
p = cur->data + 7;
SKIPWS (p);
if (*p)
{
if ((q = strpbrk (p, " \t")))
{
mutt_substrcpy (path, p, q, sizeof (path));
SKIPWS (q);
}
else
strfcpy (path, p, sizeof (path));
mutt_expand_path (path, sizeof (path));
if ((body = mutt_make_file_attach (path)))
{
body->description = safe_strdup (q);
for (parts = msg->content; parts->next; parts = parts->next) ;
parts->next = body;
}
else
{
mutt_pretty_mailbox (path);
mutt_error (_("%s: unable to attach file"), path);
}
}
keep = 0;
}
#ifdef HAVE_PGP
else if (ascii_strncasecmp ("pgp:", cur->data, 4) == 0)
{
msg->pgp = mutt_parse_pgp_hdr (cur->data + 4, 0);
keep = 0;
}
#endif
if (keep)
{
last = &cur->next;
cur = cur->next;
}
else
{
tmp = cur;
*last = cur->next;
cur = cur->next;
tmp->next = NULL;
mutt_free_list (&tmp);
}
}
}
Cheap Domains
/*
* Copyright (C) 1996-8 Michael R. Elkins
* Copyright (C) 2000-1 Brendan Cully
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*/
#ifndef _IMAP_H
#define _IMAP_H 1
#include "account.h"
#include "browser.h"
#include "mailbox.h"
/* -- data structures -- */
typedef struct
{
ACCOUNT account;
char* mbox;
} IMAP_MBOX;
/* imap.c */
int imap_access (const char*, int);
int imap_check_mailbox (CONTEXT *ctx, int *index_hint);
int imap_close_connection (CONTEXT *ctx);
int imap_delete_mailbox (CONTEXT* idata, IMAP_MBOX mx);
int imap_open_mailbox (CONTEXT *ctx);
int imap_open_mailbox_append (CONTEXT *ctx);
int imap_sync_mailbox (CONTEXT *ctx, int expunge, int *index_hint);
void imap_close_mailbox (CONTEXT *ctx);
int imap_buffy_check (char *path);
int imap_mailbox_check (char *path, int new);
int imap_subscribe (char *path, int subscribe);
int imap_complete (char* dest, size_t dlen, char* path);
void imap_allow_reopen (CONTEXT *ctx);
void imap_disallow_reopen (CONTEXT *ctx);
/* browse.c */
int imap_browse (char* path, struct browser_state* state);
int imap_mailbox_create (const char* folder);
/* message.c */
int imap_append_message (CONTEXT* ctx, MESSAGE* msg);
int imap_copy_messages (CONTEXT* ctx, HEADER* h, char* dest, int delete);
int imap_fetch_message (MESSAGE* msg, CONTEXT* ctx, int msgno);
/* socket.c */
void imap_logout_all (void);
/* util.c */
int imap_expand_path (char* path, size_t len);
int imap_parse_path (const char* path, IMAP_MBOX* mx);
void imap_pretty_mailbox (char* path);
int imap_wait_keepalive (pid_t pid);
void imap_keepalive (void);
#endif
Page:
1
2
3
4
5
6
7
8
9
10
Domains NZ
Cheap Domains
Cheap Domain Name Registration
Cheap Domain Names
|