# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.678   -> 1.679  
#	drivers/usb/core/message.c	1.9     -> 1.10   
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/10/02	cip307@cip.physik.uni-wuerzburg.de	1.679
# [PATCH] USB: string query fix
# 
# Query for stringlen before reading a string in usb.c
# --------------------------------------------
#
diff -Nru a/drivers/usb/core/message.c b/drivers/usb/core/message.c
--- a/drivers/usb/core/message.c	Wed Oct  2 22:40:26 2002
+++ b/drivers/usb/core/message.c	Wed Oct  2 22:40:26 2002
@@ -924,7 +924,7 @@
 int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
 {
 	unsigned char *tbuf;
-	int err;
+	int err, len;
 	unsigned int u, idx;
 
 	if (size <= 0 || !buf || !index)
@@ -954,10 +954,15 @@
 	}
 
 	/*
-	 * Just ask for a maximum length string and then take the length
-	 * that was returned.
+	 * ask for the length of the string 
 	 */
-	err = usb_get_string(dev, dev->string_langid, index, tbuf, 255);
+
+	err = usb_get_string(dev, dev->string_langid, index, tbuf, 2);
+	if(err<2)
+		goto errout;
+	len=tbuf[0];	
+	
+	err = usb_get_string(dev, dev->string_langid, index, tbuf, len);
 	if (err < 0)
 		goto errout;
 
