summaryrefslogtreecommitdiffstats
path: root/catsprintf.c
diff options
context:
space:
mode:
authornima <nima@abc39116-655e-4be6-ad55-d661dc543056>2008-07-03 15:59:08 +0000
committernima <nima@abc39116-655e-4be6-ad55-d661dc543056>2008-07-03 15:59:08 +0000
commit60eb9d480daa352d7af19ad67e410f384f0e9f74 (patch)
tree7816a737b025fedbeb1866362d166d2fc16ebb84 /catsprintf.c
parent831e6bd3e28b85a87f68917bb928b1f3ce7601ce (diff)
downloadpython-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.c91
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;
}