diff options
author | nima <nima@abc39116-655e-4be6-ad55-d661dc543056> | 2008-07-03 15:59:08 +0000 |
---|---|---|
committer | nima <nima@abc39116-655e-4be6-ad55-d661dc543056> | 2008-07-03 15:59:08 +0000 |
commit | 60eb9d480daa352d7af19ad67e410f384f0e9f74 (patch) | |
tree | 7816a737b025fedbeb1866362d166d2fc16ebb84 /catsprintf.c | |
parent | 831e6bd3e28b85a87f68917bb928b1f3ce7601ce (diff) | |
download | python-dmidecode-60eb9d480daa352d7af19ad67e410f384f0e9f74.tar.gz python-dmidecode-60eb9d480daa352d7af19ad67e410f384f0e9f74.tar.xz python-dmidecode-60eb9d480daa352d7af19ad67e410f384f0e9f74.zip |
Major changes have been implemented, alas, untested, in hope to move towards
a new version of dmi decode where rather than having data just printed to
screen in functions, data is passed around, and some data structure is
constructed, which is then used to construct the Python list/dicitonary
objects.
git-svn-id: svn://svn.autonomy.net.au/python-dmidecode@10 abc39116-655e-4be6-ad55-d661dc543056
Diffstat (limited to 'catsprintf.c')
-rw-r--r-- | catsprintf.c | 91 |
1 files changed, 83 insertions, 8 deletions
diff --git a/catsprintf.c b/catsprintf.c index 7d000cd..3ca8afb 100644 --- a/catsprintf.c +++ b/catsprintf.c @@ -1,20 +1,95 @@ #include "catsprintf.h" -int catsprintf(char *buf, int major, const char *format, ...) { - static int i = 0; +static const int map_maj[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 126, 127 +}; - va_list arg; /*will point to each unnamed argument in turn*/ - va_start(arg, format); /* point to first element after fmt*/ +static const dmi_codes_major dmiCodesMajor[] = { + { 0, "3.3.1", "BIOS Information" }, + { 1, "3.3.2", "System Information" }, + { 2, "3.3.3", "Base Board Information" }, + { 3, "3.3.4", "Chassis Information" }, + { 4, "3.3.5", "Processor Information" }, + { 5, "3.3.6", "Memory Controller Information" }, + { 6, "3.3.7", "Memory Module Information" }, + { 7, "3.3.8", "Cache Information" }, + { 8, "3.3.9", "Port Connector Information" }, + { 9, "3.3.10", "System Slots" }, + { 10, "3.3.11", "On Board Devices Information" }, + { 11, "3.3.12", "OEM Strings" }, + { 12, "3.3.13", "System Configuration Options" }, + { 13, "3.3.14", "BIOS Language Information" }, + { 14, "3.3.15", "Group Associations" }, + { 15, "3.3.16", "System Event Log" }, + { 16, "3.3.17", "Physical Memory Array" }, + { 17, "3.3.18", "Memory Device" }, + { 18, "3.3.19", "32-bit Memory Error Information" }, + { 19, "3.3.20", "Memory Array Mapped Address" }, + { 20, "3.3.21", "Memory Device Mapped Address" }, + { 21, "3.3.22", "Built-in Pointing Device" }, + { 22, "3.3.23", "Portable Battery" }, + { 23, "3.3.24", "System Reset" }, + { 24, "3.3.25", "Hardware Security" }, + { 25, "3.3.26", "System Power Controls" }, + { 26, "3.3.27", "Voltage Probe" }, + { 27, "3.3.28", "Cooling Device" }, + { 28, "3.3.29", "Temperature Probe" }, + { 29, "3.3.30", "Electrical Current Probe" }, + { 30, "3.3.31", "Out-of-band Remote Access" }, + { 31, "3.3.32", "Boot Integrity Services Entry Point" }, + { 32, "3.3.33", "System Boot Information" }, + { 33, "3.3.34", "64-bit Memory Error Information" }, + { 34, "3.3.35", "Management Device" }, + { 35, "3.3.36", "Management Device Component" }, + { 36, "3.3.37", "Management Device Threshold Data" }, + { 37, "3.3.38", "Memory Channel" }, + { 38, "3.3.39", "IPMI Device Information" }, + { 39, "3.3.40", "System Power Supply" }, + { 126, "3.3.41", "Inactive" }, + { 127, "3.3.42", "End Of Table" }, +}; +dmi_minor* dmiAppendObject(long code, char const *key, const char *format, ...) { + static dmi_minor* next = NULL; + + //. int minor = code&0x00FF; + //. int major = code>>8; + va_list arg; + va_start(arg, format); + + printf("\nstart: %d\n", sizeof(dmi_minor)); + dmi_minor *o = (dmi_minor *)malloc(sizeof(dmi_minor)); + printf("stop\n"); + o->id = code; + o->major = &(dmiCodesMajor[map_maj[code>>8]]); + o->key = key; + vsprintf(o->value, format, arg); + o->last = next; + + va_end(arg); /* cleanup */ + next = o; + + return o; +} + +int catsprintf(char *buf, const char *format, ...) { + if(format == NULL) { + bzero(buf, strlen(buf)); + return 0; + } + + va_list arg; /* will point to each unnamed argument in turn */ + va_start(arg, format); /* point to first element after fmt */ char b[8192]; int c = vsprintf (b, format, arg); - i += strlen(b); - //printf("%d %s (%d)\n", i, b, strlen(b)); strcat(buf, b); - - va_end(arg); /*cleanup*/ + va_end(arg); /* cleanup */ return c; } |