Improve some libcdio CoreFoundation code.
I found it via clang complaining about a useless null check on an array, but I decided to get rid of the array in favor of dynamic allocation, as there was no reason to assume a maximum length of 0x32 bytes. Plus, add a CFString type check just in case, and switch to UTF-8 in the off-chance it matters. The result has not actually been tested, as I have no CD drive.
This commit is contained in:
parent
8492d04dfa
commit
06433652be
|
@ -91,8 +91,6 @@ std::vector<std::string> cdio_get_devices()
|
|||
next_media = IOIteratorNext( media_iterator );
|
||||
if (next_media != 0)
|
||||
{
|
||||
char psz_buf[0x32];
|
||||
size_t dev_path_length;
|
||||
CFTypeRef str_bsd_path;
|
||||
|
||||
do
|
||||
|
@ -107,22 +105,20 @@ std::vector<std::string> cdio_get_devices()
|
|||
continue;
|
||||
}
|
||||
|
||||
// Below, by appending 'r' to the BSD node name, we indicate
|
||||
// a raw disk. Raw disks receive I/O requests directly and
|
||||
// don't go through a buffer cache.
|
||||
snprintf( psz_buf, sizeof(psz_buf), "%s%c", _PATH_DEV, 'r' );
|
||||
dev_path_length = strlen( psz_buf );
|
||||
|
||||
if (CFStringGetCString( (CFStringRef)str_bsd_path,
|
||||
(char*)&psz_buf + dev_path_length,
|
||||
sizeof(psz_buf) - dev_path_length,
|
||||
kCFStringEncodingASCII))
|
||||
if (CFGetTypeID(str_bsd_path) == CFStringGetTypeID())
|
||||
{
|
||||
if (psz_buf != nullptr)
|
||||
size_t buf_size = CFStringGetLength((CFStringRef)str_bsd_path) * 4 + 1;
|
||||
char* buf = new char[buf_size];
|
||||
|
||||
if (CFStringGetCString((CFStringRef)str_bsd_path, buf, buf_size, kCFStringEncodingUTF8))
|
||||
{
|
||||
std::string str = psz_buf;
|
||||
drives.push_back(str);
|
||||
// Below, by appending 'r' to the BSD node name, we indicate
|
||||
// a raw disk. Raw disks receive I/O requests directly and
|
||||
// don't go through a buffer cache.
|
||||
drives.push_back(std::string(_PATH_DEV "r") + buf);
|
||||
}
|
||||
|
||||
delete[] buf;
|
||||
}
|
||||
CFRelease( str_bsd_path );
|
||||
IOObjectRelease( next_media );
|
||||
|
|
Loading…
Reference in New Issue