
* Corrected typo in clif_hpmeter * Fixed frost diver git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@727 54d463be-8e91-2dee-dedb-b68131a5f0ec
44 lines
985 B
C
44 lines
985 B
C
|
|
#include <stdio.h>
|
|
#include <errno.h>
|
|
#include <string.h>
|
|
#include "lock.h"
|
|
#include "showmsg.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);
|
|
// このタイミングで落ちると最悪。
|
|
if (rename(newfile,filename) != 0) {
|
|
sprintf(tmp_output,"%s - '"CL_WHITE"%s"CL_RESET"'\n", strerror(errno), newfile);
|
|
ShowError(tmp_output);
|
|
}
|
|
return ret;
|
|
} else {
|
|
return 1;
|
|
}
|
|
}
|
|
|