Author: igor
Date: Sat Oct 25 05:59:18 2014
New Revision: 3045

Log:
add preliminary patch for human readable output in busybox lspci and lsusb

Added:
   trunk/busybox/
   trunk/busybox/busybox-1.22.1-lsids-1.patch

Added: trunk/busybox/busybox-1.22.1-lsids-1.patch
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ trunk/busybox/busybox-1.22.1-lsids-1.patch  Sat Oct 25 05:59:18 2014        
(r3045)
@@ -0,0 +1,271 @@
+Submitted By:            Igor Živković
+Date:                    2014-10-25
+Initial Package Version: 1.22.1
+Upstream Status:         Rejected
+Origin:                  Sven Dickert
+Description:             Rediffed hack from the BusyBox mailing list adding
+                         support for human readable output to lspci and lsusb.
+                         
https://www.mail-archive.com/[email protected]/msg11323.html
+
+diff -Naur busybox-1.22.1.orig/util-linux/Config.src 
busybox-1.22.1/util-linux/Config.src
+--- busybox-1.22.1.orig/util-linux/Config.src  2014-01-09 19:15:44.000000000 
+0100
++++ busybox-1.22.1/util-linux/Config.src       2014-10-25 14:11:01.035632282 
+0200
+@@ -404,6 +404,18 @@
+ 
+         This version uses sysfs (/sys/bus/usb/devices) only.
+ 
++config LSIDS
++      bool "lsids"
++      default n
++      depends on LSPCI
++      depends on LSUSB
++      help
++        use human readable form when displaying information about PCI and
++        USB busses in the system and devices connected to them.
++
++        http://pciids.sourceforge.net/
++        http://www.linux-usb.org/usb-ids.html
++
+ config MKSWAP
+       bool "mkswap"
+       default y
+diff -Naur busybox-1.22.1.orig/util-linux/Kbuild.src 
busybox-1.22.1/util-linux/Kbuild.src
+--- busybox-1.22.1.orig/util-linux/Kbuild.src  2014-01-09 19:15:44.000000000 
+0100
++++ busybox-1.22.1/util-linux/Kbuild.src       2014-10-25 14:12:40.136226311 
+0200
+@@ -26,6 +26,7 @@
+ lib-$(CONFIG_LOSETUP)           += losetup.o
+ lib-$(CONFIG_LSPCI)             += lspci.o
+ lib-$(CONFIG_LSUSB)             += lsusb.o
++lib-$(CONFIG_LSIDS)             += sprintid.o
+ lib-$(CONFIG_MKFS_EXT2)         += mkfs_ext2.o
+ lib-$(CONFIG_MKFS_MINIX)        += mkfs_minix.o
+ lib-$(CONFIG_MKFS_REISER)       += mkfs_reiser.o
+diff -Naur busybox-1.22.1.orig/util-linux/lspci.c 
busybox-1.22.1/util-linux/lspci.c
+--- busybox-1.22.1.orig/util-linux/lspci.c     2014-01-09 19:15:44.000000000 
+0100
++++ busybox-1.22.1/util-linux/lspci.c  2014-10-25 14:26:24.034191502 +0200
+@@ -22,6 +22,8 @@
+       OPT_k = (1 << 1),
+ };
+ 
++#include "sprintid.h"
++
+ /*
+  * PCI_SLOT_NAME PCI_CLASS: PCI_VID:PCI_DID [PCI_SUBSYS_VID:PCI_SUBSYS_DID] 
[DRIVER]
+  */
+@@ -36,6 +38,7 @@
+       char *pci_slot_name = NULL, *driver = NULL;
+       int pci_class = 0, pci_vid = 0, pci_did = 0;
+       int pci_subsys_vid = 0, pci_subsys_did = 0;
++      char *pci_human_readable;
+ 
+       char *uevent_filename = concat_path_file(fileName, "/uevent");
+       parser = config_open2(uevent_filename, fopen_for_read);
+@@ -77,8 +80,15 @@
+                       pci_slot_name, pci_class, pci_vid, pci_did,
+                       pci_subsys_vid, pci_subsys_did);
+       } else {
++              pci_human_readable = sprintid(pci_class, pci_vid, pci_did);
++              if (pci_human_readable != NULL) {
++                      printf("%s %s", pci_slot_name, pci_human_readable);
++              }
++              else
++              {
+               printf("%s Class %04x: %04x:%04x",
+                       pci_slot_name, pci_class, pci_vid, pci_did);
++              }
+       }
+ 
+       if ((option_mask32 & OPT_k) && driver) {
+@@ -101,6 +111,7 @@
+ {
+       getopt32(argv, "m" /*non-compat:*/ "k" /*ignored:*/ "nv");
+ 
++      sprintid_init("/usr/share/hwdata/pci.ids");
+       recursive_action("/sys/bus/pci/devices",
+                       ACTION_RECURSE,
+                       fileAction,
+@@ -108,5 +119,6 @@
+                       NULL, /* userData */
+                       0 /* depth */);
+ 
++      sprintid_cleanup();
+       return EXIT_SUCCESS;
+ }
+diff -Naur busybox-1.22.1.orig/util-linux/lsusb.c 
busybox-1.22.1/util-linux/lsusb.c
+--- busybox-1.22.1.orig/util-linux/lsusb.c     2014-01-09 19:15:44.000000000 
+0100
++++ busybox-1.22.1/util-linux/lsusb.c  2014-10-25 14:45:39.398851760 +0200
+@@ -11,6 +11,7 @@
+ //usage:#define lsusb_full_usage ""
+ 
+ #include "libbb.h"
++#include "sprintid.h"
+ 
+ static int FAST_FUNC fileAction(
+               const char *fileName,
+@@ -22,6 +23,7 @@
+       char *tokens[4];
+       char *busnum = NULL, *devnum = NULL;
+       int product_vid = 0, product_did = 0;
++      char *usb_human_readable;
+       char *uevent_filename = concat_path_file(fileName, "/uevent");
+ 
+       parser = config_open2(uevent_filename, fopen_for_read);
+@@ -51,7 +53,12 @@
+       config_close(parser);
+ 
+       if (busnum) {
++              usb_human_readable = sprintid(-1, product_vid, product_did);
++              if (usb_human_readable != NULL) {
++                      printf("Bus %s Device %s: ID %04x:%04x %s\n", busnum, 
devnum, product_vid, product_did, usb_human_readable);
++              } else {
+               printf("Bus %s Device %s: ID %04x:%04x\n", busnum, devnum, 
product_vid, product_did);
++              }
+               free(busnum);
+               free(devnum);
+       }
+@@ -64,6 +71,7 @@
+ {
+       /* no options, no getopt */
+ 
++      sprintid_init("/usr/share/hwdata/usb.ids");
+       recursive_action("/sys/bus/usb/devices",
+                       ACTION_RECURSE,
+                       fileAction,
+@@ -71,5 +79,6 @@
+                       NULL, /* userData */
+                       0 /* depth */);
+ 
++      sprintid_cleanup();
+       return EXIT_SUCCESS;
+ }
+diff -Naur busybox-1.22.1.orig/util-linux/sprintid.c 
busybox-1.22.1/util-linux/sprintid.c
+--- busybox-1.22.1.orig/util-linux/sprintid.c  1970-01-01 01:00:00.000000000 
+0100
++++ busybox-1.22.1/util-linux/sprintid.c       2014-10-25 14:13:24.758328281 
+0200
+@@ -0,0 +1,110 @@
++#include "sprintid.h"
++
++static FILE *sprintid_db;
++static char *sprintid_line;
++
++#define SPRINTID_NAMELEN 128
++
++inline int sprintid_init(char *dbname) {
++   sprintid_db=fopen(dbname,"r");
++   sprintid_line=malloc(3*SPRINTID_NAMELEN);
++   if(sprintid_db==NULL || sprintid_line==NULL)
++       return(1);
++   else
++       return(0);
++}
++
++inline int sprintid_cleanup(void) {
++   if(sprintid_db!=NULL) {
++       fclose(sprintid_db);
++   }
++   if(sprintid_line!=NULL) {
++       free(sprintid_line);
++   }
++   return(0);
++}
++
++char *sprintid(int cidnum, int vidnum, int didnum) {
++   char line[3*SPRINTID_NAMELEN+1];
++   char vendor[SPRINTID_NAMELEN+1];
++   char device[SPRINTID_NAMELEN+1];
++   char class[SPRINTID_NAMELEN+1];
++
++   char cid[5];
++   char vid[5];
++   char did[5];
++
++   int havedevice=0;
++
++   if(sprintid_line==NULL) {
++       return(NULL);
++   }
++
++   sprintf(vid,"%04x",vidnum);
++   sprintf(did,"%04x",didnum);
++
++   if(cidnum>0)
++   {
++       sprintf(cid,"%04x",cidnum);
++       sprintf(sprintid_line,"Class %s: %s:%s",cid,vid,did);
++   } else {
++       sprintf(cid,"");
++       sprintf(sprintid_line,"%s:%s",vid,did);
++   }
++
++   if(sprintid_db==NULL) {
++       return(sprintid_line);
++   }
++
++   if(cidnum>0) {
++       sprintf(class,"Class unknown class %s: ",cid);
++   }
++   sprintf(vendor,"unknown vendor %s",vid);
++   sprintf(device,"unknown device %s",did);
++
++   fseek(sprintid_db,0L,SEEK_SET);
++
++   while(fgets(line, 3*SPRINTID_NAMELEN, sprintid_db)!=NULL) { 
++       if(line[0]!='#' && line[0]!='\r' && line[0]!='\n')
++       {
++               if((havedevice==0) && ((line[0]>='0' && line[0]<='9') || 
(line[0]>='a' && line[0]<='f'))) { // Vendor
++               if(strncmp(line,vid,4)==0) {
++                   strncpy(vendor,&line[6],SPRINTID_NAMELEN);
++                   while(fgets(line, 3*SPRINTID_NAMELEN, sprintid_db)!=NULL 
&& !((line[0]>='0' && line[0]<='9') || (line[0]>='a' && line[0]<='f'))) { 
++                       if(line[0]=='\t' && ((line[1]>='0' && line[1]<='9') || 
(line[1]>='a' && line[1]<='f'))) { // Device
++                           if(strncmp(&line[1],did,4)==0) {
++                               strncpy(device,&line[7],SPRINTID_NAMELEN);
++                               break;
++                           }
++                       }
++                   }
++               }
++           }
++
++           if(cidnum>0 && line[0]=='C') { // Classes
++               if(strncmp(&line[2],cid,2)==0) { // found Major 
++                   while(fgets(line, 3*SPRINTID_NAMELEN, sprintid_db)!=NULL 
&& !(line[0]=='C')) {
++                       if(line[0]=='\t' && ((line[1]>='0' && line[1]<='9') || 
(line[1]>='a' && line[1]<='f'))) { // subclass
++                           if(strncmp(&line[1],&cid[2],2)==0) {
++                               strncpy(class,&line[5],SPRINTID_NAMELEN);
++                               break;
++                           }
++                       }
++                   }
++                   break;
++               }
++           }
++       }
++   }
++   chomp(class);
++   chomp(vendor);
++   chomp(device);
++   if(cidnum>0)
++   {
++       sprintf(sprintid_line,"Class %s: %s:%s",class,vendor,device);
++   } else {
++       sprintf(sprintid_line,"%s:%s",vendor,device);
++   }
++   return(sprintid_line); 
++}
++
+diff -Naur busybox-1.22.1.orig/util-linux/sprintid.h 
busybox-1.22.1/util-linux/sprintid.h
+--- busybox-1.22.1.orig/util-linux/sprintid.h  1970-01-01 01:00:00.000000000 
+0100
++++ busybox-1.22.1/util-linux/sprintid.h       2014-10-25 14:13:24.759328241 
+0200
+@@ -0,0 +1,13 @@
++#include <stdio.h>
++#include <string.h>
++#include <libbb.h>
++
++#if CONFIG_LSIDS
++extern char *sprintid(int cidnum, int vidnum, int didnum);
++extern int sprintid_init(char *dbname);
++extern int sprintid_cleanup(void);
++#else
++static inline char *sprintid(int cidnum, int vidnum, int didnum) {}
++static inline int sprintid_init(char *dbname) {}
++static inline int sprintid_cleanup() {}
++#endif
-- 
http://lists.linuxfromscratch.org/listinfo/patches
FAQ: http://www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page

Reply via email to