void MDFN_BackupSavFile(const uint8 max_backup_count, const char* sav_ext) { FileStream cts(MDFN_MakeFName(MDFNMKF_SAVBACK, -1, sav_ext), FileStream::MODE_READ_WRITE, true); std::unique_ptr<MemoryStream> tmp; uint8 counter = max_backup_count - 1; cts.read(&counter, 1, false); // // try { tmp.reset(new MemoryStream(new FileStream(MDFN_MakeFName(MDFNMKF_SAV, 0, sav_ext), FileStream::MODE_READ))); } catch(MDFN_Error& e) { if(e.GetErrno() == ENOENT) return; throw; } // // // { try { MemoryStream oldbks(new GZFileStream(MDFN_MakeFName(MDFNMKF_SAVBACK, counter, sav_ext), GZFileStream::MODE::READ)); if(oldbks.size() == tmp->size() && !memcmp(oldbks.map(), tmp->map(), oldbks.size())) { //puts("Skipped backup."); return; } } catch(MDFN_Error& e) { if(e.GetErrno() != ENOENT) throw; } // counter = (counter + 1) % max_backup_count; // GZFileStream bks(MDFN_MakeFName(MDFNMKF_SAVBACK, counter, sav_ext), GZFileStream::MODE::WRITE, 9); bks.write(tmp->map(), tmp->size()); bks.close(); } // // cts.rewind(); cts.write(&counter, 1); cts.close(); }
void solve_system (double* m, int N, double* b, double* x) { eliminate (m, N, b); bks (m, N, b, x); }