/*
* sendsbr.c -- routines to help WhatNow/Send along
*
- * $Id$
- *
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
* complete copyright information.
char *annotext = NULL;
char *distfile = NULL;
-static int armed = 0;
static jmp_buf env;
static char body_file_name[MAXPATHLEN + 1]; /* name of temporary file for body content */
* external prototypes
*/
int sendsbr (char **, int, char *, struct stat *, int, char *, int);
-int done (int);
char *getusername (void);
/*
* static prototypes
*/
+static void armed_done (int) NORETURN;
static void alert (char *, int);
static int tmp_fd (void);
static void anno (int, struct stat *);
}
}
- armed++;
+ done=armed_done;
switch (setjmp (env)) {
case OK:
/*
* rename the draft file. I'm not quite sure why.
*/
if (pushsw && unique) {
- if (rename (drft, strncpy (file, m_scratch (drft, invo_name), sizeof(file)))
- == NOTOK)
+ char *cp = m_mktemp2(drft, invo_name, NULL, NULL);
+ if (cp == NULL) {
+ adios ("sendsbr", "unable to create temporary file");
+ }
+ if (rename (drft, strncpy(file, cp, sizeof(file))) == NOTOK)
adios (file, "unable to rename %s to", drft);
drft = file;
}
break;
}
- armed = 0;
+ done=exit;
if (distfile)
unlink (distfile);
* Make names for the temporary files.
*/
- (void)strncpy(body_file_name, m_scratch("", m_maildir(invo_name)), sizeof (body_file_name));
- (void)strncpy(composition_file_name, m_scratch("", m_maildir(invo_name)), sizeof (composition_file_name));
+ (void)strncpy(body_file_name,
+ m_mktemp(m_maildir(invo_name), NULL, NULL),
+ sizeof (body_file_name));
+ (void)strncpy(composition_file_name,
+ m_mktemp(m_maildir(invo_name), NULL, NULL),
+ sizeof (composition_file_name));
if (has_body)
body_file = fopen(body_file_name, "w");
char tmpdrf[BUFSIZ];
FILE *out;
- strncpy (tmpdrf, m_scratch (drft, invo_name), sizeof(tmpdrf));
- if ((out = fopen (tmpdrf, "w")) == NULL)
- adios (tmpdrf, "unable to open for writing");
+ char *cp = m_mktemp2(drft, invo_name, NULL, &out);
+ if (cp == NULL) {
+ adios (drft, "unable to create temporary file for");
+ }
+ strncpy(tmpdrf, cp, sizeof(tmpdrf));
chmod (tmpdrf, 0600);
/*
tmp_fd (void)
{
int fd;
- char tmpfil[BUFSIZ];
+ char *tfile = NULL;
+
+ tfile = m_mktemp2(NULL, invo_name, &fd, NULL);
+ if (tfile == NULL) return NOTOK;
+ fchmod(fd, 0600);
- strncpy (tmpfil, m_tmpfil (invo_name), sizeof(tmpfil));
- if ((fd = open (tmpfil, O_RDWR | O_CREAT | O_TRUNC, 0600)) == NOTOK)
- return NOTOK;
if (debugsw)
- advise (NULL, "temporary file %s selected", tmpfil);
+ advise (NULL, "temporary file %s selected", tfile);
else
- if (unlink (tmpfil) == NOTOK)
- advise (tmpfil, "unable to remove");
+ if (unlink (tfile) == NOTOK)
+ advise (tfile, "unable to remove");
return fd;
}
}
if (!(mp = folder_read (folder))) {
if (debugsw)
- admonish (NULL, "unable to read folder %s");
+ admonish (NULL, "unable to read folder %s", folder);
return;
}
}
-int
-done (int status)
+static void
+armed_done (int status)
{
- if (armed)
- longjmp (env, status ? status : NOTOK);
+ longjmp (env, status ? status : NOTOK);
exit (status);
- return 1; /* dead code to satisfy the compiler */
}