📄 licensefile.cpp
字号:
#ifdef WIN32#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#include <memory.h>#include <errno.h>#include <ctype.h>#include "OSHeaders.h"#include "LicenseFile.h"#ifdef LINUX#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#endif#ifdef LINUXextern "C"{int CopyFile(const char* pszSourceFilename,const char* pszTargetFileName,bool bCancelOnExist){ int from_fd,to_fd; int bytes_read,bytes_write; char buffer[1024]; char *ptr; int flags; if((from_fd=open(pszSourceFilename,O_RDONLY))==-1) { return FALSE; } flags = O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR; if (bCancelOnExist) flags |= O_EXCL; if((to_fd=open(pszTargetFileName ,flags))==-1) { return FALSE; } while(bytes_read=read(from_fd,buffer,1024)) { if((bytes_read==-1)&&(errno!=EINTR)) break; else if(bytes_read>0) { ptr=buffer; while(bytes_write=write(to_fd,ptr,bytes_read)) { if((bytes_write==-1)&&(errno!=EINTR)) break; else if(bytes_write==bytes_read) break; else if(bytes_write>0) { ptr+=bytes_write; bytes_read-=bytes_write; } } if(bytes_write==-1)break; } } close(from_fd); close(to_fd); return TRUE;}int DeleteFile(const char* pszFilename){ return remove(pszFilename);}}#endifvoid ToLower( char * pszSrc, size_t len){ unsigned char cb; size_t i; if (NULL == pszSrc) { return; } for (i=0; i<len; i++) { cb = *(unsigned char *)(pszSrc + i); if (cb >='A' && cb<='Z') { *(unsigned char *)(pszSrc + i) = (unsigned char)(cb + 32); } }}/************************************************* Function: LicenseConfigFile Description: LicenseConfigFile的构造函数,用于初始化类的成员变量,读取指定的配置文件。 如果文件读取成功,设置m_bIsOpen为TRUE Calls: LicenseConfigFile::OpenFile Called By: void ECManager::LoadModules() Input: pszFilename - 以NULL结尾的配置文件名 Output: 无 Return: 无 Others: *************************************************/LicenseConfigFile::LicenseConfigFile(const char *pszFilename){ memset(m_pszFilename, 0, 1024); m_pszContent = NULL; m_pszShadow = NULL; m_nSize = 0; m_bIsOpen = FALSE; FILE *fb ,*fp; int result1,result2; size_t fileLen1 ,fileLen2; char* tempFilename = new char [200]; memset(tempFilename, 0, 200); memcpy(tempFilename,pszFilename,strlen(pszFilename) + 1); strcat(tempFilename,"_"); if ((fb = fopen(tempFilename, "rb")) == NULL) { OpenFile(pszFilename); } else {#ifdef AGENT_DEBUG TERMDEBUGMSG(1,"打开设备配置文件 license.ini_ 成功!\n");#endif result1 = fseek(fb, 0L, SEEK_END); if (0 != result1) { fclose(fb); } fileLen1 = (size_t)ftell(fb); /*如果文件长度为1024的倍数,备份文件失败,取原来的配置文件*/ if ((fileLen1 % 1024 ) == 0) { OpenFile(pszFilename); } else { if ((fp = fopen(pszFilename, "rb")) == NULL) { fprintf(stdout,"打开设备配置文件 license.ini 失败!\n"); } result2 = fseek(fp, 0L, SEEK_END); if (0 != result2) { fclose(fp); } fileLen2 = (size_t)ftell(fp); /*如果两个文件的长度绝对值相差小于256个字节,读取备份文件*/ if (abs((fileLen1 - fileLen2)) < 256) { /*用备份文件覆盖原来的配置文件*/ CopyFile(tempFilename,pszFilename,false); fclose(fb); /*删除备份文件*/ DeleteFile(tempFilename); OpenFile(pszFilename); } else { OpenFile(pszFilename); } } } delete []tempFilename;}/************************************************* Function: OpenFile Description: 读取指定的配置文件 Calls: CloseFile();ToLower(); Called By: LicenseConfigFile::LicenseConfigFile Input: pszFilename - 以NULL结尾的配置文件名 Output: 无 Return: 无 Others: *************************************************/void LicenseConfigFile::OpenFile(const char *pszFilename){ FILE *fp; size_t len; int result; /* 释放资源 */ CloseFile(); if (NULL == pszFilename) { return; } if( (fp = fopen(pszFilename, "rb")) == NULL ) { return; } else { fclose(fp); } strcpy(m_pszFilename, pszFilename); SetFileReadWrite(m_pszFilename); fp = fopen(m_pszFilename, "rb"); if (NULL == fp) { return; } result = fseek(fp, 0L, SEEK_END); if (0 != result) { fclose(fp); return; } len = (size_t)ftell(fp); delete[] m_pszContent; delete[] m_pszShadow; m_pszContent = (char *)new char [len+1]; m_pszShadow = (char *)new char [len+1]; if ((NULL == m_pszContent) || (NULL == m_pszShadow)) { fclose(fp); return; } result = fseek(fp, 0L, SEEK_SET); if (0 != result) { fclose(fp); return; } m_nSize = fread(m_pszContent, 1, len, fp); m_pszContent[m_nSize] = '\0'; /* 建立影子内存,里面存放全部是小写的字符串 */ memcpy(m_pszShadow, m_pszContent, m_nSize + 1); ToLower(m_pszShadow, m_nSize + 1); fclose(fp); m_bIsOpen = TRUE; SetFileReadOnly(m_pszFilename);}/************************************************* Function: CloseFile Description: 读取指定的配置文件。 Calls: free() Called By: LicenseConfigFile::~LicenseConfigFile Input: pszFilename - 以NULL结尾的配置文件名 Output: Return: 无 *************************************************/void LicenseConfigFile::CloseFile(){ SetFileReadWrite(m_pszFilename); /* 释放资源 */ if (m_pszContent) { delete [] m_pszContent; m_pszContent = NULL; } if (m_pszShadow) { delete [] m_pszShadow; m_pszShadow = NULL; } m_nSize = 0; m_bIsOpen = FALSE; }/************************************************* Function: LicenseConfigFile::SetFileReadOnly Description: 设置文件为只读属性 Calls: GetStatus() SetStatus() Called By: LicenseConfigFile::SetItemValue() Input: const char * psFilename Output: Return: 成功:TRUE/失败:FALSE *************************************************/unsigned long LicenseConfigFile::SetFileReadOnly(const char * psFilename){#if 0 char pFileName[1024] = { 0 };//File name and path BYTE newAttribute = 0x01; //ReadOnly strcpy(pFileName, psFilename); CFileStatus filestatus; CFile::GetStatus( pFileName, filestatus ); if (filestatus.m_attribute == newAttribute) { return TRUE; } filestatus.m_attribute = newAttribute; CFile::SetStatus( pFileName, filestatus );#endif return TRUE;}/************************************************* Function: LicenseConfigFile::SetFileReadWrite Description: 设置文件为读写属性 Calls: GetStatus() SetStatus() Called By: LicenseConfigFile::SetItemValue() Input: const char * psFilename Output: Return: 成功:TRUE/失败:FALSE *************************************************/unsigned long LicenseConfigFile::SetFileReadWrite(const char * psFilename){#if 0 if ( *psFilename == 0 ) { return FALSE; } char pFileName[1024] = { 0 };//File name and path
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -