Ethereal-dev: Re: [Ethereal-dev] patches for MSVC build process

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Guy Harris <gharris@xxxxxxxxx>
Date: Tue, 24 Aug 2004 20:55:33 -0700
Lars Roland wrote:

- strtoull() replaced with corresponding glib function
  g_ascii_strtoull()

Doesn't work with GLib 1.2[.x]. I changed "config.h.win32" to define "strtoull" as "g_ascii_strtoull" instead (as we require GLib 2.x on Windows).

- added tvb_get_ntoh64() to plugin api

Checked in, with "tvb_get_letoh64()" added as well.

- cosmetic fix for nsis installer

Checked in.

I still get a warning in ftype-integer.c in line 324: Conversion of "__int64" into "int". Possible loss of data.

I assume MSVC6 doesn't know, how to do a "bitwise and" with 64-bit integers.

It knows how to do other arithmetic, so I'd be surprised if it didn't know how to do bitwise and.

It doesnt't, however, know how to fit the result of the bitwise AND into a 32-bit "gboolean" without throwing away 32 of those bits - and neither does GCC, and neither do I. :-)

The "bitwise AND" operator in display filters appears to be intended to be a Boolean that returns TRUE if the result is non-zero and FALSE if the result is zero. I've checked in changes to compare against zero in the 32-bit and 64-bit integer bitwise AND routines; that should suppress the warning, and fix the problem that the warning notes (i.e., if you do

	proto.64-bit-field & 0x8000000000000000

that test would always return FALSE with the code before my checkin).

However, unless I'm missing something, the byte-array and IPv4 bitwise AND routines will return FALSE if *any* of the bytes of the result are zero, rather than returning FALSE only if *all* of them are zero:

        p_a = a->data;
        p_b = b->data;
        while (i < b->len) {
                if (p_a[i] & p_b[i])
                        i++;
                else
                        return FALSE;
        }
        return TRUE;

I think that should be

        p_a = a->data;
        p_b = b->data;
        while (i < b->len) {
                if (p_a[i] & p_b[i])
                        return TRUE;
                else
                        i++;
        }
        return FALSE;

The nsis installer can show a readme file, but there is a limitation. It is necessary to use a standard file extension, e.g. ".txt". "README.win32" won't work. I didn't activate this feature, but I fixed the comment. However I do not think "README.win32" is a good readme file for a normal user. It is mainly about setting up an development environment on Windows.

That's mainly a result of the complexity of setting up that environment; the README.{platform} files are intended to cover all the issues on the platform in question, including both building Ethereal from source and running it.

We might want to split the READMEs into "user" and "developer" READMEs, for the benefit of any binary installers capable of displaying a README at the end of the installation.
 Any suggestions?