/*
- * sendsbr.c -- routines to help WhatNow/Send along
- *
- * 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.
- */
+** sendsbr.c -- routines to help WhatNow/Send along
+**
+** 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.
+*/
#include <h/mh.h>
#include <h/signals.h>
static jmp_buf env;
-static char body_file_name[MAXPATHLEN + 1]; /* name of temporary file for body content */
-static char composition_file_name[MAXPATHLEN + 1]; /* name of mhbuild composition temporary file */
+/* name of temp file for body content */
+static char body_file_name[MAXPATHLEN + 1];
+/* name of mhbuild composition temporary file */
+static char composition_file_name[MAXPATHLEN + 1];
static int field_size; /* size of header field buffer */
static char *field; /* header field buffer */
static FILE *draft_file; /* draft file pointer */
static FILE *composition_file; /* composition file pointer */
/*
- * external prototypes
- */
-int sendsbr (char **, int, char *, struct stat *, int, char *, int);
-char *getusername (void);
+** external prototypes
+*/
+int sendsbr(char **, int, char *, struct stat *, int, char *, 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 *);
-static void annoaux (int);
-static int sendaux (char **, int, char *, struct stat *);
+** static prototypes
+*/
+static void armed_done(int) NORETURN;
+static void alert(char *, int);
+static int tmp_fd(void);
+static void anno(int, struct stat *);
+static void annoaux(int);
+static int sendaux(char **, int, char *, struct stat *);
static int attach(char *, char *, int);
static void clean_up_temporary_files(void);
/*
- * Entry point into (back-end) routines to send message.
- */
+** Entry point into (back-end) routines to send message.
+*/
int
-sendsbr (char **vec, int vecp, char *drft, struct stat *st,
+sendsbr(char **vec, int vecp, char *drft, struct stat *st,
int rename_drft, char *attachment_header_field_name, int attachformat)
{
int status;
char *p; /* string pointer for building file name */
/*
- * Save the original name of the draft file. The name of the
- * draft file is changed to a temporary file containing the built
- * MIME message if there are attachments. We need the original
- * name so that it can be renamed after the message is sent.
- */
+ ** Save the original name of the draft file. The name of the
+ ** draft file is changed to a temporary file containing the built
+ ** MIME message if there are attachments. We need the original
+ ** name so that it can be renamed after the message is sent.
+ */
original_draft = drft;
/*
- * There might be attachments if a header field name for
- * attachments is supplied. Convert the draft to a MIME message.
- * Use the mhbuild composition file for the draft if there was
- * a successful conversion because that now contains the MIME
- * message. A nice side effect of this is that it leaves the
- * original draft file untouched so that it can be retrieved
- * and modified if desired.
- */
+ ** There might be attachments if a header field name for
+ ** attachments is supplied. Convert the draft to a MIME message.
+ ** Use the mhbuild composition file for the draft if there was
+ ** a successful conversion because that now contains the MIME
+ ** message. A nice side effect of this is that it leaves the
+ ** original draft file untouched so that it can be retrieved
+ ** and modified if desired.
+ */
if (attachment_header_field_name != (char *)0) {
- switch (attach(attachment_header_field_name, drft, attachformat)) {
+ switch (attach(attachment_header_field_name, drft,
+ attachformat)) {
case OK:
drft = composition_file_name;
break;
}
done=armed_done;
- switch (setjmp (env)) {
+ switch (setjmp(env)) {
case OK:
/*
- * If given -push and -unique (which is undocumented), then
- * rename the draft file. I'm not quite sure why.
- */
+ ** If given -push and -unique (which is undocumented), then
+ ** rename the draft file. I'm not quite sure why.
+ */
if (pushsw && unique) {
char *cp = m_mktemp2(drft, invo_name, NULL, NULL);
if (cp == NULL) {
- adios ("sendsbr", "unable to create temporary file");
+ adios("sendsbr", "unable to create temporary file");
}
- if (rename (drft, strncpy(file, cp, sizeof(file))) == NOTOK)
- adios (file, "unable to rename %s to", drft);
+ if (rename(drft, strncpy(file, cp, sizeof(file)))
+ == NOTOK)
+ adios(file, "unable to rename %s to", drft);
drft = file;
}
- status = sendaux (vec, vecp, drft, st) ? NOTOK : OK;
+ status = sendaux(vec, vecp, drft, st) ? NOTOK : OK;
/* rename the original draft */
if (rename_drft && status == OK &&
- rename (original_draft, strncpy (buffer, m_backup (original_draft), sizeof(buffer))) == NOTOK)
- advise (buffer, "unable to rename %s to", drft);
+ rename(original_draft, strncpy(buffer,
+ m_backup(original_draft), sizeof(buffer)))
+ == NOTOK)
+ advise(buffer, "unable to rename %s to", drft);
break;
default:
done=exit;
if (distfile)
- unlink (distfile);
+ unlink(distfile);
/*
- * Get rid of any temporary files that we created for attachments.
- * Also get rid of the renamed composition file that mhbuild
- * leaves as a turd. It looks confusing, but we use the body
- * file name to help build the renamed composition file name.
- */
+ ** Get rid of any temporary files that we created for attachments.
+ ** Also get rid of the renamed composition file that mhbuild
+ ** leaves as a turd. It looks confusing, but we use the body
+ ** file name to help build the renamed composition file name.
+ */
if (drft == composition_file_name) {
clean_up_temporary_files();
- if (strlen(composition_file_name) >= sizeof (composition_file_name) - 6)
+ if (strlen(composition_file_name) >=
+ sizeof (composition_file_name) - 6)
advise((char *)0, "unable to remove original composition file.");
else {
- if ((p = strrchr(composition_file_name, '/')) == (char *)0)
+ if ((p = strrchr(composition_file_name, '/')) == NULL)
p = composition_file_name;
else
p++;
char *p; /* miscellaneous string pointer */
/*
- * Open up the draft file.
- */
+ ** Open up the draft file.
+ */
if ((draft_file = fopen(draft_file_name, "r")) == (FILE *)0)
- adios((char *)0, "can't open draft file `%s'.", draft_file_name);
+ adios((char *)0, "can't open draft file `%s'.",
+ draft_file_name);
/*
- * Allocate a buffer to hold the header components as they're read in.
- * This buffer might need to be quite large, so we grow it as needed.
- */
+ ** Allocate a buffer to hold the header components as they're read in.
+ ** This buffer might need to be quite large, so we grow it as needed.
+ */
field = (char *)mh_xmalloc(field_size = 256);
/*
- * Scan the draft file for a header field name that matches the
- * -attach argument. The existence of one indicates that the
- * draft has attachments. Bail out if there are no attachments
- * because we're done. Read to the end of the headers even if
- * we have no attachments.
- */
+ ** Scan the draft file for a header field name that matches the
+ ** -attach argument. The existence of one indicates that the
+ ** draft has attachments. Bail out if there are no attachments
+ ** because we're done. Read to the end of the headers even if
+ ** we have no attachments.
+ */
length = strlen(attachment_header_field_name);
has_attachment = 0;
while (get_line() != EOF && *field != '\0' && *field != '-')
- if (strncasecmp(field, attachment_header_field_name, length) == 0 && field[length] == ':')
+ if (strncasecmp(field, attachment_header_field_name, length)
+ == 0 && field[length] == ':')
has_attachment = 1;
if (has_attachment == 0)
return (DONE);
/*
- * We have at least one attachment. Look for at least one
- * non-blank line in the body of the message which indicates
- * content in the body.
- */
+ ** We have at least one attachment. Look for at least one
+ ** non-blank line in the body of the message which indicates
+ ** content in the body.
+ */
has_body = 0;
}
/*
- * Make names for the temporary files.
- */
+ ** Make names for the temporary files.
+ */
(void)strncpy(body_file_name,
- m_mktemp(m_maildir(invo_name), NULL, NULL),
- sizeof (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));
+ m_mktemp(m_maildir(invo_name), NULL, NULL),
+ sizeof (composition_file_name));
if (has_body)
body_file = fopen(body_file_name, "w");
composition_file = fopen(composition_file_name, "w");
- if ((has_body && body_file == (FILE *)0) || composition_file == (FILE *)0) {
+ if ((has_body && body_file == (FILE *)0) ||
+ composition_file == (FILE *)0) {
clean_up_temporary_files();
adios((char *)0, "unable to open all of the temporary files.");
}
/*
- * Start at the beginning of the draft file. Copy all
- * non-attachment header fields to the temporary composition file.
- * Then add the dashed line separator.
- */
+ ** Start at the beginning of the draft file. Copy all
+ ** non-attachment header fields to the temporary composition file.
+ ** Then add the dashed line separator.
+ */
rewind(draft_file);
while (get_line() != EOF && *field != '\0' && *field != '-')
- if (strncasecmp(field, attachment_header_field_name, length) != 0 || field[length] != ':')
+ if (strncasecmp(field, attachment_header_field_name, length)
+ != 0 || field[length] != ':')
(void)fprintf(composition_file, "%s\n", field);
(void)fputs("--------\n", composition_file);
/*
- * Copy the message body to a temporary file.
- */
+ ** Copy the message body to a temporary file.
+ */
if (has_body) {
while ((c = getc(draft_file)) != EOF)
}
/*
- * Add a mhbuild MIME composition file line for the body if
- * there was one.
- */
+ ** Add a mhbuild MIME composition file line for the body if
+ ** there was one.
+ */
if (has_body)
make_mime_composition_file_entry(body_file_name, attachformat);
/*
- * Now, go back to the beginning of the draft file and look for
- * header fields that specify attachments. Add a mhbuild MIME
- * composition file for each.
- */
+ ** Now, go back to the beginning of the draft file and look for
+ ** header fields that specify attachments. Add a mhbuild MIME
+ ** composition file for each.
+ */
rewind(draft_file);
while (get_line() != EOF && *field != '\0' && *field != '-') {
- if (strncasecmp(field, attachment_header_field_name, length) == 0 && field[length] == ':') {
- for (p = field + length + 1; *p == ' ' || *p == '\t'; p++)
+ if (strncasecmp(field, attachment_header_field_name, length)
+ == 0 && field[length] == ':') {
+ for (p = field + length + 1; *p == ' ' || *p == '\t';
+ p++)
;
make_mime_composition_file_entry(p, attachformat);
(void)fclose(composition_file);
/*
- * We're ready to roll! Run mhbuild on the composition file.
- * Note that mhbuild is in the context as buildmimeproc.
- */
+ ** We're ready to roll! Run mhbuild on the composition file.
+ ** Note that mhbuild is in the context as buildmimeproc.
+ */
(void)sprintf(buf, "%s %s", buildmimeproc, composition_file_name);
char *p; /* buffer pointer */
/*
- * Get a line from the input file, growing the field buffer as
- * needed. We do this so that we can fit an entire line in the
- * buffer making it easy to do a string comparison on both the
- * field name and the field body which might be a long path name.
- */
+ ** Get a line from the input file, growing the field buffer as
+ ** needed. We do this so that we can fit an entire line in the
+ ** buffer making it easy to do a string comparison on both the
+ ** field name and the field body which might be a long path name.
+ */
for (n = 0, p = field; (c = getc(draft_file)) != EOF; *p++ = c) {
if (c == '\n' && (c = getc(draft_file)) != ' ' && c != '\t') {
}
}
- /*
- * NUL-terminate the field..
- */
-
+ /* NUL-terminate the field. */
*p = '\0';
return (c);
content_type = (char *)0;
/*
- * Check the file name for a suffix. Scan the context for that
- * suffix on a mhshow-suffix- entry. We use these entries to
- * be compatible with mhshow, and there's no reason to make the
- * user specify each suffix twice. Context entries of the form
- * "mhshow-suffix-contenttype" in the name have the suffix in
- * the field, including the dot.
- */
+ ** Check the file name for a suffix. Scan the context for that
+ ** suffix on a mhshow-suffix- entry. We use these entries to
+ ** be compatible with mhshow, and there's no reason to make the
+ ** user specify each suffix twice. Context entries of the form
+ ** "mhshow-suffix-contenttype" in the name have the suffix in
+ ** the field, including the dot.
+ */
if ((p = strrchr(file_name, '.')) != (char *)0) {
for (np = m_defs; np; np = np->n_next) {
- if (strncasecmp(np->n_name, "mhshow-suffix-", 14) == 0 && mh_strcasecmp(p, np->n_field) == 0) {
+ if (strncasecmp(np->n_name, "mhshow-suffix-", 14) == 0
+ && mh_strcasecmp(p, np->n_field) == 0)
+ {
content_type = np->n_name + 14;
break;
}
}
/*
- * No content type was found, either because there was no matching
- * entry in the context or because the file name has no suffix.
- * Open the file and check for non-ASCII characters. Choose the
- * content type based on this check.
- */
+ ** No content type was found, either because there was no matching
+ ** entry in the context or because the file name has no suffix.
+ ** Open the file and check for non-ASCII characters. Choose the
+ ** content type based on this check.
+ */
if (content_type == (char *)0) {
if ((fp = fopen(file_name, "r")) == (FILE *)0) {
clean_up_temporary_files();
- adios((char *)0, "unable to access file \"%s\"", file_name);
+ adios((char *)0, "unable to access file \"%s\"",
+ file_name);
}
binary = 0;
(void)fclose(fp);
- content_type = binary ? "application/octet-stream" : "text/plain";
+ content_type = binary ?
+ "application/octet-stream" : "text/plain";
}
/*
- * Make sure that the attachment file exists and is readable.
- * Append a mhbuild directive to the draft file. This starts with
- * the content type. Append a file name attribute and a private
- * x-unix-mode attribute. Also append a description obtained
- * (if possible) by running the "file" command on the file.
- */
+ ** Make sure that the attachment file exists and is readable.
+ ** Append a mhbuild directive to the draft file. This starts with
+ ** the content type. Append a file name attribute and a private
+ ** x-unix-mode attribute. Also append a description obtained
+ ** (if possible) by running the "file" command on the file.
+ */
if (stat(file_name, &st) == -1 || access(file_name, R_OK) != 0) {
clean_up_temporary_files();
switch (attachformat) {
case 0:
/* Insert name, file mode, and Content-Id. */
- (void)fprintf(composition_file, "#%s; name=\"%s\"; x-unix-mode=0%.3ho",
- content_type, ((p = strrchr(file_name, '/')) == (char *)0) ? file_name : p + 1, (unsigned short)(st.st_mode & 0777));
+ (void)fprintf(composition_file,
+ "#%s; name=\"%s\"; x-unix-mode=0%.3ho",
+ content_type, ((p = strrchr(file_name, '/'))
+ == (char *)0) ? file_name : p + 1,
+ (unsigned short)(st.st_mode & 0777));
if (strlen(file_name) > MAXPATHLEN) {
clean_up_temporary_files();
- adios((char *)0, "attachment file name `%s' too long.", file_name);
+ adios((char *)0, "attachment file name `%s' too long.",
+ file_name);
}
(void)sprintf(cmd, "file '%s'", file_name);
- if ((fp = popen(cmd, "r")) != (FILE *)0 && fgets(cmd, sizeof (cmd), fp) != (char *)0) {
+ if ((fp = popen(cmd, "r")) != (FILE *)0 &&
+ fgets(cmd, sizeof (cmd), fp) != (char *)0) {
*strchr(cmd, '\n') = '\0';
/*
- * The output of the "file" command is of the form
- *
- * file: description
- *
- * Strip off the "file:" and subsequent white space.
- */
+ ** The output of the "file" command is of the form
+ **
+ ** file: description
+ **
+ ** Strip off the "file:" and subsequent white space.
+ */
for (p = cmd; *p != '\0'; p++) {
if (*p == ':') {
break;
case 1:
- if (stringdex (m_maildir(invo_name), file_name) == 0) {
+ if (stringdex(m_maildir(invo_name), file_name) == 0) {
/*
- * Content had been placed by send into a temp file.
- * Don't generate Content-Disposition header, because
- * it confuses Microsoft Outlook, Build 10.0.6626, at
- * least.
- */
- (void) fprintf (composition_file, "#%s <>", content_type);
+ ** Content had been placed by send into a temp file.
+ ** Don't generate Content-Disposition header, because
+ ** it confuses Microsoft Outlook, Build 10.0.6626, at
+ ** least.
+ */
+ fprintf(composition_file, "#%s <>", content_type);
} else {
- /* Suppress Content-Id, insert simple Content-Disposition. */
- (void) fprintf (composition_file,
+ /*
+ ** Suppress Content-Id, insert simple
+ ** Content-Disposition.
+ */
+ fprintf(composition_file,
"#%s; name=\"%s\" <>{attachment}",
content_type,
((p = strrchr(file_name, '/')) == (char *)0) ?
break;
case 2:
- if (stringdex (m_maildir(invo_name), file_name) == 0) {
+ if (stringdex(m_maildir(invo_name), file_name) == 0) {
/*
- * Content had been placed by send into a temp file.
- * Don't generate Content-Disposition header, because
- * it confuses Microsoft Outlook, Build 10.0.6626, at
- * least.
- */
- (void) fprintf (composition_file, "#%s <>", content_type);
+ ** Content had been placed by send into a temp file.
+ ** Don't generate Content-Disposition header, because
+ ** it confuses Microsoft Outlook, Build 10.0.6626, at
+ ** least.
+ */
+ fprintf(composition_file, "#%s <>", content_type);
} else {
/*
- * Suppress Content-Id, insert Content-Disposition
- * with modification date.
- */
- (void) fprintf (composition_file,
+ ** Suppress Content-Id, insert Content-Disposition
+ ** with modification date.
+ */
+ fprintf(composition_file,
"#%s; name=\"%s\" <>{attachment; modification-date=\"%s\"}",
content_type,
((p = strrchr(file_name, '/')) == (char *)0) ?
- file_name : p + 1, dtime (&st.st_mtime, 0));
+ file_name : p + 1, dtime(&st.st_mtime, 0));
}
break;
default:
- adios ((char *)0, "unsupported attachformat %d", attachformat);
+ adios((char *)0, "unsupported attachformat %d", attachformat);
}
/*
- * Finish up with the file name.
- */
+ ** Finish up with the file name.
+ */
(void)fprintf(composition_file, " %s\n", file_name);
}
/*
- * Annotate original message, and
- * call `postproc' to send message.
- */
+** Annotate original message, and
+** call `postproc' to send message.
+*/
static int
-sendaux (char **vec, int vecp, char *drft, struct stat *st)
+sendaux(char **vec, int vecp, char *drft, struct stat *st)
{
pid_t child_id;
int i, status, fd, fd2;
char backup[BUFSIZ], buf[BUFSIZ];
- fd = pushsw ? tmp_fd () : NOTOK;
+ fd = pushsw ? tmp_fd() : NOTOK;
fd2 = NOTOK;
vec[vecp++] = drft;
if (annotext) {
- if ((fd2 = tmp_fd ()) != NOTOK) {
+ if ((fd2 = tmp_fd()) != NOTOK) {
vec[vecp++] = "-idanno";
- snprintf (buf, sizeof(buf), "%d", fd2);
+ snprintf(buf, sizeof(buf), "%d", fd2);
vec[vecp++] = buf;
} else {
- admonish (NULL, "unable to create file for annotation list");
+ admonish(NULL, "unable to create file for annotation list");
}
}
- if (distfile && distout (drft, distfile, backup) == NOTOK)
- done (1);
+ if (distfile && distout(drft, distfile, backup) == NOTOK)
+ done(1);
vec[vecp] = NULL;
for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++)
- sleep (5);
+ sleep(5);
switch (child_id) {
case -1:
/* oops -- fork error */
- adios ("fork", "unable to");
+ adios("fork", "unable to");
break; /* NOT REACHED */
case 0:
/*
- * child process -- send it
- *
- * If fd is ok, then we are pushing and fd points to temp
- * file, so capture anything on stdout and stderr there.
- */
+ ** child process -- send it
+ **
+ ** If fd is ok, then we are pushing and fd points to temp
+ ** file, so capture anything on stdout and stderr there.
+ */
if (fd != NOTOK) {
- dup2 (fd, fileno (stdout));
- dup2 (fd, fileno (stderr));
- close (fd);
+ dup2(fd, fileno(stdout));
+ dup2(fd, fileno(stderr));
+ close(fd);
}
- execvp (postproc, vec);
- fprintf (stderr, "unable to exec ");
- perror (postproc);
- _exit (-1);
+ execvp(postproc, vec);
+ fprintf(stderr, "unable to exec ");
+ perror(postproc);
+ _exit(-1);
break; /* NOT REACHED */
default:
/*
- * parent process -- wait for it
- */
+ ** parent process -- wait for it
+ */
if ((status = pidwait(child_id, NOTOK)) == OK) {
if (annotext && fd2 != NOTOK)
- anno (fd2, st);
+ anno(fd2, st);
} else {
/*
- * If postproc failed, and we have good fd (which means
- * we pushed), then mail error message (and possibly the
- * draft) back to the user.
- */
+ ** If postproc failed, and we have good fd (which
+ ** means we pushed), then mail error message
+ ** (and possibly the draft) back to the user.
+ */
if (fd != NOTOK) {
- alert (drft, fd);
- close (fd);
+ alert(drft, fd);
+ close(fd);
} else {
- advise (NULL, "message not delivered to anyone");
+ advise(NULL, "message not delivered to anyone");
}
if (annotext && fd2 != NOTOK)
- close (fd2);
+ close(fd2);
if (distfile) {
- unlink (drft);
- if (rename (backup, drft) == NOTOK)
- advise (drft, "unable to rename %s to", backup);
+ unlink(drft);
+ if (rename(backup, drft) == NOTOK)
+ advise(drft, "unable to rename %s to",
+ backup);
}
}
break;
/*
- * Mail error notification (and possibly a copy of the
- * message) back to the user, using the mailproc
- */
+** Mail error notification (and possibly a copy of the
+** message) back to the user, using the mailproc
+*/
static void
-alert (char *file, int out)
+alert(char *file, int out)
{
pid_t child_id;
int i, in;
char buf[BUFSIZ];
for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++)
- sleep (5);
+ sleep(5);
switch (child_id) {
case NOTOK:
/* oops -- fork error */
- advise ("fork", "unable to");
+ advise("fork", "unable to");
case OK:
/* child process -- send it */
- SIGNAL (SIGHUP, SIG_IGN);
- SIGNAL (SIGINT, SIG_IGN);
- SIGNAL (SIGQUIT, SIG_IGN);
- SIGNAL (SIGTERM, SIG_IGN);
+ SIGNAL(SIGHUP, SIG_IGN);
+ SIGNAL(SIGINT, SIG_IGN);
+ SIGNAL(SIGQUIT, SIG_IGN);
+ SIGNAL(SIGTERM, SIG_IGN);
if (forwsw) {
- if ((in = open (file, O_RDONLY)) == NOTOK) {
- admonish (file, "unable to re-open");
+ if ((in = open(file, O_RDONLY)) == NOTOK) {
+ admonish(file, "unable to re-open");
} else {
- lseek (out, (off_t) 0, SEEK_END);
- strncpy (buf, "\nMessage not delivered to anyone.\n", sizeof(buf));
- write (out, buf, strlen (buf));
- strncpy (buf, "\n------- Unsent Draft\n\n", sizeof(buf));
- write (out, buf, strlen (buf));
- cpydgst (in, out, file, "temporary file");
- close (in);
- strncpy (buf, "\n------- End of Unsent Draft\n", sizeof(buf));
- write (out, buf, strlen (buf));
- if (rename (file, strncpy (buf, m_backup (file), sizeof(buf))) == NOTOK)
- admonish (buf, "unable to rename %s to", file);
+ lseek(out, (off_t) 0, SEEK_END);
+ strncpy(buf, "\nMessage not delivered to anyone.\n", sizeof(buf));
+ write(out, buf, strlen(buf));
+ strncpy(buf, "\n------- Unsent Draft\n\n", sizeof(buf));
+ write(out, buf, strlen(buf));
+ cpydgst(in, out, file, "temporary file");
+ close(in);
+ strncpy(buf, "\n------- End of Unsent Draft\n", sizeof(buf));
+ write(out, buf, strlen(buf));
+ if (rename(file, strncpy(buf, m_backup(file), sizeof(buf))) == NOTOK)
+ admonish(buf, "unable to rename %s to", file);
}
}
- lseek (out, (off_t) 0, SEEK_SET);
- dup2 (out, fileno (stdin));
- close (out);
+ lseek(out, (off_t) 0, SEEK_SET);
+ dup2(out, fileno(stdin));
+ close(out);
/* create subject for error notification */
- snprintf (buf, sizeof(buf), "send failed on %s",
- forwsw ? "enclosed draft" : file);
+ snprintf(buf, sizeof(buf), "send failed on %s",
+ forwsw ? "enclosed draft" : file);
- execlp (mailproc, r1bindex (mailproc, '/'), getusername (),
- "-subject", buf, NULL);
- fprintf (stderr, "unable to exec ");
- perror (mailproc);
- _exit (-1);
+ execlp(mailproc, r1bindex(mailproc, '/'),
+ getusername(), "-subject", buf, NULL);
+ fprintf(stderr, "unable to exec ");
+ perror(mailproc);
+ _exit(-1);
default: /* no waiting... */
break;
static int
-tmp_fd (void)
+tmp_fd(void)
{
int fd;
char *tfile = NULL;
fchmod(fd, 0600);
if (debugsw)
- advise (NULL, "temporary file %s selected", tfile);
+ advise(NULL, "temporary file %s selected", tfile);
else
- if (unlink (tfile) == NOTOK)
- advise (tfile, "unable to remove");
+ if (unlink(tfile) == NOTOK)
+ advise(tfile, "unable to remove");
return fd;
}
static void
-anno (int fd, struct stat *st)
+anno(int fd, struct stat *st)
{
pid_t child_id;
sigset_t set, oset;
static char *cwd = NULL;
struct stat st2;
- if (altmsg &&
- (stat (altmsg, &st2) == NOTOK
- || st->st_mtime != st2.st_mtime
- || st->st_dev != st2.st_dev
- || st->st_ino != st2.st_ino)) {
+ if (altmsg && (stat(altmsg, &st2) == NOTOK ||
+ st->st_mtime != st2.st_mtime ||
+ st->st_dev != st2.st_dev ||
+ st->st_ino != st2.st_ino)) {
if (debugsw)
- admonish (NULL, "$mhaltmsg mismatch");
+ admonish(NULL, "$mhaltmsg mismatch");
return;
}
- child_id = debugsw ? NOTOK : fork ();
+ child_id = debugsw ? NOTOK : fork();
switch (child_id) {
case NOTOK: /* oops */
if (!debugsw)
- advise (NULL,
- "unable to fork, so doing annotations by hand...");
+ advise(NULL, "unable to fork, so doing annotations by hand...");
if (cwd == NULL)
- cwd = getcpy (pwd ());
+ cwd = getcpy(pwd());
case OK:
/* block a few signals */
- sigemptyset (&set);
- sigaddset (&set, SIGHUP);
- sigaddset (&set, SIGINT);
- sigaddset (&set, SIGQUIT);
- sigaddset (&set, SIGTERM);
- SIGPROCMASK (SIG_BLOCK, &set, &oset);
-
- annoaux (fd);
+ sigemptyset(&set);
+ sigaddset(&set, SIGHUP);
+ sigaddset(&set, SIGINT);
+ sigaddset(&set, SIGQUIT);
+ sigaddset(&set, SIGTERM);
+ SIGPROCMASK(SIG_BLOCK, &set, &oset);
+
+ annoaux(fd);
if (child_id == OK)
- _exit (0);
+ _exit(0);
/* reset the signal mask */
- SIGPROCMASK (SIG_SETMASK, &oset, &set);
+ SIGPROCMASK(SIG_SETMASK, &oset, &set);
- chdir (cwd);
+ chdir(cwd);
break;
default: /* no waiting... */
- close (fd);
+ close(fd);
break;
}
}
static void
-annoaux (int fd)
+annoaux(int fd)
{
int fd2, fd3, msgnum;
char *cp, *folder, *maildir;
FILE *fp;
struct msgs *mp;
- if ((folder = getenv ("mhfolder")) == NULL || *folder == 0) {
+ if ((folder = getenv("mhfolder")) == NULL || *folder == 0) {
if (debugsw)
- admonish (NULL, "$mhfolder not set");
+ admonish(NULL, "$mhfolder not set");
return;
}
- maildir = m_maildir (folder);
- if (chdir (maildir) == NOTOK) {
+ maildir = m_maildir(folder);
+ if (chdir(maildir) == NOTOK) {
if (debugsw)
- admonish (maildir, "unable to change directory to");
+ admonish(maildir, "unable to change directory to");
return;
}
- if (!(mp = folder_read (folder))) {
+ if (!(mp = folder_read(folder))) {
if (debugsw)
- admonish (NULL, "unable to read folder %s", folder);
+ admonish(NULL, "unable to read folder %s", folder);
return;
}
/* check for empty folder */
if (mp->nummsg == 0) {
if (debugsw)
- admonish (NULL, "no messages in %s", folder);
+ admonish(NULL, "no messages in %s", folder);
goto oops;
}
- if ((cp = getenv ("mhmessages")) == NULL || *cp == 0) {
+ if ((cp = getenv("mhmessages")) == NULL || *cp == 0) {
if (debugsw)
- admonish (NULL, "$mhmessages not set");
+ admonish(NULL, "$mhmessages not set");
goto oops;
}
if (!debugsw /* MOBY HACK... */
&& pushsw
- && (fd3 = open ("/dev/null", O_RDWR)) != NOTOK
- && (fd2 = dup (fileno (stderr))) != NOTOK) {
- dup2 (fd3, fileno (stderr));
- close (fd3);
+ && (fd3 = open("/dev/null", O_RDWR)) != NOTOK
+ && (fd2 = dup(fileno(stderr))) != NOTOK) {
+ dup2(fd3, fileno(stderr));
+ close(fd3);
}
else
fd2 = NOTOK;
- for (ap = brkstring (cp = getcpy (cp), " ", NULL); *ap; ap++)
- m_convert (mp, *ap);
- free (cp);
+ for (ap = brkstring(cp = getcpy(cp), " ", NULL); *ap; ap++)
+ m_convert(mp, *ap);
+ free(cp);
if (fd2 != NOTOK)
- dup2 (fd2, fileno (stderr));
+ dup2(fd2, fileno(stderr));
if (mp->numsel == 0) {
if (debugsw)
- admonish (NULL, "no messages to annotate");
+ admonish(NULL, "no messages to annotate");
goto oops;
}
- lseek (fd, (off_t) 0, SEEK_SET);
- if ((fp = fdopen (fd, "r")) == NULL) {
+ lseek(fd, (off_t) 0, SEEK_SET);
+ if ((fp = fdopen(fd, "r")) == NULL) {
if (debugsw)
- admonish (NULL, "unable to fdopen annotation list");
+ admonish(NULL, "unable to fdopen annotation list");
goto oops;
}
cp = NULL;
- while (fgets (buffer, sizeof(buffer), fp) != NULL)
- cp = add (buffer, cp);
- fclose (fp);
+ while (fgets(buffer, sizeof(buffer), fp) != NULL)
+ cp = add(buffer, cp);
+ fclose(fp);
if (debugsw)
- advise (NULL, "annotate%s with %s: \"%s\"",
+ advise(NULL, "annotate%s with %s: \"%s\"",
inplace ? " inplace" : "", annotext, cp);
for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
if (is_selected(mp, msgnum)) {
if (debugsw)
- advise (NULL, "annotate message %d", msgnum);
- annotate (m_name (msgnum), annotext, cp, inplace, 1, -2, 0);
+ advise(NULL, "annotate message %d", msgnum);
+ annotate(m_name (msgnum), annotext, cp, inplace,
+ 1, -2, 0);
}
}
- free (cp);
+ free(cp);
oops:
- folder_free (mp); /* free folder/message structure */
+ folder_free(mp); /* free folder/message structure */
}
static void
-armed_done (int status)
+armed_done(int status)
{
- longjmp (env, status ? status : NOTOK);
+ longjmp(env, status ? status : NOTOK);
- exit (status);
+ exit(status);
}