Index: trunk/i386/libsaio/smbios.c =================================================================== --- trunk/i386/libsaio/smbios.c (revision 1003) +++ trunk/i386/libsaio/smbios.c (revision 1004) @@ -448,6 +448,8 @@ { const char *string = 0; int len; + bool parsed; + int val; if (numOfSetters <= idx) return false; @@ -481,13 +483,29 @@ //case kSMBQWord: if (SMBSetters[idx].keyString) { - if (getIntForKey(SMBSetters[idx].keyString, (int *)&(value->dword), SMBPlist)) + parsed = getIntForKey(SMBSetters[idx].keyString, &val, SMBPlist); + if (!parsed) + if (structPtr->orig->type == kSMBTypeMemoryDevice) // MemoryDevice only + parsed = getSMBValueForKey(structPtr->orig, SMBSetters[idx].keyString, NULL, (returnType *)&val); + if (parsed) + { + switch (SMBSetters[idx].valueType) + { + case kSMBByte: + value->byte = (uint8_t)val; + break; + case kSMBWord: + value->byte = (uint16_t)val; + break; + case kSMBDWord: + default: + value->byte = (uint32_t)val; + break; + } return true; - else - if (structPtr->orig->type == kSMBTypeMemoryDevice) // MemoryDevice only - if (getSMBValueForKey(structPtr->orig, SMBSetters[idx].keyString, NULL, value)) - return true; + } } + if (SMBSetters[idx].getSMBValue) if (SMBSetters[idx].getSMBValue(value)) return true;