summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@abc39116-655e-4be6-ad55-d661dc543056>2008-07-25 13:17:24 +0000
committerroot <root@abc39116-655e-4be6-ad55-d661dc543056>2008-07-25 13:17:24 +0000
commit3ca138e7776d5356fa6ac1b58101d64b6f3c3fa0 (patch)
treeef0782ac1fb3821919a2279a3f1885730fa09d58
parentd64493ba04c17b83b30aaae1e27850ade958252d (diff)
downloadpython-dmidecode-3ca138e7776d5356fa6ac1b58101d64b6f3c3fa0.tar.gz
python-dmidecode-3ca138e7776d5356fa6ac1b58101d64b6f3c3fa0.tar.xz
python-dmidecode-3ca138e7776d5356fa6ac1b58101d64b6f3c3fa0.zip
Added `case 3'.
git-svn-id: svn://svn.autonomy.net.au/python-dmidecode@23 abc39116-655e-4be6-ad55-d661dc543056
-rw-r--r--dmidecode.c99
-rwxr-xr-xexample.py4
2 files changed, 69 insertions, 34 deletions
diff --git a/dmidecode.c b/dmidecode.c
index 1bec265..ccfae01 100644
--- a/dmidecode.c
+++ b/dmidecode.c
@@ -360,7 +360,7 @@ static const char *dmi_system_wake_up_type(u8 code) {
*/
/* 3.3.3.1 */
-static const char *dmi_base_board_features(u8 code, char *_) {
+static PyObject *dmi_base_board_features(u8 code) {
static const char *features[] = {
"Board is a hosting board", /* 0 */
"Board requires at least one daughter board",
@@ -369,18 +369,19 @@ static const char *dmi_base_board_features(u8 code, char *_) {
"Board is hot swappable" /* 4 */
};
- if((code&0x1F)==0) sprintf(_, "None");
+ PyObject *data;
+ if((code&0x1F)==0) data = PyString_FromString("None");
else {
- catsprintf(_, NULL);
int i;
+ data = PyList_New(4);
for(i=0; i<=4; i++)
if(code&(1<<i))
- catsprintf(_, "%s|", features[i]);
+ PyList_SET_ITEM(data, i, PyString_FromString(features[i]));
}
- return _;
+ return data;
}
-static const char *dmi_base_board_type(u8 code) {
+static PyObject *dmi_base_board_type(u8 code) {
/* 3.3.3.2 */
static const char *type[] = {
"Unknown", /* 0x01 */
@@ -399,17 +400,23 @@ static const char *dmi_base_board_type(u8 code) {
};
if(code>=0x01 && code<=0x0D)
- return type[code-0x01];
- return out_of_spec;
+ return PyString_FromString(type[code-0x01]);
+ return PyString_FromString(out_of_spec);
}
-static const char *dmi_base_board_handles(u8 count, u8 *p, char *_) {
+static PyObject *dmi_base_board_handles(u8 count, u8 *p) {
int i;
- sprintf(_, "Contained Object Handles:%u", count);
+ PyObject *dict = PyDict_New();
+ PyObject *list = PyList_New(count);
+
for(i=0; i<count; i++)
- catsprintf(_, ":0x%04X:", WORD(p+sizeof(u16)*i));
- return _;
+ PyList_SET_ITEM(list, i, PyString_FromFormat("0x%04X", WORD(p+sizeof(u16)*i)));
+
+ PyDict_SetItemString(dict, "Contained Object Handles", list);
+ Py_DECREF(list);
+
+ return dict;
}
/*******************************************************************************
@@ -516,7 +523,7 @@ static const char *dmi_chassis_elements(u8 count, u8 len, u8 *p, char *_) {
catsprintf(_, "%s (",
p[i*len]&0x80?
dmi_smbios_structure_type(p[i*len]&0x7F):
- dmi_base_board_type(p[i*len]&0x7F));
+ PyString_AS_STRING(dmi_base_board_type(p[i*len]&0x7F)));
if(p[1+i*len]==p[2+i*len])
catsprintf(_, "%u", p[1+i*len]);
else
@@ -2650,6 +2657,7 @@ void dmi_decode(struct dmi_header *h, u16 ver, PyObject* pydata) {
PyDict_SetItemString(pylist, "id", PyString_FromString(dmiMajor->id));
PyDict_SetItemString(pylist, "desc", PyString_FromString(dmiMajor->desc));
PyObject *caseData;
+ PyObject *_val; //. A Temporary pointer
/* TODO: DMI types 37 and 39 are untested */
@@ -2708,30 +2716,61 @@ void dmi_decode(struct dmi_header *h, u16 ver, PyObject* pydata) {
break;
case 2: /* 3.3.3 Base Board Information */
- dmiAppendObject(++minor, "Base Board Information", NULL);
+ NEW_METHOD = 1;
+ caseData = PyDict_New();
+
if(h->length<0x08) break;
- dmiAppendObject(++minor, "Manufacturer", dmi_string(h, data[0x04]));
- dmiAppendObject(++minor, "Product Name", dmi_string(h, data[0x05]));
- dmiAppendObject(++minor, "Version", dmi_string(h, data[0x06]));
- dmiAppendObject(++minor, "Serial Number", dmi_string(h, data[0x07]));
+ _val = dmi_string_py(h, data[0x04]);
+ PyDict_SetItemString(caseData, "Manufacturer", _val);
+ Py_DECREF(_val);
+
+ _val = dmi_string_py(h, data[0x05]);
+ PyDict_SetItemString(caseData, "Product Name", _val);
+ Py_DECREF(_val);
+
+ _val = dmi_string_py(h, data[0x06]);
+ PyDict_SetItemString(caseData, "Version", _val);
+ Py_DECREF(_val);
+
+ _val = dmi_string_py(h, data[0x07]);
+ PyDict_SetItemString(caseData, "Serial Number", _val);
+ Py_DECREF(_val);
+
if(h->length<0x0F) break;
- dmiAppendObject(++minor, "Asset Tag", dmi_string(h, data[0x08]));
- dmiAppendObject(++minor, "Features", dmi_base_board_features(data[0x09], _));
- dmiAppendObject(++minor, "Location In Chassis", dmi_string(h, data[0x0A]));
- if(!(opt.flags & FLAG_QUIET))
- dmiAppendObject(++minor, "Chassis Handle", "0x%04X", WORD(data+0x0B));
- dmiAppendObject(++minor, "Type", dmi_base_board_type(data[0x0D]));
+ _val = dmi_string_py(h, data[0x08]);
+ PyDict_SetItemString(caseData, "Asset Tag", _val);
+ Py_DECREF(_val);
+
+ _val = dmi_base_board_features(data[0x09]);
+ PyDict_SetItemString(caseData, "Features", _val);
+ Py_DECREF(_val);
+
+ _val = dmi_string_py(h, data[0x0A]);
+ PyDict_SetItemString(caseData, "Location In Chassis", _val);
+ Py_DECREF(_val);
+
+ if(!(opt.flags & FLAG_QUIET)) {
+ _val = PyString_FromFormat("0x%04X", WORD(data+0x0B));
+ PyDict_SetItemString(caseData, "Chassis Handle", _val);
+ Py_DECREF(_val);
+ }
+
+ _val = dmi_base_board_type(data[0x0D]);
+ PyDict_SetItemString(caseData, "Type", _val);
+ Py_DECREF(_val);
+
if(h->length<0x0F+data[0x0E]*sizeof(u16)) break;
- if(!(opt.flags & FLAG_QUIET))
- dmiAppendObject(++minor, ">>Type", dmi_base_board_handles(data[0x0E], data+0x0F, _));
+ if(!(opt.flags & FLAG_QUIET)) {
+ _val = dmi_base_board_handles(data[0x0E], data+0x0F);
+ PyDict_SetItemString(caseData, "Type ???", _val);
+ Py_DECREF(_val);
+ }
break;
case 3: /* 3.3.4 Chassis Information */
NEW_METHOD = 1;
caseData = PyDict_New();
- PyObject *_val;
-
if(h->length<0x09) break;
_val = dmi_string_py(h, data[0x04]);
PyDict_SetItemString(caseData, "Manufacturer", _val);
@@ -2762,10 +2801,6 @@ void dmi_decode(struct dmi_header *h, u16 ver, PyObject* pydata) {
PyDict_SetItemString(caseData, "Boot-Up State", _val);
Py_DECREF(_val);
- _val = dmi_string_py(h, data[0x09]);
- PyDict_SetItemString(caseData, "", _val);
- Py_DECREF(_val);
-
_val = dmi_chassis_state(data[0x0A]);
PyDict_SetItemString(caseData, "Power Supply State", _val);
Py_DECREF(_val);
diff --git a/example.py b/example.py
index 7cdda39..46eeda1 100755
--- a/example.py
+++ b/example.py
@@ -9,10 +9,10 @@ def l(x):
import dmidecode, time
-print "*** bios ***\n", l(dmidecode.bios())
+#print "*** bios ***\n", l(dmidecode.bios())
#print "*** system ***\n", l(dmidecode.system())
#print "*** baseboard ***\n", l(dmidecode.baseboard())
-#print "*** chassis ***\n", l(dmidecode.chassis())
+print "*** chassis ***\n", l(dmidecode.chassis())
#print "*** processor ***\n", l(dmidecode.processor())
#print "*** memory ***\n", l(dmidecode.memory())
#print "*** cache ***\n", l(dmidecode.cache())