code_app/modules/base/HGLog.cpp

89 lines
1.6 KiB
C++

#include "HGLog.h"
#include "HGInc.h"
struct HGLogImpl
{
HGLogImpl()
{
m_file = NULL;
}
~HGLogImpl()
{
if (NULL != m_file)
{
fclose(m_file);
m_file = NULL;
}
}
FILE* m_file;
};
HGResult HGAPI HGBase_OpenLog(const HGChar* fileName, HGLog* log)
{
if (NULL == fileName || NULL == log)
{
return HGBASE_ERR_INVALIDARG;
}
FILE *file = fopen(fileName, "a+");
if (NULL == file)
{
return HGBASE_ERR_ACCESSDENIED;
}
HGLogImpl* logImpl = new HGLogImpl;
logImpl->m_file = file;
*log = (HGLog)logImpl;
return HGBASE_ERR_OK;
}
HGResult HGAPI HGBase_CloseLog(HGLog log)
{
if (NULL == log)
{
return HGBASE_ERR_INVALIDARG;
}
HGLogImpl* logImpl = (HGLogImpl*)log;
delete logImpl;
return HGBASE_ERR_OK;
}
HGResult HGAPI HGBase_GetLogFileSize(HGLog log, HGLonglong* size)
{
if (NULL == log || NULL == size)
{
return HGBASE_ERR_INVALIDARG;
}
HGLogImpl* logImpl = (HGLogImpl*)log;
#if defined(HG_CMP_MSC)
_fseeki64(logImpl->m_file, 0, SEEK_END);
*size = _ftelli64(logImpl->m_file);
#else
fseeko64(logImpl->m_file, 0, SEEK_END);
*size = ftello64(logImpl->m_file);
#endif
return HGBASE_ERR_OK;
}
HGResult HGAPI HGBase_WriteLog(HGLog log, const HGChar* info)
{
if (NULL == log || NULL == info || '\0' == *info)
{
return HGBASE_ERR_INVALIDARG;
}
HGLogImpl* logImpl = (HGLogImpl*)log;
#if defined(HG_CMP_MSC)
_fseeki64(logImpl->m_file, 0, SEEK_END);
#else
fseeko64(logImpl->m_file, 0, SEEK_END);
#endif
fwrite(info, 1, strlen(info), logImpl->m_file);
fwrite("\n", 1, strlen("\n"), logImpl->m_file);
fflush(logImpl->m_file);
return HGBASE_ERR_OK;
}