Ralph Corderoy [Wed, 19 Oct 2016 09:09:47 +0000 (10:09 +0100)]
Replace strchr() condition with TrimSuffixC(), fixing assumptions.
A couple of the existing strchr()-based trims assumed fgets() returned a
string containing `\n' if it didn't return NULL.
Ralph Corderoy [Tue, 18 Oct 2016 16:05:24 +0000 (17:05 +0100)]
Add TrimSuffixC(char *s, int c).
TrimSuffixC deletes c from the end of non-NULL string s if it's present,
shortening s by 1. Only one instance of c is removed.
Ralph Corderoy [Tue, 18 Oct 2016 15:23:44 +0000 (16:23 +0100)]
Use concat() in m_putenv. Add FIXME about memory leaks.
POSIX defines setenv(3) and unsetenv(3). They seem like a good route,
just need to preserve the existing functions' behaviour.
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.