From: Aurelien Jacobs Date: Fri, 30 May 2014 21:40:45 +0000 (+0200) Subject: Simplify Mac OS implementation of sp_list_ports(). X-Git-Tag: libserialport-0.1.1~130 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=073c86bd070a4a5d55c9971ad779a0da32835b17;p=libserialport.git Simplify Mac OS implementation of sp_list_ports(). --- diff --git a/serialport.c b/serialport.c index ad7a795..3d15106 100644 --- a/serialport.c +++ b/serialport.c @@ -418,49 +418,35 @@ out_close: out_done: #endif #ifdef __APPLE__ - mach_port_t master; CFMutableDictionaryRef classes; io_iterator_t iter; - char *path; + char path[PATH_MAX]; io_object_t port; CFTypeRef cf_path; Boolean result; ret = SP_OK; - DEBUG("Getting IOKit master port"); - if (IOMasterPort(MACH_PORT_NULL, &master) != KERN_SUCCESS) { - SET_FAIL(ret, "IOMasterPort() failed"); - goto out_done; - } - DEBUG("Creating matching dictionary"); if (!(classes = IOServiceMatching(kIOSerialBSDServiceValue))) { SET_FAIL(ret, "IOServiceMatching() failed"); goto out_done; } - CFDictionarySetValue(classes, - CFSTR(kIOSerialBSDTypeKey), CFSTR(kIOSerialBSDAllTypes)); - DEBUG("Getting matching services"); - if (IOServiceGetMatchingServices(master, classes, &iter) != KERN_SUCCESS) { + if (IOServiceGetMatchingServices(kIOMasterPortDefault, classes, + &iter) != KERN_SUCCESS) { SET_FAIL(ret, "IOServiceGetMatchingServices() failed"); goto out_done; } - if (!(path = malloc(PATH_MAX))) { - SET_ERROR(ret, SP_ERR_MEM, "device path malloc failed"); - goto out_release; - } - DEBUG("Iterating over results"); while ((port = IOIteratorNext(iter))) { cf_path = IORegistryEntryCreateCFProperty(port, CFSTR(kIOCalloutDeviceKey), kCFAllocatorDefault, 0); if (cf_path) { - result = CFStringGetCString(cf_path, - path, PATH_MAX, kCFStringEncodingASCII); + result = CFStringGetCString(cf_path, path, sizeof(path), + kCFStringEncodingASCII); CFRelease(cf_path); if (result) { DEBUG("Found port %s", path); @@ -474,8 +460,6 @@ out_done: IOObjectRelease(port); } out: - free(path); -out_release: IOObjectRelease(iter); out_done: #endif