Simplify Mac OS implementation of sp_list_ports().
This commit is contained in:
parent
f095f84164
commit
073c86bd07
26
serialport.c
26
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
|
||||
|
|
Loading…
Reference in New Issue