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

Reply via email to