+
+void
+AppleDatabase::dbMakeBackup() {
+ // Make a backup copy next to the current keychain, with filename pattern original.keychain_XXXXXX_backup
+ char * filename_temp_cstr = tempnam( mAtomicFile.dir().c_str(), (mAtomicFile.file() + "_").c_str() );
+ string filename_temp(filename_temp_cstr);
+ filename_temp += "_backup";
+
+ free(filename_temp_cstr);
+
+ dbMakeCopy(filename_temp.c_str());
+}
+
+void
+AppleDatabase::dbMakeCopy(const char* path) {
+ if(copyfile(mAtomicFile.path().c_str(), path, NULL, COPYFILE_UNLINK | COPYFILE_ALL) < 0) {
+ UnixError::throwMe(errno);
+ }
+}
+
+void AppleDatabase::dbDeleteFile() {
+ if(unlink(mAtomicFile.path().c_str()) < 0) {
+ UnixError::throwMe(errno);
+ }
+}