[153] | 1 | #include "SCPatchContext.h"
|
---|
| 2 |
|
---|
| 3 | /* -------------------------------------------------------------------------------- */
|
---|
| 4 | bool operator< (const MacPSN& x, const MacPSN& y)
|
---|
| 5 | {
|
---|
| 6 | if(x.psn.highLongOfPSN < y.psn.highLongOfPSN)
|
---|
| 7 | return true;
|
---|
| 8 | else if(x.psn.highLongOfPSN == y.psn.highLongOfPSN)
|
---|
| 9 | return (x.psn.lowLongOfPSN < y.psn.lowLongOfPSN);
|
---|
| 10 | else
|
---|
| 11 | return false;
|
---|
| 12 | }
|
---|
| 13 |
|
---|
| 14 | /* -------------------------------------------------------------------------------- */
|
---|
| 15 | bool operator==(const MacPSN& x, const MacPSN& y)
|
---|
| 16 | {
|
---|
| 17 | return (x.psn.highLongOfPSN == y.psn.highLongOfPSN &&
|
---|
| 18 | x.psn.lowLongOfPSN == y.psn.lowLongOfPSN);
|
---|
| 19 | }
|
---|
| 20 |
|
---|
| 21 | /* -------------------------------------------------------------------------------- */
|
---|
| 22 | SCPatchContext::SCPatchContext(ProcessSerialNumber *inPSN, SInt32 inPID, OSType inCreator)
|
---|
| 23 | {
|
---|
| 24 | psn = *inPSN;
|
---|
| 25 | pid = inPID;
|
---|
| 26 | path = NULL;
|
---|
| 27 | name = NULL;
|
---|
| 28 | creator = inCreator;
|
---|
| 29 | flags = 0;
|
---|
| 30 | }
|
---|
| 31 |
|
---|
| 32 | /* -------------------------------------------------------------------------------- */
|
---|
| 33 | SCPatchContext::SCPatchContext(const SCPatchContext &toCopy)
|
---|
| 34 | {
|
---|
| 35 | psn = toCopy.psn;
|
---|
| 36 | pid = toCopy.pid;
|
---|
| 37 | flags = toCopy.flags;
|
---|
| 38 | creator = toCopy.creator;
|
---|
| 39 | if((path = toCopy.path) != NULL)
|
---|
| 40 | CFRetain(path);
|
---|
| 41 | if((name = toCopy.name) != NULL)
|
---|
| 42 | CFRetain(name);
|
---|
| 43 | }
|
---|
| 44 |
|
---|
| 45 | /* -------------------------------------------------------------------------------- */
|
---|
| 46 | /* -------------------------------------------------------------------------------- */
|
---|
| 47 | SCPatchContextList::SCPatchContextList(void) : contexts()
|
---|
| 48 | {
|
---|
| 49 | }
|
---|
| 50 |
|
---|
| 51 | /* -------------------------------------------------------------------------------- */
|
---|
| 52 | SCPatchContextList::~SCPatchContextList(void)
|
---|
| 53 | {
|
---|
| 54 | }
|
---|
| 55 |
|
---|
| 56 | /* -------------------------------------------------------------------------------- */
|
---|
| 57 | SCPatchContextRef SCPatchContextList::NewContext(ProcessSerialNumber *inPSN,
|
---|
| 58 | SInt32 inPID, OSType inCreator)
|
---|
| 59 | {
|
---|
| 60 | SCPatchContextRef zeroResult = { 0 };
|
---|
| 61 | SCPatchContextRef result;
|
---|
| 62 |
|
---|
| 63 | try
|
---|
| 64 | {
|
---|
| 65 | MacPSN macPSN(inPSN);
|
---|
| 66 | SCPatchContext patchContext(inPSN, inPID, inCreator);
|
---|
| 67 | SCPatchContextPair newContext(macPSN, patchContext);
|
---|
| 68 |
|
---|
| 69 | contexts.insert(newContext);
|
---|
| 70 | result = *inPSN;
|
---|
| 71 | }
|
---|
| 72 | catch(...)
|
---|
| 73 | {
|
---|
| 74 | result = zeroResult;
|
---|
| 75 | }
|
---|
| 76 | return result;
|
---|
| 77 | }
|
---|
| 78 |
|
---|
| 79 | /* -------------------------------------------------------------------------------- */
|
---|
| 80 | SCPatchContext *SCPatchContextList::GetContext(ProcessSerialNumber *inPSN)
|
---|
| 81 | {
|
---|
| 82 | SCPatchContextIterator iter;
|
---|
| 83 |
|
---|
| 84 | iter = contexts.find(MacPSN(inPSN));
|
---|
| 85 | if(iter != contexts.end())
|
---|
| 86 | return &(*iter).second;
|
---|
| 87 | else
|
---|
| 88 | return NULL;
|
---|
| 89 | }
|
---|
| 90 |
|
---|
| 91 | /* -------------------------------------------------------------------------------- */
|
---|
| 92 | SCPatchContext *SCPatchContextList::GetContext(OSType inCreator)
|
---|
| 93 | {
|
---|
| 94 | SCPatchContextIterator iter;
|
---|
| 95 |
|
---|
| 96 | for(iter = contexts.begin(); iter != contexts.end(); iter++)
|
---|
| 97 | if(iter->second.creator == inCreator)
|
---|
| 98 | return &(*iter).second;
|
---|
| 99 | return NULL;
|
---|
| 100 | }
|
---|
| 101 |
|
---|
| 102 | /* -------------------------------------------------------------------------------- */
|
---|
| 103 | void SCPatchContextList::DeleteContext(ProcessSerialNumber *inPSN)
|
---|
| 104 | {
|
---|
| 105 | contexts.erase(MacPSN(inPSN));
|
---|
| 106 | }
|
---|