* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
*/
+#define IOKIT_ENABLE_SHARED_PTR
+
#include <IOKit/IOKernelReportStructs.h>
#include <IOKit/IOKernelReporters.h>
#define super OSObject
OSDefineMetaClassAndStructors(IOReportLegend, OSObject);
-IOReportLegend*
+OSSharedPtr<IOReportLegend>
IOReportLegend::with(OSArray *legend)
{
- IOReportLegend *iorLegend = new IOReportLegend;
+ OSSharedPtr<IOReportLegend> iorLegend = OSMakeShared<IOReportLegend>();
if (iorLegend) {
if (legend != NULL) {
if (iorLegend->initWith(legend) != kIOReturnSuccess) {
- OSSafeReleaseNULL(iorLegend);
- return NULL;
+ return nullptr;
}
}
return iorLegend;
} else {
- return NULL;
+ return nullptr;
}
}
void
IOReportLegend::free(void)
{
- if (_reportLegend) {
- _reportLegend->release();
- }
super::free();
}
OSArray*
IOReportLegend::getLegend(void)
{
- return _reportLegend;
+ return _reportLegend.get();
}
IOReturn
const char *subGroupName)
{
IOReturn res = kIOReturnError;
- IOReportLegend *legend = NULL;
- OSObject *curLegend = NULL;
+ OSSharedPtr<IOReportLegend> legend;
+ OSSharedPtr<OSObject> curLegend;
// No need to check groupName and subGroupName because optional params
if (!reportingService || !reporter) {
// is how you make an empty legend). If it's not an array, then
// we're just going to replace it.
curLegend = reportingService->copyProperty(kIOReportLegendKey);
- legend = IOReportLegend::with(OSDynamicCast(OSArray, curLegend));
+ legend = IOReportLegend::with(OSDynamicCast(OSArray, curLegend.get()));
if (!legend) {
goto finish;
}
res = kIOReturnSuccess;
finish:
- if (legend) {
- legend->release();
- }
- if (curLegend) {
- curLegend->release();
- }
-
return res;
}
const char *subGroupName)
{
kern_return_t res = kIOReturnError;
- const OSSymbol *tmpGroupName = NULL;
- const OSSymbol *tmpSubGroupName = NULL;
+ OSSharedPtr<const OSSymbol> tmpGroupName;
+ OSSharedPtr<const OSSymbol> tmpSubGroupName;
if (!legendEntry) {
- goto finish;
+ return res;
}
if (groupName) {
}
// It is ok to call appendLegendWith() if tmpGroups are NULL
- if (legendEntry) {
- res = organizeLegend(legendEntry, tmpGroupName, tmpSubGroupName);
+ res = organizeLegend(legendEntry, tmpGroupName.get(), tmpSubGroupName.get());
- if (tmpGroupName) {
- tmpGroupName->release();
- }
- if (tmpSubGroupName) {
- tmpSubGroupName->release();
- }
- }
-
-finish:
return res;
}
const char *subGroupName)
{
IOReturn res = kIOReturnError;
- IOReportLegendEntry *legendEntry = NULL;
+ OSSharedPtr<IOReportLegendEntry> legendEntry;
if (reporter) {
legendEntry = reporter->createLegend();
if (legendEntry) {
- res = addLegendEntry(legendEntry, groupName, subGroupName);
- legendEntry->release();
+ res = addLegendEntry(legendEntry.get(), groupName, subGroupName);
}
}
const OSSymbol *groupName,
const OSSymbol *subGroupName)
{
- IOReturn res = kIOReturnError;
-
if (!legendEntry) {
- return res = kIOReturnBadArgument;
+ return kIOReturnBadArgument;
}
if (!groupName && subGroupName) {
- return res = kIOReturnBadArgument;
+ return kIOReturnBadArgument;
}
IORLEGENDLOG("IOReportLegend::organizeLegend");
// callers can now safely release legendEntry (it is part of _reportLegend)
- return res = kIOReturnSuccess;
+ return kIOReturnSuccess;
}