summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornima <nima@abc39116-655e-4be6-ad55-d661dc543056>2008-10-31 14:07:22 +0000
committernima <nima@abc39116-655e-4be6-ad55-d661dc543056>2008-10-31 14:07:22 +0000
commitf120b5fa5933fef104c1f5e711581455e3980e2e (patch)
tree10408ce250b47910b385815e3bec96fe1207207c
parente703746faad221f6c367e4fe5fd27ebd6b4aae54 (diff)
downloadpython-dmidecode-f120b5fa5933fef104c1f5e711581455e3980e2e.tar.gz
python-dmidecode-f120b5fa5933fef104c1f5e711581455e3980e2e.tar.xz
python-dmidecode-f120b5fa5933fef104c1f5e711581455e3980e2e.zip
Implemented reading a dump to - this concludes syncing to the upstream release.
Next, exceptions should be thrown in certain places, more error checking in the python side of things, and also in relation to setting and unsetting of the alternate memory file. git-svn-id: svn://svn.autonomy.net.au/python-dmidecode@104 abc39116-655e-4be6-ad55-d661dc543056
-rw-r--r--dmidecodemodule.c59
-rwxr-xr-xexample.py31
2 files changed, 58 insertions, 32 deletions
diff --git a/dmidecodemodule.c b/dmidecodemodule.c
index fc140eb..5ede36e 100644
--- a/dmidecodemodule.c
+++ b/dmidecodemodule.c
@@ -62,8 +62,6 @@ u8 *parse_opt_type(u8 *p, const char *arg) {
}
-
-
static PyObject* dmidecode_get(PyObject *self, const char* section) {
//mtrace();
@@ -92,26 +90,40 @@ static PyObject* dmidecode_get(PyObject *self, const char* section) {
PyObject* pydata = PyDict_New();
- /* First try EFI (ia64, Intel-based Mac) */
- efi = address_from_efi(&fp);
- if(efi == EFI_NOT_FOUND) {
- /* Fallback to memory scan (x86, x86_64) */
- if((buf=mem_chunk(0xF0000, 0x10000, opt.devmem))!=NULL) {
- for(fp=0; fp<=0xFFF0; fp+=16) {
- if(memcmp(buf+fp, "_SM_", 4)==0 && fp<=0xFFE0) {
- if(smbios_decode(buf+fp, opt.devmem, pydata)) found++;
- fp+=16;
- } else if(memcmp(buf+fp, "_DMI_", 5)==0) {
- if(legacy_decode(buf+fp, opt.devmem, pydata)) found++;
- }
+ /***********************************/
+ /* Read from dump if so instructed */
+ if(opt.dumpfile != NULL) {
+ const char *dumpfile = PyString_AS_STRING(opt.dumpfile);
+ printf("Reading SMBIOS/DMI data from file %s.\n", dumpfile);
+ if((buf = mem_chunk(0, 0x20, dumpfile))!=NULL) {
+ if(memcmp(buf, "_SM_", 4)==0) {
+ if(smbios_decode(buf, dumpfile, pydata)) found++;
+ } else if (memcmp(buf, "_DMI_", 5)==0) {
+ if(legacy_decode(buf, dumpfile, pydata)) found++;
}
} else ret = 1;
- } else if(efi == EFI_NO_SMBIOS) {
- ret = 1;
- } else {
- if((buf=mem_chunk(fp, 0x20, opt.devmem))==NULL) ret = 1;
- else if(smbios_decode(buf, opt.devmem, pydata)) found++;
- //. TODO: dmiSetItem(pydata, "efi_address", efiAddress);
+ } else { /* Read from /dev/mem */
+ /* First try EFI (ia64, Intel-based Mac) */
+ efi = address_from_efi(&fp);
+ if(efi == EFI_NOT_FOUND) {
+ /* Fallback to memory scan (x86, x86_64) */
+ if((buf=mem_chunk(0xF0000, 0x10000, opt.devmem))!=NULL) {
+ for(fp=0; fp<=0xFFF0; fp+=16) {
+ if(memcmp(buf+fp, "_SM_", 4)==0 && fp<=0xFFE0) {
+ if(smbios_decode(buf+fp, opt.devmem, pydata)) found++;
+ fp+=16;
+ } else if(memcmp(buf+fp, "_DMI_", 5)==0) {
+ if(legacy_decode(buf+fp, opt.devmem, pydata)) found++;
+ }
+ }
+ } else ret = 1;
+ } else if(efi == EFI_NO_SMBIOS) {
+ ret = 1;
+ } else {
+ if((buf=mem_chunk(fp, 0x20, opt.devmem))==NULL) ret = 1;
+ else if(smbios_decode(buf, opt.devmem, pydata)) found++;
+ //. TODO: dmiSetItem(pydata, "efi_address", efiAddress);
+ }
}
if(ret==0) {
@@ -143,9 +155,11 @@ static PyObject* dmidecode_get_type(PyObject *self, PyObject *args) {
}
static PyObject* dmidecode_dump(PyObject *self, PyObject *args) {
- fprintf(stderr, ">>> %d <<<\n", dump(PyString_AS_STRING(opt.dumpfile)));
+ if(dump(PyString_AS_STRING(opt.dumpfile)))
+ Py_RETURN_TRUE;
+ else
+ Py_RETURN_FALSE;
}
-static PyObject* dmidecode_load(PyObject *self, PyObject *args) { return Py_False; }
static PyObject* dmidecode_get_dev(PyObject *self, PyObject *null) {
if(opt.dumpfile != NULL) return opt.dumpfile;
@@ -168,7 +182,6 @@ static PyObject* dmidecode_set_dev(PyObject *self, PyObject *arg) {
PyMethodDef DMIDataMethods[] = {
{ (char *)"dump", dmidecode_dump, METH_NOARGS, (char *)"Dump dmidata to set file" },
- { (char *)"load", dmidecode_load, METH_NOARGS, (char *)"Load dmidata from set file" },
{ (char *)"get_dev", dmidecode_get_dev, METH_NOARGS, (char *)"Set an alternative memory device file" },
{ (char *)"set_dev", dmidecode_set_dev, METH_O, (char *)"Set an alternative memory device file" },
diff --git a/example.py b/example.py
index bccf31f..a6c7bf7 100755
--- a/example.py
+++ b/example.py
@@ -1,14 +1,9 @@
#!/usr/bin/env python2.4
import dmidecode
import sys
+from pprint import pprint
-print dmidecode.get_dev()
-print dmidecode.set_dev("private/mem-XXX")
-print dmidecode.dump()
-
-print dmidecode.set_dev("private/mem-001")
-print dmidecode.get_dev()
-
+#. Test all functions using /dev/mem...
print "*** bios ***\n"; dmidecode.bios()
print "*** system ***\n"; dmidecode.system()
print "*** system ***\n"; dmidecode.system()
@@ -20,9 +15,27 @@ print "*** cache ***\n"; dmidecode.cache()
print "*** connector ***\n"; dmidecode.connector()
print "*** slot ***\n"; dmidecode.slot()
-sys.exit(0)
+#. Now test get/set of memory device file...
+print dmidecode.get_dev()
+print dmidecode.set_dev("private/mem-XXX");
+print dmidecode.get_dev()
-from pprint import pprint
+#. Test taking a dump...
+print dmidecode.dump()
+
+#. Test reading the dump...
+print "*** bios ***\n"; pprint(dmidecode.bios())
+print "*** system ***\n"; pprint(dmidecode.system())
+print "*** system ***\n"; pprint(dmidecode.system())
+print "*** baseboard ***\n"; pprint(dmidecode.baseboard())
+print "*** chassis ***\n"; pprint(dmidecode.chassis())
+print "*** processor ***\n"; pprint(dmidecode.processor())
+print "*** memory ***\n"; pprint(dmidecode.memory())
+print "*** cache ***\n"; pprint(dmidecode.cache())
+print "*** connector ***\n"; pprint(dmidecode.connector())
+print "*** slot ***\n"; pprint(dmidecode.slot())
+
+sys.exit(0)
print "*** bios ***\n"; pprint(dmidecode.bios())
print "*** system ***\n"; pprint(dmidecode.system())
print "*** baseboard ***\n"; pprint(dmidecode.baseboard())