xref: /xnu-8792.81.2/iokit/Kernel/printPlist (revision 19c3b8c28c31cb8130e034cfb5df6bf9ba342d90)
1*19c3b8c2SApple OSS Distributionsvoid printPlist(OSObject * plist, UInt32 indent = 0) {
2*19c3b8c2SApple OSS Distributions    const OSMetaClass * typeID;
3*19c3b8c2SApple OSS Distributions    OSCollectionIterator * iterator;
4*19c3b8c2SApple OSS Distributions    OSString * key;
5*19c3b8c2SApple OSS Distributions    OSObject * value;
6*19c3b8c2SApple OSS Distributions    unsigned int i;
7*19c3b8c2SApple OSS Distributions
8*19c3b8c2SApple OSS Distributions    if (!plist) {
9*19c3b8c2SApple OSS Distributions        IOLog("error! null plist\n");
10*19c3b8c2SApple OSS Distributions        return;
11*19c3b8c2SApple OSS Distributions    }
12*19c3b8c2SApple OSS Distributions
13*19c3b8c2SApple OSS Distributions    typeID = OSTypeIDInst(plist);
14*19c3b8c2SApple OSS Distributions
15*19c3b8c2SApple OSS Distributions    if (typeID ==  OSTypeID(OSDictionary)) {
16*19c3b8c2SApple OSS Distributions
17*19c3b8c2SApple OSS Distributions        IOLog("{\n");
18*19c3b8c2SApple OSS Distributions        OSDictionary * dict = OSDynamicCast(OSDictionary, plist);
19*19c3b8c2SApple OSS Distributions        iterator = OSCollectionIterator::withCollection(dict);
20*19c3b8c2SApple OSS Distributions        while ( (key = OSDynamicCast(OSString, iterator->getNextObject())) ) {
21*19c3b8c2SApple OSS Distributions            for (i = 0; i < indent + 4; i++) {
22*19c3b8c2SApple OSS Distributions                IOLog(" ");
23*19c3b8c2SApple OSS Distributions            }
24*19c3b8c2SApple OSS Distributions            IOLog("%s = ", key->getCStringNoCopy());
25*19c3b8c2SApple OSS Distributions            value = dict->getObject(key);
26*19c3b8c2SApple OSS Distributions            printPlist(value, indent + 4);
27*19c3b8c2SApple OSS Distributions        }
28*19c3b8c2SApple OSS Distributions
29*19c3b8c2SApple OSS Distributions        for (i = 0; i < indent; i++) {
30*19c3b8c2SApple OSS Distributions            IOLog(" ");
31*19c3b8c2SApple OSS Distributions        }
32*19c3b8c2SApple OSS Distributions        IOLog("}\n");
33*19c3b8c2SApple OSS Distributions
34*19c3b8c2SApple OSS Distributions    } else if (typeID == OSTypeID(OSArray)) {
35*19c3b8c2SApple OSS Distributions
36*19c3b8c2SApple OSS Distributions        IOLog("{\n");
37*19c3b8c2SApple OSS Distributions
38*19c3b8c2SApple OSS Distributions        OSArray * array = OSDynamicCast(OSArray, plist);
39*19c3b8c2SApple OSS Distributions        iterator = OSCollectionIterator::withCollection(array);
40*19c3b8c2SApple OSS Distributions        while ( (value = iterator->getNextObject()) ) {
41*19c3b8c2SApple OSS Distributions            for (i = 0; i < indent + 4; i++) {
42*19c3b8c2SApple OSS Distributions                IOLog(" ");
43*19c3b8c2SApple OSS Distributions            }
44*19c3b8c2SApple OSS Distributions            printPlist(value, indent + 4);
45*19c3b8c2SApple OSS Distributions        }
46*19c3b8c2SApple OSS Distributions
47*19c3b8c2SApple OSS Distributions        for (i = 0; i < indent; i++) {
48*19c3b8c2SApple OSS Distributions            IOLog(" ");
49*19c3b8c2SApple OSS Distributions        }
50*19c3b8c2SApple OSS Distributions        IOLog("}\n");
51*19c3b8c2SApple OSS Distributions
52*19c3b8c2SApple OSS Distributions    } else if (typeID == OSTypeID(OSString) || typeID == OSTypeID(OSSymbol)) {
53*19c3b8c2SApple OSS Distributions
54*19c3b8c2SApple OSS Distributions        OSString * string = OSDynamicCast(OSString, plist);
55*19c3b8c2SApple OSS Distributions        IOLog("\"%s\"\n", string->getCStringNoCopy());
56*19c3b8c2SApple OSS Distributions
57*19c3b8c2SApple OSS Distributions    } else if (typeID == OSTypeID(OSNumber)) {
58*19c3b8c2SApple OSS Distributions
59*19c3b8c2SApple OSS Distributions        OSNumber * number = OSDynamicCast(OSNumber, plist);
60*19c3b8c2SApple OSS Distributions        UInt32 numberValue = number->unsigned32BitValue();
61*19c3b8c2SApple OSS Distributions        IOLog("0x%lx (%ld base 10)\n", numberValue, numberValue);
62*19c3b8c2SApple OSS Distributions
63*19c3b8c2SApple OSS Distributions    } else if (typeID == OSTypeID(OSBoolean)) {
64*19c3b8c2SApple OSS Distributions
65*19c3b8c2SApple OSS Distributions        OSBoolean * boolObj = OSDynamicCast(OSBoolean, plist);
66*19c3b8c2SApple OSS Distributions        IOLog("%s\n", boolObj->isTrue() ? "true" : "false");
67*19c3b8c2SApple OSS Distributions
68*19c3b8c2SApple OSS Distributions    } else if (typeID == OSTypeID(OSData)) {
69*19c3b8c2SApple OSS Distributions
70*19c3b8c2SApple OSS Distributions        IOLog("(binary data)\n");
71*19c3b8c2SApple OSS Distributions
72*19c3b8c2SApple OSS Distributions    } else {
73*19c3b8c2SApple OSS Distributions
74*19c3b8c2SApple OSS Distributions        IOLog("(object of class %s)\n", plist->getMetaClass()->getClassName());
75*19c3b8c2SApple OSS Distributions
76*19c3b8c2SApple OSS Distributions    }
77*19c3b8c2SApple OSS Distributions
78*19c3b8c2SApple OSS Distributions    return;
79*19c3b8c2SApple OSS Distributions}
80*19c3b8c2SApple OSS Distributions
81