Graham Dumpleton wrote:
Jim Gallacher wrote ..
Several of your other warnings such as:

C:\work\mod_python-3.3.0-dev-20061109\src\util.c(170) : warning C4244:
'function' : conversion from 'double' to 'long', possible loss of data

are the result of converting apr_time_t from microseconds to seconds:

         PyTuple_SET_ITEM(t, 9, PyInt_FromLong(f->ctime*0.000001));

In these cases your compiler is complaining needlessly. None the less,
I think multiplying by 0.000001 is both sloppy and error prone for these
types of conversions.

I think we should do something like this:

         PyTuple_SET_ITEM(t, 9,
                          PyInt_FromLong(f->ctime/ APR_USEC_PER_SEC));
        
or perhaps use the apr_time_sec macro:
        PyTuple_SET_ITEM(t, 9, PyInt_FromLong(apr_time_sec(f->ctime)));

On the other hand, maybe some of these conversions could be considered
bugs. Should the mtime, ctime and atime of the finfo object be restricted to 1 second resolution? For comparison, req.request_time converts to a float:
        PyFloat_FromDouble(time*0.000001)
where time is also apr_time_t.

When I added struct style access in finfoobject, I deliberately left them as
int's to maintain a parallel to the fact that os.stat() under Python uses ints
still and that tuple access also used ints.

This changed in python 2.3. From the 2.4 docs:

"""Changed in version 2.3: If stat_float_times returns true, the time values are floats, measuring seconds. Fractions of a second may be reported if the system supports that. On Mac OS, the times are always floats. See stat_float_times for further discussion."""

I don't have a problem with leaving it as int however.

Jim

Reply via email to