[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Nmh-workers] dist broken in 1.4
From: |
Ken Hornstein |
Subject: |
Re: [Nmh-workers] dist broken in 1.4 |
Date: |
Thu, 02 Feb 2012 21:31:43 -0500 |
> KH> I guess I was kinda hoping that others would confirm that dist
> KH> was, indeed, broken for the 1.4 release. From what I can tell
> KH> it was broken a while ago but no one noticed (I guess users
> KH> of the master branch don't use dist), but I just wanted some
> KH> confirmation. If no one cares I won't bother with a 1.4.1
> KH> release.
>
>It's broken for me in nmh 1.4 (just built) -- I get an error along the
>lines of
>
> send: unable to link /path/to/Mail/inbox/38325 to
> /path/to/Mail/inboxsendKJwMrv: File exists
Thanks for checking! Yeah, turns out that had been broken for years.
The following patch should fix it. I am now mulling over whether
to release a 1.4.1 or a 1.5.
--Ken
commit 01943d78230ead5bcc568e8a87d3cdbaac1f5584
Author: Ken Hornstein <address@hidden>
Date: Wed Jan 11 14:48:45 2012 -0500
Fix two errors in the conversion to m_mktemp2():
- There was an off-by-one error that prevented the temporary file
from being created in the same directory as the message it was being
linked to.
- When using "dist", the assumption was that the temporary file would not
exist when m_scratch was called (it wanted to link() to the name). This
was solved by simply unlink()ing the temporary file after it was created.
diff --git a/sbr/m_mktemp.c b/sbr/m_mktemp.c
index aa25636..9f99119 100644
--- a/sbr/m_mktemp.c
+++ b/sbr/m_mktemp.c
@@ -121,7 +121,7 @@ m_mktemp2 (
/* No directory component */
return m_mktemp(pfx_in, fd_ret, fp_ret);
}
- n = (int)(cp-dir_in-1); /* Length of dir component */
+ n = (int)(cp-dir_in); /* Length of dir component */
snprintf(buffer, sizeof(buffer), "%.*s%s", n, dir_in, pfx_in);
return m_mktemp(buffer, fd_ret, fp_ret);
}
diff --git a/uip/send.c b/uip/send.c
index 39d425f..62bf60a 100644
--- a/uip/send.c
+++ b/uip/send.c
@@ -426,6 +426,7 @@ go_to_it:
&& altmsg) {
vec[vecp++] = "-dist";
distfile = getcpy (m_mktemp2 (altmsg, invo_name, NULL, NULL));
+ unlink(distfile);
if (link (altmsg, distfile) == NOTOK) {
if (errno != EXDEV
#ifdef EISREMOTE
diff --git a/uip/whatnowsbr.c b/uip/whatnowsbr.c
index 7db5c58..c3d93ff 100644
--- a/uip/whatnowsbr.c
+++ b/uip/whatnowsbr.c
@@ -1313,6 +1313,7 @@ sendit (char *sp, char **arg, char *file, int pushed)
&& altmsg) {
vec[vecp++] = "-dist";
distfile = getcpy (m_mktemp2(altmsg, invo_name, NULL, NULL));
+ unlink(distfile);
if (link (altmsg, distfile) == NOTOK)
adios (distfile, "unable to link %s to", altmsg);
} else {
- Re: [Nmh-workers] dist broken in 1.4, C.M. Connelly, 2012/02/02
- Re: [Nmh-workers] dist broken in 1.4,
Ken Hornstein <=
- Re: [Nmh-workers] dist broken in 1.4, Paul Vixie, 2012/02/02
- Re: [Nmh-workers] dist broken in 1.4, Ken Hornstein, 2012/02/02
- Re: [Nmh-workers] dist broken in 1.4, Paul Vixie, 2012/02/02
- Re: [Nmh-workers] dist broken in 1.4, Ken Hornstein, 2012/02/02
- Re: [Nmh-workers] dist broken in 1.4, Paul Vixie, 2012/02/02
- Re: [Nmh-workers] dist broken in 1.4, Ken Hornstein, 2012/02/02
- Re: [Nmh-workers] dist broken in 1.4, Lyndon Nerenberg, 2012/02/03