#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); if (info[strlen(info) - 1] != '\n') fwrite("\n", 1, strlen("\n"), logImpl->m_file); fflush(logImpl->m_file); return HGBASE_ERR_OK; }