Chameleon

Chameleon Commit Details

Date:2011-02-06 09:15:05 (13 years 2 months ago)
Author:Kabyl
Commit:733
Parents: 732
Message:Workaround a bug in AppleSMBIOS by removing spaces at the end of each string. Do check for fields being set before using them
Changes:
M/branches/Kabyl/i386/libsaio/smbios.c

File differences

branches/Kabyl/i386/libsaio/smbios.c
406406
407407
408408
409
410
409411
410412
411413
......
414416
415417
416418
417
419
420
421
422
423
424
418425
419426
420427
421428
422
429
423430
424431
425432
......
437444
438445
439446
440
441
442
447
448
449
450
443451
444452
445453
......
456464
457465
458466
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
467479
468480
469481
void setSMBStringForField(SMBStructHeader *structHeader, const char *string, uint8_t *field)
{
int strSize;
if (!field)
return;
if (!string)
return;
}
int strSize = strlen(string) + 1;
strSize = strlen(string);
// remove any spaces found at the end
while (string[strSize - 1] == ' ')
strSize--;
memcpy((uint8_t *)structHeader + structHeader->length + stringsSize, string, strSize);
*field = stringIndex;
stringIndex++;
stringsSize += strSize;
stringsSize += strSize + 1;
}
bool setSMBValue(SMBStructPtrs *structPtr, int idx, returnType *value)
{
if (getValueForKey(SMBSetters[idx].keyString, &string, &len, SMBPlist))
break;
if (structPtr->orig->type == kSMBTypeMemoryDevice)// MemoryDevice only
if (getSMBValueForKey(structPtr->orig, SMBSetters[idx].keyString, &string, NULL))
break;
else
if (structPtr->orig->type == kSMBTypeMemoryDevice)// MemoryDevice only
if (getSMBValueForKey(structPtr->orig, SMBSetters[idx].keyString, &string, NULL))
break;
}
if (SMBSetters[idx].getSMBValue)
if (SMBSetters[idx].getSMBValue((returnType *)&string))
case kSMBWord:
case kSMBDWord:
//case kSMBQWord:
if (getIntForKey(SMBSetters[idx].keyString, (int *)&(value->dword), SMBPlist))
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(value))
return true;
if (SMBSetters[idx].keyString)
{
if (getIntForKey(SMBSetters[idx].keyString, (int *)&(value->dword), SMBPlist))
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;
#if 0
if (*(SMBSetters[idx].defaultValue))
{

Archive Download the corresponding diff file

Revision: 733