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

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

Solaris™ 7 Reference

Solaris™ 7 Reference

Janice Winsor
Mac OS X Tiger in a Nutshell

Mac OS X Tiger in a Nutshell

Andy Lester, Chris Stone, Chuck Toporek, Jason McIntosh
Managing IMAP

Managing IMAP

Dianna Mullet, Kevin Mullet

Publisher Resources

ISBN: 0596008457Catalog PageErrata