Skip to Main Content
sendmail 8.13 Companion
book

sendmail 8.13 Companion

by Bryan Costales, George Jansen, Claus Assmann, Gregory Neil Shapiro
September 2004
Intermediate to advanced content levelIntermediate to advanced
192 pages
10h 12m
English
O'Reilly Media, Inc.
Content preview from sendmail 8.13 Companion

A Useful Program

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 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Slamming Spam: A Guide for System Administrators

Slamming Spam: A Guide for System Administrators

Dale Nielsen, Robert Haskins
Mac OS X Tiger in a Nutshell

Mac OS X Tiger in a Nutshell

Andy Lester, Chris Stone, Chuck Toporek, Jason McIntosh

Publisher Resources

ISBN: 0596008457Catalog PageErrata