From f285118e5d4d62a9918a563c9fb1e7aba0299c9e Mon Sep 17 00:00:00 2001 From: nima Date: Sun, 27 Jul 2008 12:15:51 +0000 Subject: Completed `case 4', which was thought to have been completed falsely before. git-svn-id: svn://svn.autonomy.net.au/python-dmidecode@26 abc39116-655e-4be6-ad55-d661dc543056 --- dmidecode.c | 81 +++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 57 insertions(+), 24 deletions(-) (limited to 'dmidecode.c') diff --git a/dmidecode.c b/dmidecode.c index f26f494..9646836 100644 --- a/dmidecode.c +++ b/dmidecode.c @@ -1037,7 +1037,7 @@ static const char *dmi_processor_status(u8 code) { return out_of_spec; } -static const char *dmi_processor_upgrade(u8 code) { +static PyObject *dmi_processor_upgrade(u8 code) { /* 3.3.5.5 */ static const char *upgrade[]={ "Other", /* 0x01 */ @@ -1063,8 +1063,8 @@ static const char *dmi_processor_upgrade(u8 code) { "Socket LGA775" /* 0x15 */ }; - if(code>=0x01 && code<=0x15) return upgrade[code-0x01]; - return out_of_spec; + if(code>=0x01 && code<=0x15) return PyString_FromString(upgrade[code-0x01]); + return PyString_FromString(out_of_spec); } static const char *dmi_processor_cache(u16 code, const char *level, u16 ver, char *_) { @@ -1076,20 +1076,22 @@ static const char *dmi_processor_cache(u16 code, const char *level, u16 ver, cha } /* 3.3.5.9 */ -static const char *dmi_processor_characteristics(u16 code, char *_) { +static PyObject *dmi_processor_characteristics(u16 code) { static const char *characteristics[]={ "64-bit capable" /* 2 */ }; - if((code&0x0004)==0) sprintf(_, "None"); - else { + PyObject *data; + if((code&0x0004)==0) { + data = Py_None; + } else { + data = PyList_New(1); int i; - catsprintf(_, NULL); for(i=2; i<=2; i++) if(code&(1<length<0x20) break; if(!(opt.flags & FLAG_QUIET)) { dmiAppendObject(++minor, "L1 Cache Handle", dmi_processor_cache(WORD(data+0x1A), "L1", ver, _)); @@ -3006,17 +3016,40 @@ void dmi_decode(struct dmi_header *h, u16 ver, PyObject* pydata) { dmiAppendObject(++minor, "L3 Cache Handle", dmi_processor_cache(WORD(data+0x1E), "L3", ver, _)); } if(h->length<0x23) break; - dmiAppendObject(++minor, "Serial Number", dmi_string(h, data[0x20])); - dmiAppendObject(++minor, "Asset Tag", dmi_string(h, data[0x21])); - dmiAppendObject(++minor, "Part Number", dmi_string(h, data[0x22])); + _val = dmi_string_py(h, data[0x20]); + PyDict_SetItemString(caseData, "Serial Number", _val); + Py_DECREF(_val); + + _val = dmi_string_py(h, data[0x21]); + PyDict_SetItemString(caseData, "Asset Tag", _val); + Py_DECREF(_val); + + _val = dmi_string_py(h, data[0x22]); + PyDict_SetItemString(caseData, "Part Number", _val); + Py_DECREF(_val); + if(h->length<0x28) break; - if(data[0x23]!=0) - dmiAppendObject(++minor, "Core Count", "%u", data[0x23]); - if(data[0x24]!=0) - dmiAppendObject(++minor, "Core Enabled", "%u", data[0x24]); - if(data[0x25]!=0) - dmiAppendObject(++minor, "Thread Count", "%u", data[0x25]); - dmiAppendObject(++minor, "Characteristics", dmi_processor_characteristics(WORD(data+0x26), _)); + if(data[0x23]!=0) { + _val = PyString_FromFormat("%u", data[0x23]); + PyDict_SetItemString(caseData, "Core Count", _val); + Py_DECREF(_val); + } + + if(data[0x24]!=0) { + _val = PyString_FromFormat("%u", data[0x24]); + PyDict_SetItemString(caseData, "Core Enabled", _val); + Py_DECREF(_val); + } + + if(data[0x25]!=0) { + _val = PyString_FromFormat("%u", data[0x25]); + PyDict_SetItemString(caseData, "Thread Count", _val); + Py_DECREF(_val); + } + + _val = dmi_processor_characteristics(WORD(data+0x26)); + PyDict_SetItemString(caseData, "Characteristics", _val); + Py_DECREF(_val); break; case 5: /* 3.3.6 Memory Controller Information */ -- cgit