[LPMud]마군님 주라소스 오류문제
한웅
1,945
0
0
2014-03-09 14:46:28
1Comments
추리소설
2014.03.11(화) 오후 04:44:08
문제1의 원인은 리눅스와 윈도우의 개행문자 차이 때문에 발생하는 거구요.
데이터 저장/로드시 위 문제점을 해결해 주어야 정상동작 할 수 있습니다.
제가 사용한 방법을 알려드리자면..
lib/adm/include/config.h 파일에 아래 설정을 추가하시고
(OS에 맞게 그때 그때 수정하여 사용합니다)
#define RUN_OS_WIN 1
//#undef RUN_OS_WIN // Window일 경우 1, 리눅스일 경우 #undef
lib/adm/master/simul_efun.c 파일을 열어서.. 수정/추가 합니다.
//-----------------------------------------------------------------------------
// 함수 설명 : 윈도우, 리눅스 개행문자 차이를 해결하기 위해... 윈도우 : \r\n 리눅스 : \n
//-----------------------------------------------------------------------------
int save_file(string strPath, string strConTents)
{
#ifdef RUN_OS_WIN
if(efun::save_file(strPath, strConTents))
{
string strDesc;
if(file_size(strPath) > 2)
{
strDesc = replace_string(read_bytes(strPath), "\r\n" , "
");
rm(strPath);
write_bytes(strPath, 0, strDesc);
}
return 1;
}
else
{
return 0;
}
#endif
return efun::save_file(strPath, strConTents);
}
//-----------------------------------------------------------------------------
// 함수 설명 : 윈도우, 리눅스 개행문자 차이를 해결하기 위해... 윈도우 : \r\n 리눅스 : \n
//-----------------------------------------------------------------------------
void convCRLF(string strFilePath)
{
#ifdef RUN_OS_WIN
string strDesc;
//-----------------------------------------------------------------------------
// 윈도우일 경우 \r\n을 리눅스의 \n으로 바꾸어서 다시 저장한다.
//-----------------------------------------------------------------------------
if(strFilePath[<2..] == ".o")
strFilePath = strFilePath[0..<3];
strDesc = replace_string(read_bytes(strFilePath + __SAVE_EXTENSION__), "\r\n" , "
");
rm(strFilePath + __SAVE_EXTENSION__);
write_bytes(strFilePath + __SAVE_EXTENSION__, 0, strDesc);
#endif
return;
}
convCRLF함수의 사용법은.. save_object함수가 사용되는 부분의 밑에다가
인자를 동일하게 주어서 호출해 주시면 되겠네요.
예)
save_object(SAVE_FILE);
convCRLF(SAVE_FILE);
문제1이 해결되었는데도 문제2가 발생한다면..
명령어 자체 잘못된 코딩에 문제일 가능성이 높겠네요.
메모리에 룸이 로드가 안된상태인데 해당 룸으로 유저객체를 Move시킬려고
시도해도 저런 에러메세지가 나올거구요.
기타 여러가지 이유가 있으니 에러메세지와 발생위치를 유심히 보시고 소스를 살펴보시면
해결가능하지 않을까 생각합니다. 문제2는 별 도움이 못되겠네요.