Storage::~Storage() { CloseFileStream(); uint i; for (i = 0; i < SEG_NUM; ++i) { delete []SegPage[i].PageTable; } }
void Storage::FM_FlushSegPage() { CloseFileStream(); OpenFileStream(); WriteToFile('m', META_HEAD_SIZE, &DataPageNum, sizeof(DataPageNum)); WriteToFile('m', META_HEAD_SIZE+sizeof(DataPageNum), SegPage, sizeof(SegPage)); uint i, pos = META_HEAD_SIZE + sizeof(DataPageNum) + sizeof(SegPage); for (i = 0; i < SEG_NUM; ++i) { WriteToFile('m', pos, SegPage[i].PageTable, sizeof(PageTabItem)*SegPage[i].PageTableLength); pos += sizeof(PageTabItem)*SegPage[i].PageTableLength; } WriteToFile('m', pos, &p, sizeof(Addr)); }
void Storage::Create() { memset(SegPage, 0, sizeof(SegPage)); memset(Buffer, 0, sizeof(Buffer)); memset(FastTables, 0, sizeof(FastTables)); uint i; for (i = 0; i < SEG_NUM; ++i) { SegPage[i].PageTable = new PageTabItem[INIT_PAGE_TAB_LEN]; SegPage[i].PageTableLength = INIT_PAGE_TAB_LEN; SegPage[i].Used = true; } FILE *meta = fopen(this->MetaPath, "wb"); FILE *data = fopen(this->DataPath, "wb"); fseek(meta, META_HEAD_SIZE, SEEK_SET); fclose(meta); fclose(data); CloseFileStream(); OpenFileStream(); }
void Storage::FM_LoadSegPage() { CloseFileStream(); OpenFileStream(); uint i; for (i = 0; i < SEG_NUM; ++i) { if (SegPage[i].PageTable != NULL) { delete []SegPage[i].PageTable; } } ReadFrmFile('m', META_HEAD_SIZE, &DataPageNum, sizeof(DataPageNum)); ReadFrmFile('m', META_HEAD_SIZE+sizeof(DataPageNum), SegPage, sizeof(SegPage)); uint pos = META_HEAD_SIZE + sizeof(DataPageNum) + sizeof(SegPage); for (i = 0; i < SEG_NUM; ++i) { SegPage[i].Used = true; SegPage[i].PageTable = new PageTabItem[SegPage[i].PageTableLength]; ReadFrmFile('m', pos, SegPage[i].PageTable, sizeof(PageTabItem)*SegPage[i].PageTableLength); pos += sizeof(PageTabItem)*SegPage[i].PageTableLength; } ReadFrmFile('m', pos, &p, sizeof(Addr)); }
static void Close(void* handle) { SWav* handle2 = reinterpret_cast<SWav*>(handle); CloseFileStream(handle2->FileStream); FreeMem(handle2); }
int Init(RecorderProperties *ws, wstring name) { ws->pLoc = NULL; ws->pSvc = NULL; ws->treminateFlag = false; //recoder logs initialisation ws->parameters.name = name; wstring preLog = AppPath() + L"\\SDRpreinit_" + name + L"rec.log"; OpenFileStream(ws->logStream, preLog); SetDefaultLog(ws->logStream); pugi::xml_document config; if (int initConfigResult = InitConfig(config) != status_ok) { return initConfigResult; } wstring recorderXpath = L"/sdr/recording/recorders/sdrd[@name='" + ws->parameters.name + L"']"; pugi::xml_node recorderConfigNode = config.select_single_node( recorderXpath.data()).node(); if ((ws->parameters.interval = recorderConfigNode.attribute(L"interval").as_int()) == 0 && ws->parameters.interval <= 1) { ws->parameters.interval = 60; } if ((ws->parameters.countTotal = recorderConfigNode.attribute(L"count").as_int()) == 0 && ws->parameters.countTotal < -1) { ws->parameters.countTotal = -1; } //for archive testing if ((ws->parameters.archiveInterval = recorderConfigNode.attribute( L"archiveat").as_int()) == 0) ws->parameters.archiveInterval = -1; wstring apppath = AppPath(); ws->parameters.rawCurrentPath = apppath + config.select_single_node(L"/sdr/recording/logs/current").node().attribute( L"path").as_string(); if (ws->parameters.rawCurrentPath.empty()) { WriteFileLogf(L"Failed to init configuration, code here:"); return status_config_file_not_found; } ws->parameters.logDailyPath = apppath + config.select_single_node(L"/sdr/recording/logs/daily").node().attribute( L"path").as_string(); if (ws->parameters.logDailyPath.empty()) { WriteFileLogf(L"Failed to init configuration, code here:"); return status_config_file_not_found; } ws->sysLogPath = ws->parameters.rawCurrentPath + ws->parameters.name + L"rec.log"; //ws->parameters.rawCurrentFile = ws->parameters.rawCurrentPath; ws->parameters.rawCurrentFile += ws->parameters.name + L"rec.sdrd"; OpenFileStream(ws->rawStream, ws->parameters.rawCurrentPath + ws->parameters.rawCurrentFile); CloseFileStream(ws->logStream); DeleteFile(preLog.data()); OpenFileStream(ws->logStream, ws->sysLogPath); SetDefaultLog(ws->logStream); WriteFileLogf(L"Starting recorder " + ws->parameters.name + L"rec."); return status_ok; }
int ArchiveFileRaw(RecorderProperties *ws, bool sender) { if (CloseFileStream(ws->rawStream) != status_ok) { return status_io_error; } if (CloseFileStream(ws->logStream) != status_ok) { return status_io_error; } time_t now_local = time(NULL); struct tm lt; now_local -= 3600; //prev day localtime_s(<, &now_local); wchar_t szBuf[MAX_PATH]; _snwprintf(szBuf, MAX_PATH, L"%d-%02d-%02d\\", lt.tm_year + 1900, lt.tm_mon + 1, lt.tm_mday); wstring todayFolder = ws->parameters.logDailyPath + szBuf; CreateDirectory(todayFolder.data(), 0); HZIP todayZip; ZRESULT zipResult; //ziping raw if (!sender) { wstring archiveRawFilePath = todayFolder + ws->parameters.rawCurrentFile + L".zip"; todayZip = CreateZip((void*) archiveRawFilePath.data(), 0, ZIP_FILENAME); zipResult = ZipAdd(todayZip, ws->parameters.rawCurrentFile.data(), (void*) (ws->parameters.rawCurrentPath + ws->parameters.rawCurrentFile).data(), 0, ZIP_FILENAME); CloseZip(todayZip); if (zipResult != ZR_OK) { WriteFileLogf(L"Raw zip creation failed"); } } //ziping log wstring archiveLogFilePath = todayFolder + ws->parameters.name + L"log.zip"; todayZip = CreateZip((void*) archiveLogFilePath.data(), 0, ZIP_FILENAME); wstring logFile = wstring(ws->parameters.name + L"rec.log"); zipResult = ZipAdd(todayZip, logFile.data(), (void*) (ws->parameters.rawCurrentPath + logFile).data(), 0, ZIP_FILENAME); CloseZip(todayZip); if (zipResult != ZR_OK) { WriteFileLogf(L"Log zip creation failed"); } if (!sender && OpenFileStream(ws->rawStream, ws->parameters.rawCurrentPath + ws->parameters.rawCurrentFile, true) != status_ok) { return status_io_error; } if (OpenFileStream(ws->logStream, ws->sysLogPath, true) != status_ok) { return status_io_error; } return status_ok; }