#include "physicalmemory.h" static inline const char* getVendorString(unsigned vendorId) { switch (vendorId) { case 0x017A: return "Apacer"; case 0x0198: return "Kingston"; case 0x029E: return "Corsair"; case 0x04CB: return "A-DATA"; case 0x04CD: return "G-Skill"; case 0x059B: case 0x859B: return "Crucial"; case 0x00CE: case 0x80CE: case 0xCE00: return "Samsung"; case 0x014F: return "Transcend"; case 0x2C00: case 0x802C: return "Micron"; case 0xAD00: case 0x80AD: return "SK Hynix"; case 0x5105: case 0x8551: return "Qimonda"; case 0x02FE: return "Elpida"; case 0x0467: return "Ramaxel"; default: return NULL; } } void FFPhysicalMemoryUpdateVendorString(FFPhysicalMemoryResult* device) { if (device->vendor.length == 0) return; if (ffStrbufEqualS(&device->vendor, "Unknown")) { ffStrbufClear(&device->vendor); return; } char vendorIdStr[5]; if (ffStrbufStartsWithS(&device->vendor, "0x")) { if (device->vendor.length < 6) return; memcpy(vendorIdStr, device->vendor.chars + 2, 4); } else { if (device->vendor.length < 4) return; memcpy(vendorIdStr, device->vendor.chars, 4); } vendorIdStr[4] = '\0'; char* pEnd = NULL; uint32_t vendorId = (uint32_t) strtoul(vendorIdStr, &pEnd, 16); if (*pEnd != '\0') return; const char* vendorStr = getVendorString(vendorId); if (vendorStr) ffStrbufSetStatic(&device->vendor, vendorStr); }