summaryrefslogtreecommitdiff
path: root/backend/usb-darwin.c
diff options
context:
space:
mode:
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2013-04-09 20:10:23 +0000
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2013-04-09 20:10:23 +0000
commit6961465fb290ecc4f99b4e3a8225d594782d15f5 (patch)
tree5b75ee52addb9f6ef3104966cdefb388b2bb21e9 /backend/usb-darwin.c
parentcb7f98ee7f57af247aacb94977c8f744a1d02eca (diff)
downloadcups-6961465fb290ecc4f99b4e3a8225d594782d15f5.tar.gz
Merge changes from CUPS 1.7b1-r10947.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@4274 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'backend/usb-darwin.c')
-rw-r--r--backend/usb-darwin.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/backend/usb-darwin.c b/backend/usb-darwin.c
index 509bb89f0..2b423c2a4 100644
--- a/backend/usb-darwin.c
+++ b/backend/usb-darwin.c
@@ -1603,11 +1603,12 @@ static kern_return_t registry_close(void)
static OSStatus copy_deviceid(classdriver_t **classdriver,
CFStringRef *deviceID)
{
- CFStringRef devID = NULL,
-
- deviceMake = NULL,
- deviceModel = NULL,
- deviceSerial = NULL;
+ CFStringRef devID = NULL;
+ CFStringRef deviceMake = NULL;
+ CFStringRef deviceModel = NULL;
+ CFStringRef deviceSerial = NULL;
+
+ *deviceID = NULL;
OSStatus err = (*classdriver)->GetDeviceID(classdriver, &devID, DEFAULT_TIMEOUT);
@@ -1653,12 +1654,10 @@ static OSStatus copy_deviceid(classdriver_t **classdriver,
if (deviceSerial == NULL && desc.iSerialNumber != 0)
{
- CFStringRef data = NULL;
- err = (*classdriver)->GetString(classdriver, desc.iSerialNumber, kUSBLanguageEnglish, DEFAULT_TIMEOUT, &data);
- if (data != NULL)
+ err = (*classdriver)->GetString(classdriver, desc.iSerialNumber, kUSBLanguageEnglish, DEFAULT_TIMEOUT, &deviceSerial);
+ if (deviceSerial != NULL)
{
- CFStringAppendFormat(newDevID, NULL, CFSTR("SERN:%@;"), data);
- CFRelease(data);
+ CFStringAppendFormat(newDevID, NULL, CFSTR("SERN:%@;"), deviceSerial);
}
}
@@ -1675,6 +1674,21 @@ static OSStatus copy_deviceid(classdriver_t **classdriver,
{
*deviceID = devID;
}
+
+ if (*deviceID == NULL)
+ return err;
+
+ /* Remove special characters from the serial number */
+ CFRange range = (deviceSerial != NULL ? CFStringFind(deviceSerial, CFSTR("+"), 0) : CFRangeMake(0, 0));
+ if (range.length == 1) {
+ range = CFStringFind(*deviceID, deviceSerial, 0);
+
+ CFMutableStringRef deviceIDString = CFStringCreateMutableCopy(NULL, 0, *deviceID);
+ CFStringFindAndReplace(deviceIDString, CFSTR("+"), CFSTR(""), range, 0);
+ CFRelease(*deviceID);
+ *deviceID = deviceIDString;
+ }
+
release_deviceinfo(&deviceMake, &deviceModel, &deviceSerial);
return err;