diff options
author | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2013-04-09 20:10:23 +0000 |
---|---|---|
committer | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2013-04-09 20:10:23 +0000 |
commit | 6961465fb290ecc4f99b4e3a8225d594782d15f5 (patch) | |
tree | 5b75ee52addb9f6ef3104966cdefb388b2bb21e9 /backend/usb-darwin.c | |
parent | cb7f98ee7f57af247aacb94977c8f744a1d02eca (diff) | |
download | cups-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.c | 34 |
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; |