The idea is to do as little parsing and modification of the delivered
message as possible. Luckily the position of the "envelope header"
lets us escape it by replacing the first 5 characters of the stream
with a regular header name (with ':').
copy_fd (int fdout, int fdin)
{
bool empty = true;
copy_fd (int fdout, int fdin)
{
bool empty = true;
+ bool first = true;
+ const char *header = "X-Envelope-From: ";
while (! interrupted) {
ssize_t remain;
char buf[4096];
while (! interrupted) {
ssize_t remain;
char buf[4096];
remain = read (fdin, buf, sizeof (buf));
if (remain == 0)
remain = read (fdin, buf, sizeof (buf));
if (remain == 0)
strerror (errno));
return false;
}
strerror (errno));
return false;
}
- if (! write_buf (buf, fdout, remain))
+
+ if (first && remain >= 5 && 0 == strncmp (buf, "From ", 5)) {
+ if (! write_buf (header, fdout, strlen (header)))
+ return false;
+ p += 5;
+ remain -= 5;
+ }
+
+ first = false;
+
+ if (! write_buf (p, fdout, remain))
return false;
empty = false;
}
return false;
empty = false;
}
done
test_begin_subtest "insert converts mboxes on delivery"
done
test_begin_subtest "insert converts mboxes on delivery"
-test_subtest_known_broken
notmuch insert +unmboxed < "${TEST_DIRECTORY}"/corpora/indexing/mbox-attachment.eml
output=$(notmuch count tag:unmboxed)
test_expect_equal "${output}" 1
notmuch insert +unmboxed < "${TEST_DIRECTORY}"/corpora/indexing/mbox-attachment.eml
output=$(notmuch count tag:unmboxed)
test_expect_equal "${output}" 1