diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/dmidecode.c | 59 | ||||
-rw-r--r-- | src/dmidecode.h | 5 | ||||
-rw-r--r-- | src/dmidecodemodule.c | 1 | ||||
-rw-r--r-- | src/dmidecodemodule.h | 4 |
4 files changed, 34 insertions, 35 deletions
diff --git a/src/dmidecode.c b/src/dmidecode.c index c146969..f6f4283 100644 --- a/src/dmidecode.c +++ b/src/dmidecode.c @@ -60,8 +60,6 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include <Python.h> - /* #undef NDEBUG */ @@ -5388,12 +5386,14 @@ int _smbios_decode_check(u8 * buf) !checksum(buf + 0x10, 0x0F)) ? 0 : 1; return check; } -int smbios_decode_set_version(u8 * buf, const char *devmem, PyObject ** pydata) + +int smbios_decode_set_version(u8 * buf, const char *devmem, xmlNode *node) { int check = _smbios_decode_check(buf); - char vbuf[64]; - bzero(vbuf, 64); + xmlNode *data_n = xmlNewChild(node, NULL, (xmlChar *) "SMBIOSversion", NULL); + assert( data_n != NULL ); + if(check == 1) { u16 ver = (buf[0x06] << 8) + buf[0x07]; @@ -5414,20 +5414,18 @@ int smbios_decode_set_version(u8 * buf, const char *devmem, PyObject ** pydata) ver = 0x0206; break; } - if(_m || _M) - sprintf(vbuf, "SMBIOS %i.%i present (Version fixup 2.%d -> 2.%d)", ver >> 8, - ver & 0xFF, _m, _M); - else - sprintf(vbuf, "SMBIOS %i.%i present", ver >> 8, ver & 0xFF); - } else if(check == 0) { - sprintf(vbuf, "No SMBIOS nor DMI entry point found"); - } - if(check == 1) { - if(*pydata) { - Py_DECREF(*pydata); + if(_m || _M) { + dmixml_AddTextContent(data_n, "SMBIOS %i.%i present (Version fixup 2.%d -> 2.%d)", + ver >> 8, ver & 0xFF, _m, _M); + dmixml_AddAttribute(data_n, "version", "%i.%i", ver >> 8, ver & 0xFF); + dmixml_AddAttribute(data_n, "fixup_version", "2.%d_2.%d", _m, _M); + } else { + dmixml_AddTextContent(data_n, "SMBIOS %i.%i present", ver >> 8, ver & 0xFF); + dmixml_AddAttribute(data_n, "version", "%i.%i", ver >> 8, ver & 0xFF); } - *pydata = PyString_FromString(vbuf); - Py_INCREF(*pydata); + } else if(check == 0) { + dmixml_AddTextContent(data_n, "No SMBIOS nor DMI entry point found"); + dmixml_AddAttribute(data_n, "unknown", "1"); } return check; } @@ -5464,26 +5462,27 @@ int _legacy_decode_check(u8 * buf) check = 1; //. Good return check; } -int legacy_decode_set_version(u8 * buf, const char *devmem, PyObject ** pydata) + +int legacy_decode_set_version(u8 * buf, const char *devmem, xmlNode *node) { int check = _legacy_decode_check(buf); - char vbuf[64]; - bzero(vbuf, 64); + xmlNode *data_n = xmlNewChild(node, NULL, (xmlChar *) "LegacyDMI", NULL); + assert( data_n != NULL ); + if(check == 1) { - sprintf(vbuf, "Legacy DMI %i.%i present", buf[0x0E] >> 4, buf[0x0E] & 0x0F); + dmixml_AddTextContent(data_n, "Legacy DMI %i.%i present", + buf[0x0E] >> 4, buf[0x0E] & 0x0F); + dmixml_AddAttribute(data_n, "version", "%i.%i", + buf[0x0E] >> 4, buf[0x0E] & 0x0F); } else if(check == 0) { - sprintf(vbuf, "No SMBIOS nor DMI entry point found"); - } - if(check == 1) { - if(*pydata) { - Py_DECREF(*pydata); - } - *pydata = PyString_FromString(vbuf); - Py_INCREF(*pydata); + dmixml_AddTextContent(data_n, "No SMBIOS nor DMI entry point found"); + dmixml_AddAttribute(data_n, "unknown", "1"); } + return check; } + int legacy_decode(u8 * buf, const char *devmem, xmlNode *xmlnode) { int check = _legacy_decode_check(buf); diff --git a/src/dmidecode.h b/src/dmidecode.h index 9f6738d..bbc8eca 100644 --- a/src/dmidecode.h +++ b/src/dmidecode.h @@ -19,7 +19,6 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include <Python.h> #include <libxml/tree.h> struct dmi_header { @@ -33,9 +32,9 @@ void dmi_dump(xmlNode *node, struct dmi_header * h); void dmi_decode(xmlNode *handle_n, struct dmi_header * h, u16 ver); int address_from_efi(size_t * address); void to_dmi_header(struct dmi_header *h, u8 * data); -int smbios_decode_set_version(u8 * buf, const char *devmem, PyObject ** pydata); +int smbios_decode_set_version(u8 * buf, const char *devmem, xmlNode *node); int smbios_decode(u8 * buf, const char *devmem, xmlNode *xmlnode); -int legacy_decode_set_version(u8 * buf, const char *devmem, PyObject ** pydata); +int legacy_decode_set_version(u8 * buf, const char *devmem, xmlNode *node); int legacy_decode(u8 * buf, const char *devmem, xmlNode *xmlnode); const char *dmi_string(const struct dmi_header *dm, u8 s); diff --git a/src/dmidecodemodule.c b/src/dmidecodemodule.c index 9528647..e9e688c 100644 --- a/src/dmidecodemodule.c +++ b/src/dmidecodemodule.c @@ -1,3 +1,4 @@ +#include <Python.h> #include "dmidecodemodule.h" #include <mcheck.h> diff --git a/src/dmidecodemodule.h b/src/dmidecodemodule.h index 11a7f15..4de9a2d 100644 --- a/src/dmidecodemodule.h +++ b/src/dmidecodemodule.h @@ -29,8 +29,8 @@ extern void to_dmi_header(struct dmi_header *h, u8 * data); extern void dmi_table(u32 base, u16 len, u16 num, u16 ver, const char *devmem); extern int smbios_decode(u8 * buf, const char *devmem, xmlNode *node); extern int legacy_decode(u8 * buf, const char *devmem, xmlNode *node); -extern int smbios_decode_set_version(u8 * buf, const char *devmem, PyObject ** pydata); -extern int legacy_decode_set_version(u8 * buf, const char *devmem, PyObject ** pydata); +extern int smbios_decode_set_version(u8 * buf, const char *devmem, xmlNode *node); +extern int legacy_decode_set_version(u8 * buf, const char *devmem, xmlNode *node); extern void *mem_chunk(size_t base, size_t len, const char *devmem); extern u8 *parse_opt_type(u8 * p, const char *arg); |