[lfs-patches] r3045 - trunk/busybox

igor at higgs.linuxfromscratch.org igor at higgs.linuxfromscratch.org
Sat Oct 25 05:59:18 PDT 2014


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/busybox@busybox.net/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


More information about the patches mailing list