[Python-Dev] Convert int() to size_t in Python/C (original) (raw)
Marcos Dione mdione at grulic.org.ar
Fri Apr 29 14:11:15 EDT 2016
- Previous message (by thread): [Python-Dev] Convert int() to size_t in Python/C
- Next message (by thread): [Python-Dev] Convert int() to size_t in Python/C
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Fri, Apr 29, 2016 at 12🔞46PM -0400, Random832 wrote:
On Fri, Apr 29, 2016, at 10:45, Marcos Dione wrote: > One possible solution hat was suggested to me in the #python IRC > channel was to use that, then test if the resulting value is negative, > and adjust accordingly, but I wonder if there is a cleaner, more general > solution (for instance, what if the type was something else, like lofft, > although for that one in particular there is a convertion > function/macro).
In principle, you could just use PyLongAsUnsignedLong (or LongLong), and raise OverflowError manually if the value happens to be out of sizet's range. (99% sure that on every linux platform unsigned long is the same size as sizet. But it's not like it'd be the first function in OS to call a system call that takes a sizet. Read just uses Pyssizet. Write uses the buffer protocol, which uses Pyssizet. How concerned are you really about the lost range here? What does the system call return (its return type is ssizet) if it writes more than SSIZEMAX bytes? (This shouldn't be hard to test, just try copying a >2GB file on a 32-bit system)
It's a very good point, but I don't have any 32 bits systems around
with a kernel-4.5. I'll try to figure it out and/or ask in the kernel ML.
I'm more curious about what your calling convention is going to be for offin and offout. I can't think of any other interfaces that have optional output parameters. Python functions generally deal with output parameters in the underlying C function (there are a few examples in math) by returning a tuple.
These are not output parameters, even if they're pointers. they'r
using the NULL pointer to signal that the current offsets should not be touched, to differentiate from a offset of 0. Something that in Python we would use None.
- Previous message (by thread): [Python-Dev] Convert int() to size_t in Python/C
- Next message (by thread): [Python-Dev] Convert int() to size_t in Python/C
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]