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