Ralph Corderoy [Tue, 18 Oct 2016 00:18:24 +0000 (01:18 +0100)]
Replace a few calculations of string lengths with concat().
Saves the reader have to keep checking all the +1 are correct.
Passed the oauth tests; they weren't skipped.
Ralph Corderoy [Mon, 17 Oct 2016 22:52:00 +0000 (23:52 +0100)]
Close FILE pointer in anno for -append as well as -delete.
https://savannah.nongnu.org/bugs/?23465 has Peter Maydell pointing out
the assymetric open and close of a FILE pointer. He's right on that
AFAICS so change the test to be for a non-NULL pointer rather than the
more wordy and prone to error flag-testing.
Ralph Corderoy [Mon, 17 Oct 2016 19:35:51 +0000 (20:35 +0100)]
A-ha! automake has support for tests expected to fail; use that.
Backing out my recent addition of an `expectedfail` parameter to the
`check' function.
Ralph Corderoy [Mon, 17 Oct 2016 10:30:24 +0000 (11:30 +0100)]
Oops, fc31cece had a syntax error that gcc ignored, clang doesn't.
Two logical-or operators in a row don't upset gcc. Who said parsing was
a solved problem?
Ralph Corderoy [Mon, 17 Oct 2016 00:36:35 +0000 (01:36 +0100)]
Don't call strlen() twice; save result.
The second instance was attempting to write strlen(mmdlm2) bytes
and checking the return value against strlen(mmdlm1). I assumed
that was an error without digging.
Ralph Corderoy [Sun, 16 Oct 2016 22:16:26 +0000 (23:16 +0100)]
Rename local enum to avoid clashing with NEW() macro.
Even if it doesn't in practice due to the lack of parenthesis, it makes
things more clean if all the enumerates have a common abbreviation
prefix.
Ralph Corderoy [Sun, 16 Oct 2016 18:38:36 +0000 (19:38 +0100)]
Add NEW(p) that sets p to mh_xmalloc'd memory sized by *p.
Use it for the simple cases. Again, saves having to check the same
identifier is given, possibly far apart after a superfluous cast.
Ralph Corderoy [Sun, 16 Oct 2016 17:49:32 +0000 (18:49 +0100)]
Add macro NEW0(p) that callocs, and use it in simple calls.
p is a pointer, the size of the contents of the pointer is allocated
with calloc via mh_xcalloc. It saves having to check every calloc to
ensure the space requested matches the pointer to which it is assigned.
Ralph Corderoy [Sun, 16 Oct 2016 17:24:51 +0000 (18:24 +0100)]
Put parameter names in h/utils.h memory function prototypes.
It can be a problem if there is a system creeps in a clashing macro,
e.g. `size', but that's unlikely and I think the documentation benefits.
Ralph Corderoy [Sun, 16 Oct 2016 17:21:15 +0000 (18:21 +0100)]
Add mh_xfree(), guarding free(3) from NULLs.
Perhaps all nmh's platforms cope with free(3) these days, but it gives
symmetry with the other mh_x* memory functions and if there is code
testing the pointer before calling free then it can use this instead.
Ralph Corderoy [Sun, 16 Oct 2016 17:17:31 +0000 (18:17 +0100)]
Tweak mh_xcalloc(); print size on error, follow POSIX.
Using `%zu' for the size_t value. That might be a problem on older
platforms, but we'll see. If asked for zero bytes then allocate one to
get a unique pointer.
Ralph Corderoy [Sun, 16 Oct 2016 17:08:29 +0000 (18:08 +0100)]
Tweak mh_xrealloc(); print size on error, follow POSIX.
Using `%zu' for the size_t value. That might be a problem on older
platforms, but we'll see. If asked for zero bytes then free an existing
pointer, only passing it to free(3) if it's non-NULL, and then allocate
a byte so a unique pointer is returned.
Ralph Corderoy [Sun, 16 Oct 2016 16:43:56 +0000 (17:43 +0100)]
Tweak mh_xmalloc(); print size in error, allocate zero bytes.
Using `%zu' for the size_t value. That might be a problem on older
platforms, but we'll see. If asked for zero bytes then allocate one
rather than exit; it's sometimes useful to allocate zero, but some
older platforms might not like it.
Ralph Corderoy [Sun, 16 Oct 2016 14:50:12 +0000 (15:50 +0100)]
Expand the test of scan's -forma; fails on first attempt.
For an email that's just `a:\nb:\nc:\n', a scan with `%{a}\n%{b}\n%{c}'
is one blank line short. If the `%{c}' has anything added then its line
prints. Break out of the loop so all the other tests are skipped.
Ralph Corderoy [Sun, 16 Oct 2016 14:25:37 +0000 (15:25 +0100)]
Don't test -reverse's boolean on every message number.
Test just once before the loop and define start, end, and increment.
Keep going whilst start is not end. Happy for underflow or overflow in
calculating end because msgnum will make the same transition. It can't
affect whether the loop runs at all since 0 is not a valid message
number.
Ralph Corderoy [Sun, 16 Oct 2016 13:19:56 +0000 (14:19 +0100)]
Fix bug where single-character headers were sometimes missed.
The hash function used to check if a header was of interest always used
its first three characters. For a single-character header that third
byte wasn't particularly set and so it was pot luck if the two hashes
matched, swayed by what was previously in the format string and in the
email's headers. Alter it to cope, including with an empty string.
Comment that it never gives 127 so leaves the last element of the
hash-table array unused. Alter test-header-parsing to stop declaring it
expects to fail.
Ralph Corderoy [Sun, 16 Oct 2016 11:44:32 +0000 (12:44 +0100)]
Change all Getc() callers to use EOF, not comparisons with 0.
Makes the logic that bit easier when you don't have to convert to EOF
mentally. No functional change intended.
Ralph Corderoy [Sun, 16 Oct 2016 11:23:57 +0000 (12:23 +0100)]
Don't increment bytes_read if returning EOF.
Don't know if this was actually causing a problem, or if it was wrong,
but bytes_read was always being incremented even if the later test
showed readpos was to be left unincremented and EOF returned instead.
All tests still pass so any breakage must be subtle!
Ralph Corderoy [Sun, 16 Oct 2016 11:13:59 +0000 (12:13 +0100)]
Fix spelling in comment. Alter case to match identifier.
vim will search matching case on `*', for example, so if searching for
`\<fdelim\>' the comment shouldn't use `Fdelim'.
Ralph Corderoy [Sun, 16 Oct 2016 10:43:45 +0000 (11:43 +0100)]
Add failing test case for single-character header parsing.
`scan -format '%{x}'' fails to find single-character header `x' in some
cases, depending on the position of the header in the file. Add a
simple test case, scan/test-header-parsing, for this that fails. Alter
the test harness to allow a test to indicate it expects to fail. When
it does, that's ignored. If it passes, that's then an error instead.
Did this because I don't know if or when it will be fixed and didn't
want it to be forgotten in the meantime. When it is fixed, the test can
be enhanced to cover many more possibilities. First noticed it with ad
hoc testing of my fewer-lseek change, but it is present in the released
1.6.
Ralph Corderoy [Sun, 16 Oct 2016 08:17:51 +0000 (09:17 +0100)]
Move -help and -version to the front of the man page options.
The man pages had -verbose and -help listed at the end of the synopsis.
This put them after mandatory arguments in some cases, e.g. post(8).
Put then at the front, swapping the order so -help is first, as novices
will want to know -help exists early on, and others can simply skip over
them rather than encounter them at the end when they're trying to track
the combinations of what they've read so far.
Ralph Corderoy [Sun, 16 Oct 2016 07:52:10 +0000 (08:52 +0100)]
Fix end of sentence spacing in man pages, and related problems.
troff(1) input that ends a sentence at the end of the line gets the
proper inter-sentence spacing when formatted. If the sentence ends
midline then two spaces must follow to get the same result, otherwise
the spacing looks odd. Similarly, if a full stop is not the end of a
sentence then it should have the zero-width escape appended so if
re-formatting the source happens to place it at the end of the line then
no large gap follows it: e.g. `e.g.\&'.
Replace `et. al.' with `et al'.
Ralph Corderoy [Sun, 16 Oct 2016 07:23:51 +0000 (08:23 +0100)]
Stop one lseek(2) per header fetched by m_getfld.c in common case.
Only call ftello(3) in enter_getfld() when track_filepos has been
requested; not often.
David Levine [Fri, 14 Oct 2016 17:27:32 +0000 (13:27 -0400)]
Instead of feeding stdin to script(1) in test-version-check,
create a simple shell script with the command to be run and feed
it to script via the SHELL environment variable or -S option.
Thanks to Ralph for suggesting this approach. We'll see if it
works on all of the buildbot hosts.