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