libvirt/python
Eric Blake 4a86c2bb4b python: improve conversion validation
Laszlo Ersek pointed out that in trying to convert a long to an
unsigned int, we used:

long long_val = ...;
if ((unsigned int)long_val == long_val)

According to C99 integer promotion rules, the if statement is
equivalent to:

(unsigned long)(unsigned int)long_val == (unsigned long)long_val

since you get an unsigned comparison if at least one side is
unsigned, using the largest rank of the two sides; but on 32-bit
platforms, where unsigned long and unsigned int are the same size,
this comparison is always true and ends up converting negative
long_val into posigive unsigned int values, rather than rejecting
the negative value as we had originally intended (python longs
are unbounded size, and we don't want to do silent modulo
arithmetic when converting to C code).

Fix this by using direct comparisons, rather than casting.

* python/typewrappers.c (libvirt_intUnwrap, libvirt_uintUnwrap)
(libvirt_ulongUnwrap, libvirt_ulonglongUnwrap): Fix conversion
checks.
2012-03-31 09:16:00 -06:00
..
tests maint: add missing copyright notices 2011-07-28 15:01:17 -06:00
generator.py Cleanup for a return statement in source files 2012-03-26 14:45:22 -06:00
libvirt-override-api.xml python: make python APIs use these helper functions 2012-03-28 08:54:06 -06:00
libvirt-override-virConnect.py Add support for the suspend event 2012-03-23 23:12:18 +08:00
libvirt-override-virStream.py python: correct a copy-paste error 2012-02-01 10:26:57 +01:00
libvirt-override.c python: make python APIs use these helper functions 2012-03-28 08:54:06 -06:00
libvirt-override.py Fix two comments related to error handling 2011-10-17 17:21:56 +02:00
libvirt-qemu-override-api.xml qemu_api: Add override XML and C files for QEMU APIs 2011-09-14 11:38:51 +08:00
libvirt-qemu-override.c Cleanup for a return statement in source files 2012-03-26 14:45:22 -06:00
Makefile.am pyhton: Don't link against libvirt_util.la 2012-02-07 13:30:42 +01:00
README Re-arrange python generator to make it clear what's auto-generated 2009-09-21 14:41:46 +01:00
TODO syntax-check: enforce the no-cvs-keywords prohibition 2008-12-15 10:24:54 +00:00
typewrappers.c python: improve conversion validation 2012-03-31 09:16:00 -06:00
typewrappers.h python: Add new helper functions for python to C integral conversion 2012-03-28 08:42:40 -06:00

    libvirt Python Bindings README
    ==============================

Most of the libvirt python binding code is automatically generated
using the script  generator.py, and the API description from
docs/libvirt-api.xml


Manually written files:

 - libvirt-override.c: methods where the C binding needs to be hand crafted
 - libvirt-override.py: global methods where the C and python bindings have different args
 - libvirt-override-api.xml: methods where the auto-extracted API docs are not
   suitable for python auto-generator. Overriding this if the method is going
   into libvirt-override.c, but we still want auto-generated libvirt-override.py
 - libvirt-override-virConnect.py: virConnect class methods
 - typewrappers.h,.c: Python object wrappers for each libvirt C object


Auto-generated files:

  - libvirt.py: The main python binding. Comprises auto-generated code, along
    with contents from libvirt-override.py and libvirt-override-virConnect.py
  - libvirt.c, libvirt.h: The C glue layer for the python binding. Comprises
    auto-generated code, along with libvirt-override.c
  - libvirt-export.c: List of auto-generated C methods, included into
    the libvirt-override.c method table