// Save the state of the event system bool eventSaveState(const char *pFilename) { WzConfig ini(pFilename); if (!eventSaveContext(ini) || !eventSaveTriggerList(psTrigList, "trig", ini) || !eventSaveTriggerList(psCallbackList, "callback", ini)) { return false; } return true; }
// Save the state of the event system BOOL eventSaveState(SDWORD version, char **ppBuffer, UDWORD *pFileSize) { UDWORD size, totalSize; char *pBuffer, *pPos; EVENT_SAVE_HDR *psHdr; totalSize = sizeof(EVENT_SAVE_HDR); // find the size of the context save if (!eventSaveContext(NULL, &size)) { return false; } totalSize += size; // find the size of the trigger save if (!eventSaveTriggerList(psTrigList, NULL, &size)) { return false; } totalSize += size; // find the size of the callback trigger save if (!eventSaveTriggerList(psCallbackList, NULL, &size)) { return false; } totalSize += size; // Allocate the buffer to save to pBuffer = (char*)malloc(totalSize); if (pBuffer == NULL) { debug( LOG_FATAL, "eventSaveState: out of memory" ); abort(); return false; } pPos = pBuffer; // set the header psHdr = (EVENT_SAVE_HDR *)pPos; psHdr->aFileType[0] = 'e'; psHdr->aFileType[1] = 'v'; psHdr->aFileType[2] = 'n'; psHdr->aFileType[3] = 't'; psHdr->version = version; endian_udword(&psHdr->version); pPos += sizeof(EVENT_SAVE_HDR); // save the contexts if (!eventSaveContext(pPos, &size)) { return false; } pPos += size; // save the triggers if (!eventSaveTriggerList(psTrigList, pPos, &size)) { return false; } pPos += size; // save the callback triggers if (!eventSaveTriggerList(psCallbackList, pPos, &size)) { return false; } pPos += size; *ppBuffer = pBuffer; *pFileSize = totalSize; return true; }