Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package hwinfo for openSUSE:Factory checked in at 2026-09-30 16:21:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/hwinfo (Old) and /work/SRC/openSUSE:Factory/.hwinfo.new.1465845 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "hwinfo" Wed Sep 30 16:21:59 2026 rev:205 rq:1381232 version:26.0 Changes: -------- --- /work/SRC/openSUSE:Factory/hwinfo/hwinfo.changes 2026-08-02 23:14:10.415758543 +0200 +++ /work/SRC/openSUSE:Factory/.hwinfo.new.1465845/hwinfo.changes 2026-09-30 16:22:50.311814409 +0200 @@ -1,0 +2,32 @@ +Mon Sep 28 18:08:43 UTC 2026 - [email protected] + +- merge gh#openSUSE/hwinfo#191 +- code cleanup: remove some unused variables +- 26.0 + +-------------------------------------------------------------------- +Mon Sep 28 18:08:18 UTC 2026 - [email protected] + +- merge gh#openSUSE/hwinfo#193 +- add MMC/SD card block device support +- add some minor improvements + +-------------------------------------------------------------------- +Mon Sep 28 14:45:26 UTC 2026 - [email protected] + +- merge gh#openSUSE/hwinfo#188 +- Fix check_hd being built without LDFLAGS + +-------------------------------------------------------------------- +Mon Sep 28 14:40:38 UTC 2026 - [email protected] + +- merge gh#openSUSE/hwinfo#190 +- fix(s390): fix memory leaks on skip paths in ccw device scan + +-------------------------------------------------------------------- +Mon Sep 28 14:39:58 UTC 2026 - [email protected] + +- merge gh#openSUSE/hwinfo#189 +- fix(s390): fix out-of-bounds write in cutypes scan loop + +-------------------------------------------------------------------- Old: ---- hwinfo-25.5.tar.xz New: ---- hwinfo-26.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ hwinfo.spec ++++++ --- /var/tmp/diff_new_pack.be1gwS/_old 2026-09-30 16:22:51.783875967 +0200 +++ /var/tmp/diff_new_pack.be1gwS/_new 2026-09-30 16:22:51.788876176 +0200 @@ -17,7 +17,7 @@ Name: hwinfo -Version: 25.5 +Version: 26.0 %define lname libhd%(echo "%version" | perl -pe 's{\\D.*}{}') Release: 0 Summary: Hardware Library ++++++ hwinfo-25.5.tar.xz -> hwinfo-26.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/VERSION new/hwinfo-26.0/VERSION --- old/hwinfo-25.5/VERSION 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/VERSION 2026-09-28 20:08:43.000000000 +0200 @@ -1 +1 @@ -25.5 +26.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/changelog new/hwinfo-26.0/changelog --- old/hwinfo-25.5/changelog 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/changelog 2026-09-28 20:08:43.000000000 +0200 @@ -1,3 +1,16 @@ +2026-09-28: 26.0 + - merge gh#openSUSE/hwinfo#189 + - fix(s390): fix out-of-bounds write in cutypes scan loop + - merge gh#openSUSE/hwinfo#190 + - fix(s390): fix memory leaks on skip paths in ccw device scan + - merge gh#openSUSE/hwinfo#188 + - Fix check_hd being built without LDFLAGS + - merge gh#openSUSE/hwinfo#193 + - add MMC/SD card block device support + - add some minor improvements + - merge gh#openSUSE/hwinfo#191 + - code cleanup: remove some unused variables + 2026-07-31: 25.5 - merge gh#openSUSE/hwinfo#186 - serial driver file name changed in /proc in current kernel, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/hd/bios.c new/hwinfo-26.0/src/hd/bios.c --- old/hwinfo-25.5/src/hd/bios.c 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/hd/bios.c 2026-09-28 20:08:43.000000000 +0200 @@ -609,7 +609,7 @@ void smbios_get_info(hd_data_t *hd_data, memory_range_t *mem, bios_info_t *bt) { - unsigned u, u1, u2, ok, hlen = 0, ofs; + unsigned u, u1, ok, hlen = 0, ofs; uint64_t addr = 0; unsigned len = 0, scnt; unsigned structs = 0, type, slen; @@ -765,7 +765,6 @@ if(type == sm_end) break; ofs += slen; u1 = ofs; - u2 = 1; scnt = 0; while(ofs + 1 < len) { if(!memory.data[ofs]) { @@ -776,7 +775,6 @@ if(*s) ADD2LOG(" str%d: \"%s\"\n", scnt, s); free_mem(s); u1 = ofs + 1; - u2++; } if(!memory.data[ofs + 1]) { ofs += 2; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/hd/block.c new/hwinfo-26.0/src/hd/block.c --- old/hwinfo-25.5/src/hd/block.c 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/hd/block.c 2026-09-28 20:08:43.000000000 +0200 @@ -32,6 +32,7 @@ static void add_other_sysfs_info(hd_data_t *hd_data, hd_t *hd); static void add_ide_sysfs_info(hd_data_t *hd_data, hd_t *hd); static void add_scsi_sysfs_info(hd_data_t *hd_data, hd_t *hd, char *sf_dev); +static void add_mmc_sysfs_info(hd_data_t *hd_data, hd_t *hd, char *sf_dev); static void read_partitions(hd_data_t *hd_data); static void read_cdroms(hd_data_t *hd_data); static cdrom_info_t *new_cdrom_entry(cdrom_info_t **ci); @@ -288,6 +289,7 @@ else if(!strcmp(bus_name, "pci")) hd->bus.id = bus_pci; else if(!strcmp(bus_name, "nvme")) hd->bus.id = bus_nvme; else if(!strcmp(bus_name, "nvme-subsystem")) hd->bus.id = bus_nvme; + else if(!strcmp(bus_name, "mmc")) hd->bus.id = bus_mmc; } hd->sysfs_bus_id = new_str(bus_id); @@ -393,6 +395,9 @@ add_scsi_sysfs_info(hd_data, hd, sf_dev); } } + else if(hd->bus.id == bus_mmc) { + add_mmc_sysfs_info(hd_data, hd, sf_dev); + } else { add_other_sysfs_info(hd_data, hd); } @@ -558,6 +563,104 @@ } +void add_mmc_sysfs_info(hd_data_t *hd_data, hd_t *hd, char *sf_dev) +{ + char *s, *cs; + uint64_t ul0; + mmc_info_t *mmc; + + if(!hd_report_this(hd_data, hd)) return; + + hd->detail = new_mem(sizeof *hd->detail); + hd->detail->type = hd_detail_mmc; + hd->detail->mmc.data = mmc = new_mem(sizeof *mmc); + + /* hook into the generic "MMC/SD Storage Device" entry (special 0x6016) + * so an unrecognized manufacturer still resolves to a device name */ + hd->compat_vendor.id = MAKE_ID(TAG_SPECIAL, 0x6016); + hd->compat_device.id = MAKE_ID(TAG_SPECIAL, 0x0000); + + if((s = get_sysfs_attr_by_path(sf_dev, "manfid"))) { + if(hd_attr_uint(s, &ul0, 0)) { + ADD2LOG(" manfid = 0x%x\n", (unsigned) ul0); + mmc->manfid = ul0 & 0xffff; + hd->vendor.id = MAKE_ID(TAG_MMC, mmc->manfid); + } + } + + if((s = get_sysfs_attr_by_path(sf_dev, "oemid"))) { + if(hd_attr_uint(s, &ul0, 0)) { + ADD2LOG(" oemid = 0x%x\n", (unsigned) ul0); + mmc->oemid = ul0 & 0xffff; + } + } + + if((s = get_sysfs_attr_by_path(sf_dev, "name"))) { + cs = canon_str(s, strlen(s)); + ADD2LOG(" name = %s\n", cs); + if(*cs) { + free_mem(hd->device.name); + hd->device.name = cs; + } + else { + free_mem(cs); + } + } + + if((s = get_sysfs_attr_by_path(sf_dev, "serial"))) { + cs = canon_str(s, strlen(s)); + ADD2LOG(" serial = %s\n", cs); + if(*cs) { + free_mem(hd->serial); + hd->serial = cs; + } + else { + free_mem(cs); + } + } + + if((s = get_sysfs_attr_by_path(sf_dev, "type"))) { + cs = canon_str(s, strlen(s)); + ADD2LOG(" type = %s\n", cs); + if(*cs) { + mmc->type = cs; + } + else { + free_mem(cs); + } + } + + if((s = get_sysfs_attr_by_path(sf_dev, "hwrev"))) { + if(hd_attr_uint(s, &ul0, 0)) { + ADD2LOG(" hwrev = 0x%x\n", (unsigned) ul0); + mmc->hwrev = ul0; + } + } + + if((s = get_sysfs_attr_by_path(sf_dev, "fwrev"))) { + if(hd_attr_uint(s, &ul0, 0)) { + ADD2LOG(" fwrev = 0x%x\n", (unsigned) ul0); + mmc->fwrev = ul0; + } + } + + str_printf(&hd->revision.name, 0, "%u.%u", mmc->hwrev, mmc->fwrev); + + if((s = get_sysfs_attr_by_path(sf_dev, "date"))) { + cs = canon_str(s, strlen(s)); + ADD2LOG(" date = %s\n", cs); + if(*cs) { + mmc->date = cs; + } + else { + free_mem(cs); + } + } + + add_disk_size(hd_data, hd); +} + + void add_other_sysfs_info(hd_data_t *hd_data, hd_t *hd) { unsigned u0, u1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/hd/hd.c new/hwinfo-26.0/src/hd/hd.c --- old/hwinfo-25.5/src/hd/hd.c 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/hd/hd.c 2026-09-28 20:08:43.000000000 +0200 @@ -1393,6 +1393,17 @@ case hd_detail_joystick: free_mem(d->joystick.data); break; + + case hd_detail_mmc: + { + mmc_info_t *m = d->mmc.data; + if(m) { + free_mem(m->type); + free_mem(m->date); + free_mem(m); + } + } + break; } free_mem(d); @@ -4103,6 +4114,7 @@ case 'u': tag = TAG_USB; s++; break; case 'P': tag = TAG_PCMCIA; s++; break; case 'S': tag = TAG_SDIO; s++; break; + case 'm': tag = TAG_MMC; s++; break; } u1 = strtoul(s, &s, 16); if(*s) err |= 2; @@ -4164,6 +4176,9 @@ hd->bus.id = bus_pcmcia; hd->hotplug = hp_pcmcia; } + if(ID_TAG(hd->vendor.id) == TAG_MMC) { + hd->bus.id = bus_mmc; + } if(*buf3) hd->unix_dev_name = new_str(buf3); hd->status.available = status_yes; hd->status.configured = status_new; @@ -4513,6 +4528,7 @@ if(ID_TAG(vend) == TAG_USB) *s++ = 'u', *s = 0; if(ID_TAG(vend) == TAG_SPECIAL) *s++ = 's', *s = 0; if(ID_TAG(vend) == TAG_PCMCIA) *s++ = 'P', *s = 0; + if(ID_TAG(vend) == TAG_MMC) *s++ = 'm', *s = 0; sprintf(s, "%04x", ID_VALUE(vend)); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/hd/hd.h new/hwinfo-26.0/src/hd/hd.h --- old/hwinfo-25.5/src/hd/hd.h 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/hd/hd.h 2026-09-28 20:08:43.000000000 +0200 @@ -88,6 +88,7 @@ #define TAG_SPECIAL 4 /**< Internally used ids. */ #define TAG_PCMCIA 5 /**< PCMCIA ids. */ #define TAG_SDIO 6 /**< SDIO ids. */ +#define TAG_MMC 7 /**< MMC/SD card ids. */ /** * Get the real id value. @@ -2107,7 +2108,7 @@ hd_detail_pci, hd_detail_usb, hd_detail_isapnp, hd_detail_cdrom, hd_detail_floppy, hd_detail_bios, hd_detail_cpu, hd_detail_prom, hd_detail_monitor, hd_detail_sys, hd_detail_scsi, hd_detail_devtree, - hd_detail_ccw, hd_detail_joystick + hd_detail_ccw, hd_detail_joystick, hd_detail_mmc } hd_detail_type_t; typedef struct { @@ -2181,6 +2182,25 @@ joystick_t *data; } hd_detail_joystick_t; +/** + * MMC/SD card detail information. + * Captures MMC-specific sysfs attributes read from + * /sys/class/block/mmcblkX/device/. + */ +typedef struct { + unsigned manfid; /**< Manufacturer ID (from sysfs 'manfid'). */ + unsigned oemid; /**< OEM ID (from sysfs 'oemid'). */ + char *type; /**< Card type: "SD", "MMC", "SDIO" (from sysfs 'type'). */ + unsigned hwrev; /**< Hardware revision (from sysfs 'hwrev'). */ + unsigned fwrev; /**< Firmware revision (from sysfs 'fwrev'). */ + char *date; /**< Manufacturing date, e.g. "01/2021" (from sysfs 'date'). */ +} mmc_info_t; + +typedef struct { + enum hd_detail_type type; + mmc_info_t *data; +} hd_detail_mmc_t; + typedef union { enum hd_detail_type type; hd_detail_pci_t pci; @@ -2197,6 +2217,7 @@ hd_detail_devtree_t devtree; hd_detail_ccw_t ccw; hd_detail_joystick_t joystick; + hd_detail_mmc_t mmc; } hd_detail_t; /** @} */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/hd/hddb.c new/hwinfo-26.0/src/hd/hddb.c --- old/hwinfo-25.5/src/hd/hddb.c 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/hd/hddb.c 2026-09-28 20:08:43.000000000 +0200 @@ -28,9 +28,9 @@ // #define HDDB_TEST // #define HDDB_EXTERNAL_ONLY -static char *hid_tag_names[] = { "", "pci ", "eisa ", "usb ", "special ", "pcmcia ", "sdio " }; +static char *hid_tag_names[] = { "", "pci ", "eisa ", "usb ", "special ", "pcmcia ", "sdio ", "mmc " }; // just experimenting... -static char *hid_tag_names2[] = { "", "pci ", "eisa ", "usb ", "int ", "pcmcia ", "sdio " }; +static char *hid_tag_names2[] = { "", "pci ", "eisa ", "usb ", "int ", "pcmcia ", "sdio ", "mmc " }; typedef enum { pref_empty, pref_new, pref_and, pref_or, pref_add @@ -887,6 +887,7 @@ else if(!strcmp(s, "isapnp")) tag = TAG_EISA; else if(!strcmp(s, "pcmcia")) tag = TAG_PCMCIA; else if(!strcmp(s, "sdio")) tag = TAG_SDIO; + else if(!strcmp(s, "mmc")) tag = TAG_MMC; else { str = s; if(t) *t = c; /* restore */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/hd/hdp.c new/hwinfo-26.0/src/hd/hdp.c --- old/hwinfo-25.5/src/hd/hdp.c 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/hd/hdp.c 2026-09-28 20:08:43.000000000 +0200 @@ -839,6 +839,31 @@ dump_line("Axes: %hhd\n", jt->axes); } + // print mmc/sd card details + if( + h->detail && + h->detail->type == hd_detail_mmc && + h->detail->mmc.data + ) + { + mmc_info_t *mmc = h->detail->mmc.data; + + dump_line("Manufacturer ID: 0x%04x\n", mmc->manfid); + char oem_str[] = " \"XX\""; + if(isalpha(mmc->oemid & 0xff) && isalpha((mmc->oemid >> 8) & 0xff)) { + oem_str[2] = (mmc->oemid >> 8) & 0xff; + oem_str[3] = mmc->oemid & 0xff; + } + else { + oem_str[0] = 0; + } + dump_line("OEM ID: 0x%04x%s\n", mmc->oemid, oem_str); + if(mmc->type) dump_line("Card Type: \"%s\"\n", mmc->type); + dump_line("Hardware Revision: 0x%x\n", mmc->hwrev); + dump_line("Firmware Revision: 0x%x\n", mmc->fwrev); + if(mmc->date) dump_line("Manufacturing Date: \"%s\"\n", mmc->date); + } + if( h->detail && h->detail->type == hd_detail_monitor && diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/hd/manual.c new/hwinfo-26.0/src/hd/manual.c --- old/hwinfo-25.5/src/hd/manual.c 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/hd/manual.c 2026-09-28 20:08:43.000000000 +0200 @@ -212,7 +212,6 @@ hal_prop_t *hd_manual_read_entry_old(const char *id) { char path[PATH_MAX]; - int line; str_list_t *sl, *sl0; char *s, *s1, *s2; hal_prop_t *prop_list = NULL, *prop = NULL; @@ -223,7 +222,7 @@ if(!(sl0 = read_file(path, 0, 0))) return prop_list; - for(line = 1, sl = sl0; sl; sl = sl->next, line++) { + for(sl = sl0; sl; sl = sl->next) { s = sl->str; while(isspace(*s)) s++; if(!*s || *s == '#' || *s == ';') continue; /* empty lines & comments */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/hd/mdt.c new/hwinfo-26.0/src/hd/mdt.c --- old/hwinfo-25.5/src/hd/mdt.c 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/hd/mdt.c 2026-09-28 20:08:43.000000000 +0200 @@ -544,7 +544,7 @@ { x86emu_t *emu = NULL; int err = 0, i; - double d1, d2; + double d1; unsigned char buf2[0x100], tmp[0x100]; unsigned u, ml; unsigned modelist[0x100]; @@ -639,7 +639,6 @@ emu->x86.R_EDI = VBE_BUF; err = vm_run(emu, &d1); - d2 += d1; LPRINTF("=== vbe mode info [0x%04x]: %s (time %.3fs, eax 0x%x, err = 0x%x)\n", modelist[i], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/hd/s390.c new/hwinfo-26.0/src/hd/s390.c --- old/hwinfo-25.5/src/hd/s390.c 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/hd/s390.c 2026-09-28 20:08:43.000000000 +0200 @@ -75,8 +75,12 @@ /* check for each channel if it must be skipped and identify virtual reader/punch */ for(i=0;i<(1<<16);i++) { - if(cutypes[i]==0x3088) /* It seems that QDIO devices only appear once */ - cutypes[i+1]*=-1; /* negative cutype -> skip */ + if(cutypes[i]==0x3088) + { + /* It seems that QDIO devices only appear once */ + if(i < (1<<16)-1) + cutypes[i+1]*=-1; /* negative cutype -> skip */ + } if(cutypes[i]==0x2540) { @@ -137,6 +141,7 @@ att = get_sysfs_attr(BUSNAME, curdev->d_name, "cutype"); if(!att) { ADD2LOG("CCW device %s has no cutype attribute, skipping\n", curdev->d_name); + free_mem(res); continue; } cutype = strtol(att, NULL, 16); @@ -151,12 +156,16 @@ res->io.base=strtol(rindex(curdev->d_name,'.')+1,NULL,16); /* Skip additional channels for multi-channel devices */ - if(cutypes[res->io.base] < -3) + if(cutypes[res->io.base] < -3) { + free_mem(res); continue; + } if(disks_only && cutype!=0x3990 && cutype!=0x2105 && cutype!=0x3880 && cutype!=0x9343 && cutype!=0x6310 && - (cutype != 0x1731 || devtype != 0x1732 || cumod != 3)) + (cutype != 0x1731 || devtype != 0x1732 || cumod != 3)) { + free_mem(res); continue; + } res->io.range=1; switch (cutype) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/hd/smbios.c new/hwinfo-26.0/src/hd/smbios.c --- old/hwinfo-25.5/src/hd/smbios.c 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/hd/smbios.c 2026-09-28 20:08:43.000000000 +0200 @@ -662,13 +662,13 @@ { hd_smbios_t *sm; str_list_t *sl_any, *sl; - int cnt, data_len; + int data_len; unsigned char *sm_data; unsigned u, v; if(!hd_data->smbios) return; - for(cnt = 0, sm = hd_data->smbios; sm; sm = sm->next, cnt++) { + for(sm = hd_data->smbios; sm; sm = sm->next) { sm_data = sm->any.data; data_len = sm->any.data_len; sl_any = sm->any.strings; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/ids/Makefile new/hwinfo-26.0/src/ids/Makefile --- old/hwinfo-25.5/src/ids/Makefile 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/ids/Makefile 2026-09-28 20:08:43.000000000 +0200 @@ -15,7 +15,7 @@ IDFILES += src/bus src/class src/extra src/special src/scanner src/network \ src/usb src/usb2 src/isapnp src/monitor src/camera src/tv2 src/tv src/dvb2 src/dvb \ - src/chipcard src/modem src/pcmcia src/s390 src/sdio + src/chipcard src/modem src/pcmcia src/s390 src/sdio src/sdcard ifeq "$(ARCH)" "i386" IDFILES += src/x11.i386 src/modem.i386 @@ -51,7 +51,7 @@ ar r $(LIBHD) $? check_hd: check_hd.c - $(CC) $(CFLAGS) $< -o $@ + $(CC) $(CFLAGS) $(LDFLAGS) $< -o $@ hd_ids.c: hd_ids.h hd_ids_tiny.h diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/ids/check_hd.c new/hwinfo-26.0/src/ids/check_hd.c --- old/hwinfo-25.5/src/ids/check_hd.c 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/ids/check_hd.c 2026-09-28 20:08:43.000000000 +0200 @@ -32,6 +32,7 @@ #define TAG_SPECIAL 4 /* internally used ids */ #define TAG_PCMCIA 5 /* pcmcia ids */ #define TAG_SDIO 6 /* sdio ids */ +#define TAG_MMC 7 /* mmc/sd card ids */ #define ID_VALUE(id) ((id) & 0xffff) #define ID_TAG(id) (((id) >> 16) & 0xf) @@ -801,6 +802,7 @@ else if(!strcmp(s, "isapnp")) *tag = TAG_EISA; else if(!strcmp(s, "pcmcia")) *tag = TAG_PCMCIA; else if(!strcmp(s, "sdio")) *tag = TAG_SDIO; + else if(!strcmp(s, "mmc")) *tag = TAG_MMC; else { str = s; if(t) *t = c; /* restore */ @@ -1116,7 +1118,7 @@ void write_id(FILE *f, hddb_entry_t ent, hid_t *hid) { - static char *tag_name[7] = { "", "pci ", "eisa ", "usb ", "special ", "pcmcia ", "sdio " }; + static char *tag_name[8] = { "", "pci ", "eisa ", "usb ", "special ", "pcmcia ", "sdio ", "mmc " }; int tag; unsigned u; char c, *s; @@ -2789,9 +2791,8 @@ { item_t *item; hddb_list_t db_list = {}; - unsigned item_cnt; - for(item_cnt = 0, item = hd->first; item; item = item->next, item_cnt++) { + for(item = hd->first; item; item = item->next) { hddb_store_skey(hddb, item->key.first, &db_list.key_mask, &db_list.key); hddb_store_skey(hddb, item->value, &db_list.value_mask, &db_list.value); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/ids/convert_hd new/hwinfo-26.0/src/ids/convert_hd --- old/hwinfo-25.5/src/ids/convert_hd 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/ids/convert_hd 2026-09-28 20:08:43.000000000 +0200 @@ -95,10 +95,10 @@ ); @xml_values{@xml_names} = ( 0 .. 100 ); -( $tag_none, $tag_pci, $tag_eisa, $tag_usb, $tag_special, $tag_pcmcia, $tag_sdio ) = ( 0 .. 6 ); +( $tag_none, $tag_pci, $tag_eisa, $tag_usb, $tag_special, $tag_pcmcia, $tag_sdio ) = ( 0 .. 7 ); -@tag_name = ( "", "pci", "eisa", "usb", "special", "pcmcia", "sdio" ); -@tag_values{@tag_name} = ( 0 .. 6 ); +@tag_name = ( "", "pci", "eisa", "usb", "special", "pcmcia", "sdio", "mmc" ); +@tag_values{@tag_name} = ( 0 .. 7 ); $tag_values{none} = 0; ( $flag_id, $flag_range, $flag_mask, $flag_string, $flag_regexp ) = ( 0 .. 4 ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/ids/src/sdcard new/hwinfo-26.0/src/ids/src/sdcard --- old/hwinfo-25.5/src/ids/src/sdcard 1970-01-01 01:00:00.000000000 +0100 +++ new/hwinfo-26.0/src/ids/src/sdcard 2026-09-28 20:08:43.000000000 +0200 @@ -0,0 +1,51 @@ +# +# SD card manufacturer IDs (from sdcard.ids, upstream bp0/verbose-spork) +# https://www.cameramemoryspeed.com/sd-memory-card-faq/reading-sd-card-cid-serial-psn-internal-numbers +# Tag: TAG_MMC (7) — used by hwinfo for MMC/SD block device vendor lookup +# +# Format: +# vendor.id mmc 0xXXXX +# +vendor.name Manufacturer Name +# +# The id value is the lower 16 bits of the 'manfid' sysfs attribute +# (/sys/class/block/mmcblkX/device/manfid). +# + + vendor.id mmc 0x0001 ++vendor.name Panasonic + + vendor.id mmc 0x0002 ++vendor.name Toshiba + + vendor.id mmc 0x0003 ++vendor.name SanDisk + + vendor.id mmc 0x001b ++vendor.name Samsung + + vendor.id mmc 0x001d ++vendor.name ADATA + + vendor.id mmc 0x0027 ++vendor.name Phison + + vendor.id mmc 0x0028 ++vendor.name Lexar + + vendor.id mmc 0x0031 ++vendor.name Silicon Power + + vendor.id mmc 0x0041 ++vendor.name Kingston + + vendor.id mmc 0x0074 ++vendor.name Transcend Information + + vendor.id mmc 0x0076 ++vendor.name Patriot Memory + + vendor.id mmc 0x0082 ++vendor.name Sony + + vendor.id mmc 0x009c ++vendor.name Angelbird / Hoodman diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hwinfo-25.5/src/ids/src/special new/hwinfo-26.0/src/ids/src/special --- old/hwinfo-25.5/src/ids/src/special 2026-07-31 14:25:46.000000000 +0200 +++ new/hwinfo-26.0/src/ids/src/special 2026-09-28 20:08:43.000000000 +0200 @@ -686,6 +686,11 @@ &device.id special 0x0000 +device.name MMC Controller +# mmc storage device (SD/MMC card) + vendor.id special 0x6016 +&device.id special 0x0000 ++device.name MMC/SD Storage Device + # internal: usb scanner driver list vendor.id special 0xf000 &device.id special 0x0001
