The rnote
program is a simple way to keep
track of which version did what. Just
compile it and run:
% rnote RELEASE_NOTES | more
The program itself is written in C and should compile on most systems. The numbers along the left are for descriptive purposes and are not a part of the code.
# include <stdio.h> # include <ctype.h> # include <stdlib.h> # include <strings.h> # include <errno.h> int main(int argc, char **argv) { char *c, *cp, *prefix = NULL; FILE *fp; char buf[BUFSIZ]; if (argc != 2) { (void) printf("Usage: rnote RELEASE_NOTES\n"); exit(EINVAL); } if ((fp = fopen(argv[1], "r")) == NULL) { (void) fprintf(stderr, "rnote: %s: %s\n", argv[1], strerror(errno)); (void) exit(errno); } while ((cp = fgets(buf, BUFSIZ, fp)) != NULL) { if (isdigit((int)*cp)) { if ((c = strchr(cp, '/')) != NULL) { *c = '\0'; if (prefix != NULL) (void) free(prefix); prefix = strdup(cp); continue; } } if (prefix == NULL) continue; (void) printf("%-7.7s%s", prefix, cp); } if (ferror(fp)) { (void) fprintf(stderr, "rnote: %s: %s\n", argv[1], strerror(errno)); (void) exit(errno); } return 0; }
After opening the RELEASE_NOTES
file,
it is read in a loop, one line at a time.
If a line of the file
begins
with a digit, it is presumed to be a
release number (such as 8.12.11
). Everything
following the first slash character is removed
and the result becomes the new prefix
for all following file lines. Each line of
the file is then prefixed with the release that created it and
printed.
By piping the output of this program through
a program such as
more
(1) or less
(1), you may
search for such things as new macros or changes to
libmilter
. We leave as an exercise to the reader
the option to create improvements in, or additions to, this program.
Get sendmail 8.13 Companion now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.