Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Oct 2001 09:46:09 -0500 (EST)
From:      "Andrew R. Reiter" <arr@watson.org>
To:        Dag-Erling Smorgrav <des@ofug.org>
Cc:        Luigi Rizzo <rizzo@aciri.org>, Josef Karthauser <joe@FreeBSD.org>, cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: ipfw.c -- (was: cvs commit: src/sys/netinet ip_fw.h)
Message-ID:  <Pine.NEB.3.96L.1011029094550.38377B-100000@fledge.watson.org>
In-Reply-To: <xzp4roiqzrd.fsf@flood.ping.uio.no>

next in thread | previous in thread | raw e-mail | index | archive | help
Bah, the point was to illustrate exactly this.  thanks for reiterating,
des.

Cheers,
Andrew

On 29 Oct 2001, Dag-Erling Smorgrav wrote:

:"Andrew R. Reiter" <arr@watson.org> writes:
:>         if (chain->fw_flg & IP_FW_F_RND_MATCH) {
:>                 double d = 1.0 * chain->dont_match_prob;
:>                 d = 1 - (d / 0x7fffffff);
:>                 printf("prob %f ", d);
:>         }
:
:There is no need for a temporary variable here.  The probability
:computation can be greatly simplified.  BTW, the format string should
:specify the number of decimals (e.g. "%.3f").
:
:        if (chain->fw_flg & IP_FW_F_RND_MATCH)
:                printf("prob %.3f ",
:                    1.0 - chain->dont_match_prob / 0x7fffffff);
:
:Also, the use of the hard-coded value 0x7fffffff looks suspicious.  It
:looks like a scaling factor, which means it's probably used in several
:other places both in the kernel and in userland; it should at the very
:least be a symbolic constant (e.g. PROB_SCALE_FACTOR); at best, there
:should be a preprocessor macro that converts the dont_match_prob value
:to a double in the appropriate range.
:
:>         if (do_time) {
:>                 if (chain->timestamp) {
:>                         char timestr[30];
:>                         strcpy(timestr, ctime((time_t *)&chain->timestamp));
:>                         *strchr(timestr, '\n') = '\0';
:>                         printf("%s ", timestr);
:>                 } else {
:>                         printf("                         ");
:>                 }
:>         }
:
:This code should probably use strftime() instead of ctime(), and
:format the timestamp in ISO8601 format (YYYY-MM-DD HH:MM:SS).  It also
:makes potentially unsound assumptions about the length of the text
:generated by ctime().
:
:Both printf()s can be written more intelligently (and more obviously
:correct) using width and precision specifiers.
:
:        if (do_time) {
:                char timestr[20];
:
:                if (chain->timestamp)
:                        strftime(timestr, sizeof timestr, "%Y-%m-%d %H:%M:%S",
:                            localtime(chain->timestamp));
:                else
:                        timestr[0] = '\0';
:                printf("%-20.20s", timestr);
:        }
:
:DES
:-- 
:Dag-Erling Smorgrav - des@ofug.org
:

*-------------.................................................
| Andrew R. Reiter 
| arr@fledge.watson.org
| "It requires a very unusual mind
|   to undertake the analysis of the obvious" -- A.N. Whitehead


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1011029094550.38377B-100000>