diff options
author | wizputer <wizputer@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2004-11-27 19:32:30 +0000 |
---|---|---|
committer | wizputer <wizputer@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2004-11-27 19:32:30 +0000 |
commit | 486b4f2a12b41507b67a1a93ae5871b3be447914 (patch) | |
tree | 8196d22d0fce973ac6e53b24735776ba9dcaf77f /src/common/lock.c | |
parent | ecb15e6101bc1912bb2520151c45ed69af80feb8 (diff) | |
parent | f0da8da932031212f34aa97eff882f72cb69cc2a (diff) | |
download | hercules-486b4f2a12b41507b67a1a93ae5871b3be447914.tar.gz hercules-486b4f2a12b41507b67a1a93ae5871b3be447914.tar.bz2 hercules-486b4f2a12b41507b67a1a93ae5871b3be447914.tar.xz hercules-486b4f2a12b41507b67a1a93ae5871b3be447914.zip |
correct directory structure
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@387 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/common/lock.c')
-rw-r--r-- | src/common/lock.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/common/lock.c b/src/common/lock.c new file mode 100644 index 000000000..9a2205bf4 --- /dev/null +++ b/src/common/lock.c @@ -0,0 +1,37 @@ + +#include <stdio.h> +#include "lock.h" + +// 書き込みファイルの保護処理 +// (書き込みが終わるまで、旧ファイルを保管しておく) + +// 新しいファイルの書き込み開始 +FILE* lock_fopen(const char* filename,int *info) { + char newfile[512]; + FILE *fp; + int no = 0; + + // 安全なファイル名を得る(手抜き) + do { + sprintf(newfile,"%s_%04d.tmp",filename,++no); + } while((fp = fopen(newfile,"r")) && (fclose(fp), no<9999) ); + *info = no; + return fopen(newfile,"w"); +} + +// 旧ファイルを削除&新ファイルをリネーム +int lock_fclose(FILE *fp,const char* filename,int *info) { + int ret = 0; + char newfile[512]; + if(fp != NULL) { + ret = fclose(fp); + sprintf(newfile,"%s_%04d.tmp",filename,*info); + remove(filename); + // このタイミングで落ちると最悪。 + rename(newfile,filename); + return ret; + } else { + return 1; + } +} + |