diff options
author | bigbear <ns@bigbear.dk> | 2024-02-08 19:52:52 +0100 |
---|---|---|
committer | bigbear <ns@bigbear.dk> | 2024-02-08 19:52:52 +0100 |
commit | 9a05f56e1bf36abab41d12f92f2c75266c44bd4a (patch) | |
tree | f9ac600d137939dd484732515363a2337bdc6535 /hardinfo/storage_util.c | |
parent | 0f5dea06fa62062c7e98b36945a63aae7835a80a (diff) |
Clean - HARDINFO2 BASE
Diffstat (limited to 'hardinfo/storage_util.c')
-rw-r--r-- | hardinfo/storage_util.c | 250 |
1 files changed, 0 insertions, 250 deletions
diff --git a/hardinfo/storage_util.c b/hardinfo/storage_util.c deleted file mode 100644 index 7e61d336..00000000 --- a/hardinfo/storage_util.c +++ /dev/null @@ -1,250 +0,0 @@ -#include "udisks2_util.h" -#include "storage_util.h" -#include "util_ids.h" -#include "hardinfo.h" - -gchar *sdcard_ids_file = NULL; -gchar *oui_ids_file = NULL; - -// moved from udisks2_util.h -void find_sdcard_ids_file() { - if (sdcard_ids_file) return; - char *file_search_order[] = { - g_build_filename(g_get_user_config_dir(), "hardinfo", "sdcard.ids", NULL), - g_build_filename(params.path_data, "sdcard.ids", NULL), - NULL - }; - int n; - for(n = 0; file_search_order[n]; n++) { - if (!sdcard_ids_file && !access(file_search_order[n], R_OK)) - sdcard_ids_file = file_search_order[n]; - else - g_free(file_search_order[n]); - } -} - -void find_oui_ids_file() { - if (oui_ids_file) return; - char *file_search_order[] = { - g_build_filename(g_get_user_config_dir(), "hardinfo", "ieee_oui.ids", NULL), - g_build_filename(params.path_data, "ieee_oui.ids", NULL), - NULL - }; - int n; - for(n = 0; file_search_order[n]; n++) { - if (!oui_ids_file && !access(file_search_order[n], R_OK)) - oui_ids_file = file_search_order[n]; - else - g_free(file_search_order[n]); - } -} - -gchar* get_oui_from_wwid(gchar* wwid){ - gchar* ret = NULL; - - if (g_str_has_prefix(wwid, "nna.")) { - if (strlen(wwid)*4 < 48) - return NULL; - - switch (wwid[4]){ - case '1': - case '2': - ret = g_strndup(wwid + 8, 6); - break; - case '5': - case '6': - ret = g_strndup(wwid + 5, 6); - break; - } - } - else if(g_str_has_prefix(wwid, "eui.")) { - if (strlen(wwid)*4 < 48) - return NULL; - ret = g_strndup(wwid+4, 6); - } - - return ret; -} - -gchar* get_oui_company(gchar* oui){ - ids_query_result result = {}; - - if (!oui_ids_file) - find_oui_ids_file(); - - scan_ids_file(oui_ids_file, oui, &result, -1); - if (result.results[0]) - return g_strdup(result.results[0]); - - return NULL; -} - -// moved from udisks2_util.h -void check_sdcard_vendor(u2driveext *e) { - if (!e || !e->d) return; - if (!e->d->media) return; - if (! (g_str_has_prefix(e->d->media, "flash_sd") - || g_str_has_prefix(e->d->media, "flash_mmc") )) return; - if (e->d->vendor && e->d->vendor[0]) return; - if (!e->d->block_dev) return; - - if (!sdcard_ids_file) - find_sdcard_ids_file(); - - gchar *qpath = NULL; - ids_query_result result = {}; - - gchar *oemid_path = g_strdup_printf("/sys/block/%s/device/oemid", e->d->block_dev); - gchar *manfid_path = g_strdup_printf("/sys/block/%s/device/manfid", e->d->block_dev); - gchar *oemid = NULL, *manfid = NULL; - g_file_get_contents(oemid_path, &oemid, NULL, NULL); - g_file_get_contents(manfid_path, &manfid, NULL, NULL); - - unsigned int id = oemid?strtol(oemid, NULL, 16):0; - char c2 = id & 0xff, c1 = (id >> 8) & 0xff; - - qpath = g_strdup_printf("OEMID %02x%02x", (unsigned int)c1, (unsigned int)c2); - scan_ids_file(sdcard_ids_file, qpath, &result, -1); - g_free(oemid); - if (result.results[0]) - oemid = g_strdup(result.results[0]); - else - oemid = g_strdup_printf("OEM %02x%02x \"%c%c\"", - (unsigned int)c1, (unsigned int)c2, - isprint(c1) ? c1 : '.', isprint(c2) ? c2 : '.'); - g_free(qpath); - - id = manfid?strtol(manfid, NULL, 16):0; - qpath = g_strdup_printf("MANFID %06x", id); - scan_ids_file(sdcard_ids_file, qpath, &result, -1); - g_free(manfid); - if (result.results[0]) - manfid = g_strdup(result.results[0]); - else - manfid = g_strdup_printf("MANF %06x", id); - g_free(qpath); - - vendor_list vl = NULL; - const Vendor *v = NULL; - v = vendor_match(oemid, NULL); - if (v) vl = vendor_list_append(vl, v); - v = vendor_match(manfid, NULL); - if (v) vl = vendor_list_append(vl, v); - vl = vendor_list_remove_duplicates_deep(vl); - e->vendors = vendor_list_concat(e->vendors, vl); - - g_free(e->d->vendor); - if (g_strcmp0(oemid, manfid) == 0) - e->d->vendor = g_strdup(oemid); - else - e->d->vendor = g_strdup_printf("%s / %s", oemid, manfid); - - g_free(oemid); - g_free(manfid); - g_free(oemid_path); - g_free(manfid_path); - - if (e->d->revision && e->d->revision[0]) return; - - /* bonus: revision */ - gchar *fwrev_path = g_strdup_printf("/sys/block/%s/device/fwrev", e->d->block_dev); - gchar *hwrev_path = g_strdup_printf("/sys/block/%s/device/hwrev", e->d->block_dev); - gchar *fwrev = NULL, *hwrev = NULL; - g_file_get_contents(fwrev_path, &fwrev, NULL, NULL); - g_file_get_contents(hwrev_path, &hwrev, NULL, NULL); - - unsigned int fw = fwrev ? strtol(fwrev, NULL, 16) : 0; - unsigned int hw = hwrev ? strtol(hwrev, NULL, 16) : 0; - g_free(e->d->revision); - e->d->revision = g_strdup_printf("%02x.%02x", hw, fw); - - g_free(fwrev); - g_free(hwrev); - g_free(fwrev_path); - g_free(hwrev_path); - -} - -void set_nvme_controller_info(u2driveext *e){ - gchar *path = g_strdup_printf("/sys/block/%s/device/device", e->d->block_dev); - gchar *systarget = g_file_read_link(path, NULL); - gchar *target = systarget ? g_filename_to_utf8(systarget, -1, NULL, NULL, NULL) : NULL; - gchar *pci_addy = target ? g_path_get_basename(target) : NULL; - e->nvme_controller = pci_addy ? pci_get_device_str(pci_addy) : NULL; - g_free(path); - g_free(systarget); - g_free(target); - g_free(pci_addy); - if (e->nvme_controller) { - e->vendors = vendor_list_append(e->vendors, - vendor_match(e->nvme_controller->vendor_id_str, NULL)); - e->vendors = vendor_list_append(e->vendors, - vendor_match(e->nvme_controller->sub_vendor_id_str, NULL)); - } -} - -GSList* get_udisks2_drives_ext(void){ - GSList *node, *list; - u2driveext* extdrive; - - list = get_udisks2_all_drives_info(); - - for (node = list; node != NULL; node = node->next) { - extdrive = u2drive_ext((udiskd *)node->data); - node->data = extdrive; - - if (!extdrive->d->vendor || !extdrive->d->vendor[0]) { - // sometimes vendors adds their name to the model field - const Vendor *v = vendor_match(extdrive->d->model, NULL); - if (v) - extdrive->d->vendor = g_strdup(v->name); - } - - check_sdcard_vendor(extdrive); - - extdrive->vendors = vendor_list_append(extdrive->vendors, vendor_match(extdrive->d->vendor, NULL)); - - // get OUI from WWID - if (extdrive->d->wwid) { - extdrive->wwid_oui.oui = get_oui_from_wwid(extdrive->d->wwid); - if (extdrive->wwid_oui.oui) { - extdrive->wwid_oui.vendor = get_oui_company(extdrive->wwid_oui.oui); - } - if (extdrive->wwid_oui.vendor){ - extdrive->vendors = vendor_list_append(extdrive->vendors, vendor_match(extdrive->wwid_oui.vendor, NULL)); - } - } - - // NVMe PCI device - if (strstr(extdrive->d->block_dev, "nvme")) { - set_nvme_controller_info(extdrive); - } - - extdrive->vendors = gg_slist_remove_null(extdrive->vendors); - extdrive->vendors = vendor_list_remove_duplicates_deep(extdrive->vendors); - - } - return list; -} - - -u2driveext* u2drive_ext(udiskd * udisks_drive_data) { - u2driveext* data = g_new0(u2driveext, 1); - data->d = udisks_drive_data; - return data; -} - -void u2driveext_free(u2driveext *u) { - if (u) { - udiskd_free(u->d); - g_free(u->wwid_oui.oui); - g_free(u->wwid_oui.vendor); - pcid_free(u->nvme_controller); - g_free(u); - } -} - -void storage_shutdown(){ - g_free(sdcard_ids_file); - g_free(oui_ids_file); -} |