//-----------------------------------------------------------------------------
int AsioLibWrapper::GetAsioLibraryList(AsioLibInfo *buffer, unsigned int bufferCapacity)
{

// NOTE: Folder for plist files was selected according to recomendations in following document from Apple (see Table 1-1):
//		https://developer.apple.com/library/mac/documentation/General/Conceptual/MOSXAppProgrammingGuide/AppRuntime/AppRuntime.html

    unsigned int          cnt;
    CFURLEnumeratorRef    dirEnum;
    CFURLRef              fileUrl;
    CFURLEnumeratorResult res;
    bool                  ok;

    dirEnum = CreateDirectoryEnumerator(CFSTR("/Library/Application Support/ASIO"));
    if ( ! dirEnum ) {
        return -1;
    }

    cnt = 0;
    if (( ! buffer ) || (bufferCapacity == 0) ) {
        // calculate the number of ASIO libraries
        do {
            res = CFURLEnumeratorGetNextURL(dirEnum, &fileUrl, NULL);
            if (res == kCFURLEnumeratorSuccess) {
                if ( HasExtension(fileUrl, CFSTR("plist")) ) {
                    cnt++;
                }
            }
        } while (res != kCFURLEnumeratorEnd);
    }
    else {
        // get actual data
        do {
            res = CFURLEnumeratorGetNextURL(dirEnum, &fileUrl, NULL);
            if (res == kCFURLEnumeratorSuccess) {
                if ( HasExtension(fileUrl, CFSTR("plist")) ) {
                    if (cnt < bufferCapacity) {
                        ok = LoadAsioLibInfo(fileUrl, buffer[cnt]);
                        if (ok) {
                            cnt++;
                        }
                    }
                }
            }
        } while (res != kCFURLEnumeratorEnd);
    }

    if (dirEnum) {
        CFRelease(dirEnum);
    }

    return (int)cnt;
}
QList<QStorageInfo> QStorageInfoPrivate::mountedVolumes()
{
	QList<QStorageInfo> volumes;
	QCFType<CFURLEnumeratorRef> enumerator;
	enumerator = CFURLEnumeratorCreateForMountedVolumes(Q_NULLPTR,
	             kCFURLEnumeratorSkipInvisibles,
	             Q_NULLPTR);
	CFURLEnumeratorResult result = kCFURLEnumeratorSuccess;

	do
	{
		CFURLRef url;
		CFErrorRef error;
		result = CFURLEnumeratorGetNextURL(enumerator, &url, &error);

		if (result == kCFURLEnumeratorSuccess)
		{
			const QCFString urlString = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
			volumes.append(QStorageInfo(urlString));
		}
	}
	while (result != kCFURLEnumeratorEnd);

	return volumes;
}