You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1873 lines
47 KiB
C++

2 years ago
/*****************************************************************************
*
* Copyright (C) 1999-2001 SCADA Technology Control Co., Ltd. All rights reserved.
*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>йص<EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
*
* m.j.y 2001/12/07
*
*
*
* $Name: $
*
* $Revision: 1.2 $
*
* $Date: 2006/08/04 03:37:33 $
*
* $State: Exp $
*
* $Log: Profile_Hash.cpp,v $
* Revision 1.2 2006/08/04 03:37:33 zhuzhenhua
* no message
*
* Revision 1.1.2.1 2006/07/28 07:54:02 zhuzhenhua
* no message
*
* Revision 1.5 2003/07/14 02:22:38 scada
* ʹ<EFBFBD><EFBFBD>def<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>SCADA_API.
*
* Revision 1.4 2003/01/02 03:14:50 scada
* trim substitution line
*
* Revision 1.3 2002/12/04 07:47:09 scada
* for NT
*
* Revision 1.2 2002/09/24 05:58:34 harold
* take acount __OS_SOLARIS__ where __OS__ occur, set errno to 0 before use it
*
* Revision 1.1.1.1 2002/08/21 07:16:39 harold
* temporarily import
*
* Revision 1.21 2002/06/03 10:06:27 mhorse
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AddNode<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* Revision 1.20 2002/03/20 03:40:21 harold
* no message
*
* Revision 1.1.1.1 2002/03/15 13:43:21 harold
* no message
*
* Revision 1.1.1.1 2002/03/15 08:17:11 harold
* no message
*
* Revision 1.19 2002/03/06 01:27:52 harold
* *** empty log message ***
*
* Revision 1.18 2002/02/25 07:30:21 harold
* no message
*
* Revision 1.17 2002/01/25 09:11:19 harold
* no message
*
* Revision 1.16 2002/01/23 02:38:06 harold
* test_function
*
* Revision 1.15 2002/01/22 08:51:42 harold
* modify2002-01-22-16:46
*
* Revision 1.14 2002/01/21 06:15:49 harold
* <EFBFBD>޸<EFBFBD><EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* Revision 1.13 2002/01/21 05:55:25 mhorse
* <EFBFBD>޸<EFBFBD><EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* Revision 1.11 2002/01/18 12:57:15 harold
* revise errno
*
* Revision 1.10 1997/03/29 12:48:33 harold
* revise bug in read/write/listsec function
*
* Revision 1.9 2002/01/18 01:09:33 harold
* revise bugs in write/close/listsec function
*
* Revision 1.8 2002/01/09 11:37:11 harold
* no message
*
*
* Revision 1.2 2001/12/19 02:19:22 mhorse
* <EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
*
* Revision 1.1.1.1 2001/12/18 06:42:11 mhorse
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ө<EFBFBD><EFBFBD>һ<EFBFBD>ΰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CVS(2001/12/18)
*
*
******************************************************************************/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#ifdef OS_WINDOWS
#include <winsock2.h>
#include <windows.h>
#include <io.h>
#else
//#include <curses.h>
#include <sys/types.h>
//#include <global_errno.h>
// #include <sys/uswitch.h>
#include <errno.h>
#include <string.h>
#include <ctype.h>
2 years ago
#endif
#include "Profile_Hash.h"
#include "confrw_errno.h"
//#include "util.h"
#include "common.h"
#include "basefunc.h"
2 years ago
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
static SProfileHanleInfo g_pHandleIndex[MAX_PROFILEHANDLE_NUM];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>Ƿ񾭹<C7B7><F1BEADB9><EFBFBD>ʼ<EFBFBD><CABC> PGCTRUE-<2D>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
static PGCBOOL g_bHandleInit = PGCFALSE;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD>ͷ<EFBFBD>
#define MARK_pgcchar_NUM 2
static pgcchar gs_szMarkpgcchar[MARK_pgcchar_NUM] = {';', '#'};
//<2F>н<EFBFBD>β<EFBFBD>ַ<EFBFBD>Ϊ\n,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r
//#define LINE_EXCLUDE_0A
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : UpperCase
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : <20><>СдתΪ<D7AA><CEAA>д
// <20><><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5> : pgcchar -- ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : cCh -- Դ<>ַ<EFBFBD>
pgcchar* UpperCase(pgcchar *szSource)
{
pgcchar* pcTemp = szSource, *pcFirst = szSource;
if (pcTemp == NULL)
return NULL;
while (*pcTemp != '\0')
{
if ((*pcTemp >= 'a') && (*pcTemp <= 'z'))
*pcTemp = (pgcchar)(*pcTemp - ('a' - 'A')) ;
pcTemp++;
}
return pcFirst;
}
/*
* <EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
// <09><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>, <20><>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static u32 fnhash_index_of(const void * pKey, u32 hash_size);
// <09><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>
static void * fnhash_key_of(const SItemInCache * pindex);
// <09>ȽϹؼ<CFB9><D8BC><EFBFBD>
static int fnhash_compare(const void * pKey1, const void * pKey2);
/*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ϊ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD>.
*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* pindex -- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* count -- pindex<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD>, pindex[0] -- pindex[count - 1]Ϊ
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* pphash_of_index -- <EFBFBD><EFBFBD>pindex<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ʱ, ʹ<EFBFBD>øù<EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* SUCCESS -- <EFBFBD>ɹ<EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> -- ʧ<EFBFBD>ܴ<EFBFBD><EFBFBD><EFBFBD>
*
*/
#define INDEX_HASH_TABLE_SIZE_FACTOR 20
pgc32 profile_build_hash_index ( SItemInCache * pindex,
pgc32 count,
TChainHash<SItemInCache> ** pphash_of_index )
{
pgc32 i = 0;
TChainHash<SItemInCache> * phash_table = NULL;
phash_table = new TChainHash<SItemInCache>(count * INDEX_HASH_TABLE_SIZE_FACTOR,
fnhash_index_of,
fnhash_key_of,
fnhash_compare,
NULL/*fnhash_create_item*/,
NULL/*fnhash_free_item*/,
NULL/*fnhash_copy_item*/,
NULL/*fnhash_alloc*/,
NULL/*fnhash_dealloc*/);
if (phash_table == NULL)
return ERROR_MEMORY_ALLOC;
for(i = 0; i < count; i++)
phash_table->insertItem(pindex + i);
*pphash_of_index = phash_table;
return SUCCESS;
}
/*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* pindex_base -- <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* phash_of_index -- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD>ϣ<EFBFBD><EFBFBD>
* szSecName -- <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>
* szItemName - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>
*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -- <EFBFBD>ɹ<EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD>ҵ<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* -1 -- ʧ<EFBFBD><EFBFBD>
*/
pgc32 profile_search_sequence ( SItemInCache **pindex_base,
TChainHash<SItemInCache> *phash_of_index,
const pgcchar *szSecName,
const pgcchar *szItemName)
{
SItemInCache *p = NULL, index;
memset(&index, 0, sizeof(SItemInCache));
if (szSecName != NULL)
{
//<2F><><EFBFBD><EFBFBD>ִ<EFBFBD>д<EFBFBD>Сдת<D0B4><D7AA>
#ifdef OS_WINDOWS
lstrcpyn((LPWSTR)index.szSecName, (LPCWSTR)szSecName, MAX_CHAR_LINE);
2 years ago
// strupr(index.szSecName);
#else
strncpy(index.szSecName, szSecName, MAX_CHAR_LINE - 1);
// UpperCase(index.szSecName);
#endif
}
if (szItemName != NULL)
{
#ifdef OS_WINDOWS
lstrcpyn((LPWSTR)index.szItemName, (LPCWSTR)szItemName, MAX_CHAR_LINE);
2 years ago
// strupr(index.szItemName);
#else
strncpy(index.szItemName, szItemName, MAX_CHAR_LINE - 1);
// UpperCase(index.szItemName);
#endif
}
p = phash_of_index->searchItem((void *)&index);
if(NULL == p)
return -1;
*pindex_base = p;
return 0;
}
/*
* <EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
// <09><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>, <20><>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static u32 fnhash_index_of(const void * pKey, u32 hash_size)
{
long index = 0;
u_char *pbString = NULL;
int iX = 0, iY = 0, i = 0;
SItemInCache * pindex = (SItemInCache *)pKey, sindex;
memcpy(&sindex, pindex, sizeof(SItemInCache));
//<2F><><EFBFBD><EFBFBD>ִ<EFBFBD>д<EFBFBD>Сдת<D0B4><D7AA>
#ifndef OS_WINDOWS
2 years ago
strupr(sindex.szSecName);
strupr(sindex.szItemName);
#else
UpperCase(sindex.szSecName);
UpperCase(sindex.szItemName);
#endif
//<2F><>ϣת<CFA3><D7AA>
pbString = (u_char*)sindex.szSecName;
for (i = 0; i < MAX_CHAR_LINE; i++)
{
iX = iX + pbString[i];
}
iX = iX % MAX_SEC_NUM;
pbString = (u_char*)sindex.szItemName;
for ( i = 0; i < MAX_CHAR_LINE; i++)
{
iY = iY + pbString[i];
}
iY = iY % MAX_ITEM_NUM;
index = iX * MAX_ITEM_NUM + iY;
return (u32)(index % hash_size);
}
// <09><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>
static void * fnhash_key_of(const SItemInCache * pindex)
{
return (void *)(pindex);
}
// <09>ȽϹؼ<CFB9><D8BC><EFBFBD>
static int fnhash_compare(const void * pKey1, const void * pKey2)
{
SItemInCache * pindex1 = (SItemInCache *)pKey1;
SItemInCache * pindex2 = (SItemInCache *)pKey2;
if (pKey1 == NULL)
return 1;
//#ifdef OS_WINDOWS
if (pKey2 == NULL)
{
if (_stricmp(pindex1->szSecName, pindex2->szSecName) == 0)
return 0;
else
return 1;
}
else
{
if ((_stricmp(pindex1->szSecName, pindex2->szSecName) == 0)
&& (_stricmp(pindex1->szItemName, pindex2->szItemName) == 0))
return 0;
else
return 1;
}
/*#else
if (pKey2 == NULL)
{
if (strcasecmp(pindex1->szSecName, pindex2->szSecName) == 0)
return 0;
else
return 1;
}
else
{
if ((strcasecmp(pindex1->szSecName, pindex2->szSecName) == 0)
&& (strcasecmp(pindex1->szItemName, pindex2->szItemName) == 0))
return 0;
else
return 1;
}
#endif*/
}
//<2F>ж<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ע<EFBFBD><D7A2>
PGCBOOL LineIsMark(pgcchar *szLine)
{
for (pgc32 i = 0; i < MARK_pgcchar_NUM; i++)
if (*szLine == gs_szMarkpgcchar[i])
return PGCTRUE;
return PGCFALSE;
}
//Ѱ<>Ҷ<EFBFBD>β
pgcchar* FindSecTail(pgcchar *szString)
{
pgcchar *szStart = NULL, *szTemp = NULL;
if ((szStart = strchr(szString, '\n')) == NULL)
{
return NULL;
}
while (szStart != NULL)
{
szStart = strchr(szStart, '[');
if ((szStart != NULL) && (*(szStart - 1) == '\n'))
break;
if (szStart != NULL) szStart++;
}
if (szStart != NULL)
{
szTemp = szStart;
while ((*szTemp != '\n') && (*szTemp != '\0'))
{
if (*szTemp == ']')
return szStart;
szTemp ++;
}
}
return NULL;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
PGCBOOL DigSecName(const pgcchar *szString, pgcchar *szRevBuffer, pgc32 iBufferLength)
{
pgcchar *szStart = NULL, *szTemp = NULL;
PGCBOOL bSecNameExist = PGCFALSE;
pgc32 iLength = iBufferLength - 1;
if ((szStart = (pgcchar *)strchr((const char*)szString, '[')) != NULL)
{
szTemp = szStart;
while ((*szTemp != '\n') && (*szTemp != '\0'))
{
if (*szTemp == ']')
{
bSecNameExist = PGCTRUE;
break;
}
szTemp ++;
}
if (bSecNameExist)
{
iLength = (pgc32)(szTemp - szStart) - 1;
if (iLength >= iBufferLength)
iLength = iBufferLength - 1;
for (pgc32 i = 0; i < iLength; i++)
szRevBuffer[i] = *(szStart + 1 + i);
szRevBuffer[iLength] = '\0';
/*
#ifndef __unix__
strupr(szRevBuffer);
#else
UpperCase(szRevBuffer);
#endif
*/
return PGCTRUE;
}
}
return PGCFALSE;
}
//<2F><>ȡ<EFBFBD><C8A1>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ
PGCBOOL DigItemContent( pgcchar *szString, pgcchar *szItemName, pgcchar *szItemVal, pgc32 iBufferLength)
{
pgcchar *pcBeval = NULL, *pcTemp = NULL, szTemp[MAX_CHAR_LINE];
pgc32 iCount = 0, i = 0;
if ((pcBeval = strchr(szString, '=')) == NULL)
return PGCFALSE;
//<2F><>ȡ<EFBFBD><C8A1>Ŀ<EFBFBD><C4BF>
pcTemp = szString;
while ((pcTemp < pcBeval) && (iCount < (MAX_CHAR_LINE - 1)))
{
szTemp[iCount] = *pcTemp;
pcTemp++;
iCount++;
}
szTemp[iCount] = '\0';
//ɾ<><C9BE>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
for ( i = 0; i < MAX_CHAR_LINE; i++)
{
if (szTemp[i] != ' ')
{
for (pgc32 j = i; j < MAX_CHAR_LINE; j++)
{
szTemp[j - i] = szTemp[j];
}// end for
break;
}// end if
}// end for
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
for (i = iCount - 1; i >= 0; i--)
{
if (szTemp[i] != ' ')
break;
szTemp[i] = '\0';
}// end for
/*#ifndef __unix__
strupr(szTemp);
#else
UpperCase(szTemp);
#endif*/
strcpy(szItemName, szTemp);
//<2F><>ȡ<EFBFBD><C8A1>Ŀֵ
memset(szTemp, 0, MAX_CHAR_LINE);
#ifdef OS_WINDOWS
lstrcpyn((LPWSTR)szTemp, (LPCWSTR)pcBeval + 1, MAX_CHAR_LINE);
2 years ago
#else
strncpy(szTemp ,pcBeval + 1, MAX_CHAR_LINE - 1);
#endif
//ɾ<><C9BE>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
for (i = 0; i < MAX_CHAR_LINE; i++)
{
if (szTemp[i] != ' ')
{
for (pgc32 j = i; j < MAX_CHAR_LINE; j++)
{
szTemp[j - i] = szTemp[j];
}// end for
break;
}// end if
}// end for
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
for ( i = (pgc32)strlen(szTemp) - 1 ; i >= 0; i--)
{
if (szTemp[i] != ' ')
break;
szTemp[i] = '\0';
}// end for
strcpy(szItemVal, szTemp);
return PGCTRUE;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : InsertNode
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : <20><>ָ<EFBFBD><D6B8><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
// <20><><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5> : PGCBOOL --
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : psHead --
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : iPos --
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : psCacheEntry --
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : iSecPos --
PGCBOOL InsertNode(SItemSequence * &psHead, pgc32 iPos, SItemInCache *psCacheEntry, pgc32 iSecPos)
{
SItemSequence *psTemp = NULL, *psNewNode = NULL, *psPrior = NULL;
if ((psHead == NULL) || (psCacheEntry == NULL))
return PGCFALSE;
psNewNode = new SItemSequence[1];
psNewNode->iPos = iPos;
psNewNode->NextNode = NULL;
psTemp = psHead;
while (psTemp != NULL)
{
if (psTemp->iPos == iSecPos)
break;
psTemp = psTemp->NextNode;
}
while (psTemp != NULL)
{
psPrior = psTemp;
psTemp = psTemp->NextNode;
if ((psTemp == NULL) || psCacheEntry[psTemp->iPos].bIsSecName)
{
psPrior->NextNode = psNewNode;
psNewNode->NextNode = psTemp;
return PGCTRUE;
}
}
delete []psNewNode;
return PGCFALSE;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : DisableSec
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : ʹָ<CAB9><D6B8><EFBFBD>Ķμ<C4B6><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ч
// <20><><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5> : PGCBOOL --
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : psHead --
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : iSecPos --
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : psCacheEntry --
PGCBOOL DisableSec(SItemSequence * &psHead, pgc32 iSecPos, SItemInCache *psCacheEntry)
{
SItemSequence *psTemp = NULL;
if (psHead == NULL)
return PGCFALSE;
psTemp = psHead;
while (psTemp != NULL)
{
if (psTemp->iPos == iSecPos)
break;
psTemp = psTemp->NextNode;
}
while (psTemp != NULL)
{
psCacheEntry[psTemp->iPos].valid = PGCFALSE;
psTemp = psTemp->NextNode;
if ((psTemp == NULL) || (psCacheEntry[psTemp->iPos].bIsSecName))
{
return PGCTRUE;
}
}
return PGCFALSE;
}
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ㵽˳<E3B5BD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>
PGCBOOL AddNode(SItemSequence * &psHead, SItemSequence * &pCurSeq, pgc32 iPos)
{
SItemSequence *psNewNode = NULL;
psNewNode = new SItemSequence[1];
psNewNode->iPos = iPos;
psNewNode->NextNode = NULL;
if (psHead == NULL)
{
psHead = psNewNode;
pCurSeq = psHead;
}
else
{
if (pCurSeq)
{
pCurSeq->NextNode = psNewNode;
pCurSeq = psNewNode;
}
}
return PGCTRUE;
}
void ReleaseProfileCache(HPROFILE hProfile)
{
FILE *fstream = NULL;
TChainHash<SItemInCache> *pHashTable = NULL;
SItemSequence *pSequence = NULL, *psPrior = NULL;
SItemInCache *psCacheEntry = NULL;
SMemoChain *psMemo = NULL, *psMemoPrior = NULL;
pgc32 iCurItemCount = 0;
fstream = g_pHandleIndex[hProfile].fstream ;
if (fstream != NULL)
fclose(fstream);
pHashTable = g_pHandleIndex[hProfile].pHashTable;
if (pHashTable != NULL)
delete pHashTable;
pSequence = g_pHandleIndex[hProfile].pSequence;
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>нڵ<D0BD>
while (pSequence != NULL)
{
psPrior = pSequence;
pSequence = pSequence->NextNode;
delete []psPrior;
}
iCurItemCount = g_pHandleIndex[hProfile].CurUseItems;
psCacheEntry = g_pHandleIndex[hProfile].pCacheEntry;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ע<EFBFBD>ͽڵ<CDBD>
if (psCacheEntry != NULL)
{
for (pgc32 i = 0; i < iCurItemCount; i++)
{
psMemo = psCacheEntry[i].memo;
while (psMemo != NULL)
{
psMemoPrior = psMemo;
psMemo = psMemo->NextNode;
delete []psMemoPrior->szMemo;
delete []psMemoPrior;
}
}
free(psCacheEntry);
}
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
pgcu32 AdjustCache(HPROFILE hCacher, pgc32 iNewItem)
{
pgc32 iOldSize = g_pHandleIndex[hCacher].CurItemCount, iNewSize = 0;
pgc32 iOldUse = g_pHandleIndex[hCacher].CurUseItems;
SItemInCache *pCacheEntry = NULL;
if ((g_pHandleIndex[hCacher].CurUseItems + iNewItem ) >= iOldSize)
{
iNewSize = iOldSize + RESIZE_ITEM_NUM;
pCacheEntry = (SItemInCache*)malloc(iNewSize * sizeof(SItemInCache));
if (pCacheEntry == NULL)
return ERROR_MEMORY_ALLOC;
memset(pCacheEntry, 0, iNewSize * sizeof(SItemInCache));
memmove(pCacheEntry, g_pHandleIndex[hCacher].pCacheEntry, iOldSize * sizeof(SItemInCache));
free(g_pHandleIndex[hCacher].pCacheEntry);
g_pHandleIndex[hCacher].CurItemCount = iNewSize;
g_pHandleIndex[hCacher].pCacheEntry = pCacheEntry;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_pHandleIndex[hCacher].pHashTable->detachItems();
for (pgc32 i = 0; i < iOldUse; i++)
g_pHandleIndex[hCacher].pHashTable->insertItem(pCacheEntry + i);
return SUCCESS;
}
return ERROR_FAIL;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : get_file_lastMTime
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>һ<EFBFBD>α<EFBFBD><CEB1>޸ĵ<DEB8>ʱ<EFBFBD><CAB1>
// <20><><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5> : void --
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : pszfname --
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : pt --
pgc32 get_file_lastMTime(char * pszfname, timeval *pt)
{
int ret = 0;
struct stat buf;
memset((void *)&buf, 0, sizeof(buf));
ret = stat(pszfname, &buf);
if(-1 == ret)
return ERROR_FAIL;
pt->tv_sec = buf.st_mtime;
pt->tv_usec = 0;
return SUCCESS;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD>
pgc32 ReWriteProfile(HPROFILE hProfile)
{
pgc32 iSize = 0;
pgcchar *pcFileBuffer = NULL, *pcTemp = NULL;
pgcchar *pcHead = NULL;
PGCBOOL bSecExist = PGCFALSE;
SItemSequence * psSeq = g_pHandleIndex[hProfile].pSequence ;
SItemInCache *psCacheEntry = g_pHandleIndex[hProfile].pCacheEntry, *psTemp = NULL;
SMemoChain *psMemo = NULL;
FILE *stream = /*g_pHandleIndex[hProfile].fstream*/0;
iSize = (g_pHandleIndex[hProfile].CurLines + 2) * (MAX_CHAR_LINE + 2);
if (( pcHead = (pgcchar*)malloc(iSize)) != NULL)
{
pcFileBuffer = pcHead;
memset(pcFileBuffer, 0, iSize);
while (psSeq != NULL)
{
psTemp = psCacheEntry + psSeq->iPos;
if (psTemp->valid)
{
//<2F><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
psMemo = psTemp->memo;
while (psMemo != NULL)
{
//дһ<D0B4><D2BB>ע<EFBFBD><D7A2>
pcTemp = psMemo->szMemo;
while (*pcTemp != '\0')
{
*pcFileBuffer = *pcTemp;
pcFileBuffer++;
pcTemp++;
}
#ifdef LINE_EXCLUDE_0A
*pcFileBuffer = '\n';
pcFileBuffer += 1;
#else
*pcFileBuffer = '\r';
*(pcFileBuffer + 1) = '\n';
pcFileBuffer += 2;
#endif
psMemo = psMemo->NextNode;
}
//<2F>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>
if (psTemp->bIsSecName)
{
if (bSecExist)
{
#ifdef LINE_EXCLUDE_0A
*pcFileBuffer = '\n';
pcFileBuffer += 1;
#else
*pcFileBuffer = '\r';
*(pcFileBuffer + 1) = '\n';
pcFileBuffer += 2;
#endif
}
else
bSecExist = PGCTRUE;
*pcFileBuffer = '[';
pcFileBuffer++;
pcTemp = psTemp->szSecName;
while (*pcTemp != '\0')
{
*pcFileBuffer = *pcTemp;
pcFileBuffer++;
pcTemp++;
}
*pcFileBuffer = ']';
#ifdef LINE_EXCLUDE_0A
*(pcFileBuffer + 1) = '\n';
pcFileBuffer += 2;
#else
*(pcFileBuffer + 1) = '\r';
*(pcFileBuffer + 2) = '\n';
pcFileBuffer += 3;
#endif
}
else
{
pcTemp = psTemp->szItemName;
while (*pcTemp != '\0')
{
*pcFileBuffer = *pcTemp;
pcFileBuffer++;
pcTemp++;
}
*pcFileBuffer = '=';
pcFileBuffer++;
pcTemp = psTemp->szItemVal;
while (*pcTemp != '\0')
{
*pcFileBuffer = *pcTemp;
pcFileBuffer++;
pcTemp++;
}
#ifdef LINE_EXCLUDE_0A
*pcFileBuffer = '\n';
pcFileBuffer += 1;
#else
*pcFileBuffer = '\r';
*(pcFileBuffer + 1) = '\n';
pcFileBuffer += 2;
#endif
}// end else
}// end if "valid"
psSeq = psSeq->NextNode;
}// end while
//2002/03/05 <20><>С<EFBFBD><D0A1>++++++++++++++++++++++++++++++++++++++++++++
#if 0
pgcu32 numwritten = (pgcu32)pcFileBuffer - (pgcu32)pcHead ;
#endif
pgcu32 numwritten = (pgcu32)(pcFileBuffer - pcHead) ;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#ifdef OS_WINDOWS
//windows<77>´<EFBFBD><C2B4><EFBFBD><EFBFBD>ļ<EFBFBD>
/*if ((stream = fopen(g_pHandleIndex[hProfile].szPathName, "w+b")) == NULL)
{
free(pcHead);
return ERROR_FOPEN;
}*/
#else
//unix<69>´<EFBFBD><C2B4><EFBFBD><EFBFBD>ļ<EFBFBD>
/*PGCBOOL bOpenOK = PGCFALSE;
do
{
errno = 0;
if ((stream = fopen(g_pHandleIndex[hProfile].szPathName, "w+b")) != NULL)
{
bOpenOK = PGCTRUE;
break;
}
}
while (errno == EINTR);
if (!bOpenOK)
{
free(pcHead);
return ERROR_FOPEN;
}*/
//ghConfig = DSOpenFile("g_pHandleIndex[hProfile].szPathName");
#endif
fseek(stream, 0, SEEK_SET);
//<2F><><EFBFBD><EFBFBD>fwrite<74><65>д<EFBFBD><D0B4><EFBFBD>ݵ<EFBFBD><DDB5>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬴Ӷ<F3A3ACB4>ʹ<EFBFBD>ļ<EFBFBD><C4BC>޷<EFBFBD><DEB7><EFBFBD>λ<EFBFBD><CEBB>β
pgc32 numwritted = (pgc32)fwrite(pcHead, sizeof( pgcchar ), numwritten , stream );
free(pcHead);
fclose(stream);
//<2F><>¼<EFBFBD><C2BC><EFBFBD>޸<EFBFBD><DEB8>ļ<EFBFBD><C4BC><EFBFBD>ʱ<EFBFBD><CAB1>
get_file_lastMTime(g_pHandleIndex[hProfile].szPathName, &g_pHandleIndex[hProfile].tLastModify);
if (numwritted != numwritten)
{
return ERROR_FWRITE;
}
return SUCCESS;
}// end if
return ERROR_FAIL;
}
int timeval_compare(timeval * ptv1, timeval * ptv2)
{
int del_sec = ptv1->tv_sec - ptv2->tv_sec;
int del_usec = ptv1->tv_usec - ptv2->tv_usec;
return (del_sec != 0) ? del_sec : del_usec;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : ReCreateCache
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : <20><><EFBFBD>е<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ô˺<C3B4><CBBA><EFBFBD><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5> : void --
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : hProfile --
void ReCreateCache(HPROFILE hProfile)
{
timeval tLastModify, *ptRecModify = NULL;
pgcchar *szProfileName = g_pHandleIndex[hProfile].szPathName;
ptRecModify = &g_pHandleIndex[hProfile].tLastModify;
if (szProfileName == 0)
return;
if (get_file_lastMTime(szProfileName, &tLastModify) == SUCCESS)
{
if (timeval_compare(&tLastModify, ptRecModify) > 0)
{
ReleaseProfileCache(hProfile);
ProcessCreateCache(hProfile);
}
}
return;
}
pgc32 ProcessCreateCache(HPROFILE hProfile)
{
pgcchar *pcFileBuffer = NULL, *pcTemp = NULL, *pcStart = NULL, *pcEnd = NULL;
pgcchar *pcNextLine = NULL, *pcTemp1 = NULL ;
pgcchar szSecName[MAX_CHAR_LINE], CurItemName[MAX_CHAR_LINE], CurItemVal[MAX_CHAR_LINE];
SItemInCache *psTemp = NULL;
SMemoChain *psMemoTep = NULL, *psMemo = NULL;
TChainHash<SItemInCache> * phash_table = NULL;
PGCBOOL bSecNameExist = PGCFALSE;
FILE *fstream = NULL;
long lFileLength = 0;
SItemInCache *psCacheEntry = NULL, *psCacheTep = NULL;
pgc32 iCount = 0, iPos = 0, iCurSec = 0, iCurItem = 0, iCurItemCount = 0;
//iCurLineType:<3A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>1<EFBFBD><31>ע<EFBFBD><D7A2><EFBFBD>У<EFBFBD> 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>3<EFBFBD><33><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ݣ<EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pgc32 iCurLineType = 0, iLines = 0, i = 0;
pgcchar szProfileName[MAX_PATH_NUM];
memset(szProfileName, 0, MAX_PATH_NUM);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ȫ·<C8AB><C2B7><EFBFBD><EFBFBD>
#ifdef OS_WINDOWS
2 years ago
lstrcpyn((LPWSTR)szProfileName, (LPWSTR)g_pHandleIndex[hProfile].szPathName, MAX_PATH_NUM);
#else
2 years ago
strncpy(szProfileName, g_pHandleIndex[hProfile].szPathName, MAX_PATH_NUM - 1);
#endif
2 years ago
memset(&g_pHandleIndex[hProfile], 0, sizeof(SProfileHanleInfo));
//#ifdef OS_WINDOWS
//windows<77>´<EFBFBD><C2B4><EFBFBD><EFBFBD>ļ<EFBFBD>
if ((fstream = fopen(szProfileName, "r+b")) == NULL)
{
return ERROR_FOPEN;
}
/*#else
//unix<69>´<EFBFBD><C2B4><EFBFBD><EFBFBD>ļ<EFBFBD>
PGCBOOL bOpenOK = PGCFALSE;
do
{
errno = 0;
if ((fstream = fopen(szProfileName, "r+b")) != NULL)
{
bOpenOK = PGCTRUE;
break;
}
}
while (errno == EINTR);
if (!bOpenOK)
return ERROR_FOPEN;
#endif*/
if (fseek(fstream, 0, SEEK_END) != 0)
{
fclose(fstream);
return 0;
}
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
lFileLength = ftell(fstream);
pcTemp = new pgcchar[lFileLength + 1];
if (pcTemp == NULL)
{
fclose(fstream);
return 0;
}
memset(pcTemp, 0, lFileLength + 1);
if (fseek(fstream, 0, SEEK_SET) != 0)
{
fclose(fstream);
return 0;
}
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EBBBBA>
if ((iCount = (pgc32)fread(pcTemp, sizeof( pgcchar ), lFileLength, fstream)) != lFileLength)
{
fclose(fstream);
return ERROR_FREAD;
}
//<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5>ÿһ<C3BF><D2BB>ǰ<EFBFBD><C7B0><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>ո<EFBFBD><D5B8><EFBFBD>
pcStart = pcTemp;
pcEnd = pcTemp + iCount;
while ((pcStart != NULL) && (pcStart < pcEnd))
{
if (*pcStart == ' ')
{
*pcStart = 0;
pcStart ++;
}
else
{
if (*pcStart == '\n')
pcStart ++;
else
{
if ((pcStart = strchr(pcStart, '\n')) == NULL) break;
pcStart ++;
}
}
}// end while
//<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5>ÿһ<C3BF>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>־"\r\n"<22>е<EFBFBD>"\r"<22><>־,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"\n"<22><>־<EFBFBD><D6BE>
pcStart = pcTemp;
while ((pcStart != NULL) && (pcStart < pcEnd))
{
if ((*pcStart == '\r') && (*(pcStart + 1) == '\n'))
{
*pcStart = 0;
pcStart +=2;
}
else
pcStart++;
}// end while
//ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pcStart = pcTemp;
while ((pcStart != NULL) && (pcStart < pcEnd))
{
if (*pcStart == '\n')
{
iLines++;
}
pcStart++;
}// end while
iLines++;
g_pHandleIndex[hProfile].CurLines = iLines;
//<2F>ؽ<EFBFBD><D8BD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
pcFileBuffer = new pgcchar[iCount + 1];
memset(pcFileBuffer, 0, iCount + 1);
for ( i = 0; i < iCount; i++)
{
if (pcTemp[i] != 0)
{
pcFileBuffer[iPos] = pcTemp[i];
iPos++;
}
}
delete []pcTemp;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEBBBA>
psCacheEntry = (SItemInCache *)malloc(INITCACHE_ITEM_NUM * sizeof(SItemInCache));
if (psCacheEntry == NULL)
{
if (pcFileBuffer != NULL)
delete []pcFileBuffer;
fclose(fstream);
return ERROR_MEMORY_ALLOC;
}
memset(psCacheEntry, 0, INITCACHE_ITEM_NUM * sizeof(SItemInCache));
iCurItemCount = INITCACHE_ITEM_NUM;
g_pHandleIndex[hProfile].fstream = fstream;
g_pHandleIndex[hProfile].pHashTable = NULL;
g_pHandleIndex[hProfile].pSequence = NULL;
g_pHandleIndex[hProfile].pCurSeq = NULL;
g_pHandleIndex[hProfile].CurItemCount = iCurItemCount;
g_pHandleIndex[hProfile].pCacheEntry = psCacheEntry;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
pcStart = pcFileBuffer;
pcEnd = NULL;
while ((pcStart != NULL) && (pcStart < (pcFileBuffer + iPos)))
{
//Ѱ<>Ҷ<EFBFBD>β
pcEnd = FindSecTail(pcStart + 1);
if (pcEnd != NULL)
*(pcEnd - 1) = '\0';
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (pcStart != NULL)
{
//ȷ<><C8B7><EFBFBD><EFBFBD>һ<EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB>
if ((pcNextLine = strchr(pcStart, '\n')) != NULL)
{
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if (pcStart == pcNextLine)
iCurLineType = 4;
*pcNextLine = '\0';
pcNextLine++;
}
if (iCurLineType != 4)
{
//<2F><><EFBFBD>鵱ǰ<E9B5B1><C7B0><EFBFBD>Ƿ<EFBFBD>Ϊע<CEAA><D7A2><EFBFBD><EFBFBD>
if (LineIsMark(pcStart))
{
iCurLineType = 1;
}
else
{
pcTemp = strchr(pcStart, '[');
pcTemp1 = strchr(pcStart, ']');
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
if ( pcTemp && pcTemp1 && (pcTemp1 > pcTemp))
{
DigSecName(pcStart, szSecName, MAX_CHAR_LINE);
iCurLineType = 2;
}
else
{
pcTemp = strchr(pcStart, '=');
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ
if (pcTemp != NULL)
{
DigItemContent(pcStart, CurItemName, CurItemVal, MAX_CHAR_LINE);
iCurLineType = 3;
}
else
iCurLineType = 0;
}
}// end else
}
switch (iCurLineType)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case 1:
case 4:
//<2F><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
psMemoTep = psMemo;
if (psMemoTep != NULL)
{
while (psMemoTep->NextNode != NULL)
{
psMemoTep = psMemoTep->NextNode;
}// end while
psMemoTep->NextNode = new SMemoChain[1];
if (iCurLineType == 1)
{
psMemoTep->NextNode->szMemo = new pgcchar[strlen(pcStart) + 1];
strcpy(psMemoTep->NextNode->szMemo, pcStart);
}
else if (iCurLineType == 4)
{
#ifdef LINE_EXCLUDE_0A
psMemoTep->NextNode->szMemo = new pgcchar[2];
psMemoTep->NextNode->szMemo[0] = '\0';
psMemoTep->NextNode->szMemo[1] = '\0';
#else
psMemoTep->NextNode->szMemo = new pgcchar[3];
psMemoTep->NextNode->szMemo[0] = '\0';
psMemoTep->NextNode->szMemo[1] = '\n';
psMemoTep->NextNode->szMemo[2] = '\0';
#endif
}
psMemoTep->NextNode->NextNode = NULL;
}// end if
else
{
psMemo = new SMemoChain[1];
if (iCurLineType == 1)
{
psMemo->szMemo = new pgcchar[strlen(pcStart) + 1];
strcpy(psMemo->szMemo, pcStart);
}
else if (iCurLineType == 4)
{
#ifdef LINE_EXCLUDE_0A
psMemo->szMemo = new pgcchar[2];
psMemo->szMemo[0] = '\0';
psMemo->szMemo[1] = '\0';
#else
psMemo->szMemo = new pgcchar[3];
psMemo->szMemo[0] = '\0';
psMemo->szMemo[1] = '\n';
psMemo->szMemo[2] = '\0';
#endif
}
psMemo->NextNode = NULL;
}// end else
break;
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD>
case 2:
psTemp = &psCacheEntry[iCurItem];
strcpy(psTemp->szSecName, szSecName);
psTemp->valid = PGCTRUE;
psTemp->bIsSecName = PGCTRUE;
psTemp->memo = psMemo;
AddNode(g_pHandleIndex[hProfile].pSequence, g_pHandleIndex[hProfile].pCurSeq, iCurItem);
bSecNameExist = PGCTRUE;
iCurItem ++;
psMemo = NULL;
break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ
case 3:
if (bSecNameExist)
{
psTemp = &psCacheEntry[iCurItem];
strcpy(psTemp->szSecName, szSecName);
strcpy(psTemp->szItemName, CurItemName);
strcpy(psTemp->szItemVal, CurItemVal);
psTemp->valid = PGCTRUE;
psTemp->bIsSecName = PGCFALSE;
psTemp->memo = psMemo;
AddNode(g_pHandleIndex[hProfile].pSequence, g_pHandleIndex[hProfile].pCurSeq, iCurItem);
iCurItem ++;
psMemo = NULL;
}//end if
break;
//default:
}// end switch
iCurLineType = 0;
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD>ȵĻ<C8B5><C4BB><EFBFBD><EFBFBD><EFBFBD>̫С<CCAB><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (iCurItem >= iCurItemCount)
{
psCacheTep = (SItemInCache*)malloc((iCurItemCount + RESIZE_ITEM_NUM) * sizeof(SItemInCache));
if (psCacheTep == NULL)
{
ReleaseProfileCache(hProfile);
return ERROR_MEMORY_ALLOC;
}
memset(psCacheTep, 0, (iCurItemCount + RESIZE_ITEM_NUM) * sizeof(SItemInCache));
memmove(psCacheTep, psCacheEntry, sizeof(SItemInCache) * iCurItemCount);
free(psCacheEntry);
psCacheEntry = psCacheTep;
iCurItemCount = iCurItemCount + RESIZE_ITEM_NUM;
g_pHandleIndex[hProfile].CurItemCount = iCurItemCount;
g_pHandleIndex[hProfile].pCacheEntry = psCacheEntry;
}// end if
pcStart = pcNextLine;
}// end while
bSecNameExist = PGCFALSE;
pcStart = pcEnd;
}// end while
if (pcFileBuffer != NULL)
delete []pcFileBuffer;
pgc32 iRev = -1;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3>
iRev = profile_build_hash_index(psCacheEntry, iCurItem , &phash_table);
if (iRev != SUCCESS)
{
ReleaseProfileCache(hProfile);
return ERROR_CONF_CREATEHASH ;
}
g_pHandleIndex[hProfile].pHashTable = phash_table;
g_pHandleIndex[hProfile].CurUseItems = iCurItem ;
g_pHandleIndex[hProfile].CurSecNum = iCurSec;
fstream = g_pHandleIndex[hProfile].fstream;
g_pHandleIndex[hProfile].fstream = 0;
fclose(fstream);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ȫ·<C8AB><C2B7><EFBFBD><EFBFBD>
#ifdef OS_WINDOWS
lstrcpyn((LPWSTR)g_pHandleIndex[hProfile].szPathName, (LPCWSTR)szProfileName, MAX_PATH_NUM);
2 years ago
#else
strncpy(g_pHandleIndex[hProfile].szPathName, szProfileName, MAX_PATH_NUM - 1);
#endif
//<2F><>¼<EFBFBD><C2BC><EFBFBD>޸<EFBFBD><DEB8>ļ<EFBFBD><C4BC><EFBFBD>ʱ<EFBFBD><CAB1>
get_file_lastMTime(szProfileName, &g_pHandleIndex[hProfile].tLastModify);
return SUCCESS;
}
//<2F><><EFBFBD><EFBFBD>ΪӦ<CEAA>ýӿ<C3BD>
//-----------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : create_profile_cache
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5> : HPROFILE -- <20>ɹ<EFBFBD><C9B9>򷵻<EFBFBD>SUCCESS,ʧ<><CAA7><EFBFBD>򷵻ؾ<F2B7B5BB><D8BE><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʧ<EFBFBD>ܵĴ<DCB5><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>ֵ ˵<><CBB5>
// SUCCESS <09>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
// ERROR_CONF_NOHANDLE <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>û<EFBFBD>п<EFBFBD><D0BF>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
// ERROR_FOPEN <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><CAA7>
// ERROR_FREAD <20><><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><CAA7>
// ERROR_CONF_CREATEHASH <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3>ʧ<EFBFBD><CAA7>
// ERROR_MEMORY_ALLOC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ڴ<EFBFBD>ʧ<EFBFBD><CAA7>
// ERROR_CONF_NULL_HANDEPTR <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>յľ<D5B5><C4BE><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : szProfileName --[in] <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ȫ·<C8AB><C2B7><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : phfile --[out]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3><C9B9><EFBFBD><EFBFBD>򷵻<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int create_profile_cache(pgcchar *szProfileName, int *phfile)
{
HPROFILE hCurCacher = 0;
if (szProfileName == NULL)
return ERROR_FOPEN ;
if (phfile == NULL)
return ERROR_CONF_NULL_HANDEPTR;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ񾭹<C7B7><F1BEADB9><EFBFBD>ʼ<EFBFBD><CABC>
if (!g_bHandleInit)
{
memset(g_pHandleIndex, 0, MAX_PROFILEHANDLE_NUM * sizeof(SProfileHanleInfo));
g_bHandleInit = PGCTRUE;
}
//Ϊ<><CEAA>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ѱ<EFBFBD><D1B0>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD>
for (int i = 1; i < MAX_PROFILEHANDLE_NUM; i++)
if (g_pHandleIndex[i].pCacheEntry == NULL)
{
hCurCacher = i;
break;
}
if ( hCurCacher < 1)
{
return ERROR_CONF_NOHANDLE;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ȫ·<C8AB><C2B7><EFBFBD><EFBFBD>
#ifdef OS_WINDOWS
2 years ago
lstrcpyn((LPWSTR)g_pHandleIndex[hCurCacher].szPathName, (LPWSTR)szProfileName, MAX_PATH_NUM);
#else
2 years ago
strncpy(g_pHandleIndex[hCurCacher].szPathName, szProfileName, MAX_PATH_NUM - 1);
#endif
2 years ago
pgc32 iExeRev = 0;
if ((iExeRev = ProcessCreateCache(hCurCacher)) != SUCCESS)
return iExeRev;
*phfile = hCurCacher;
return SUCCESS;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : CloseProfileHandle
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>Դ
// <20><><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5> : int -- <20>ɹ<EFBFBD><C9B9>򷵻<EFBFBD>SUCCESS,ʧ<><CAA7><EFBFBD>򷵻ؾ<F2B7B5BB><D8BE><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʧ<EFBFBD>ܵĴ<DCB5><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>ֵ ˵<><CBB5>
// SUCCESS <09>ɹ<EFBFBD><C9B9>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
// ERROR_CONF_INVALIDHANDLE <09><><EFBFBD><EFBFBD><EFBFBD>˷Ƿ<CBB7><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : hProfile --[in]<5D><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int close_profile_handle(HPROFILE hProfile)
{
if ((hProfile < 1) || (hProfile >= MAX_PROFILEHANDLE_NUM))
return ERROR_CONF_INVALIDHANDLE;
ReleaseProfileCache(hProfile);
memset(&g_pHandleIndex[hProfile], 0, sizeof(SProfileHanleInfo));
return SUCCESS;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : GetPgcProfileString
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : <20><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ŀֵ
// <20><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lpAppName<6D><65> lpKeyName<6D><65><EFBFBD><EFBFBD>Ҫȡ<D2AA><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ<C4BF><D6B5><EFBFBD>ڵĶ<DAB5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ķμ<C4B6><CEBC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ<C4BF><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lpReturnedStringΪ<67>׵<EFBFBD>ַ<EFBFBD><D6B7>
// Ŀ<><EFBFBD><EABBBA><EFBFBD><EFBFBD>(Ŀ<><EFBFBD><EABBBA><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>ͨ<EFBFBD><CDA8>ָ<EFBFBD><D6B8>pdwSize<7A><65><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ὣȡ<E1BDAB><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ
// <20>ij<EFBFBD><C4B3><EFBFBD>(<28><><EFBFBD><EFBFBD>'\0'<27>ַ<EFBFBD><><D0B4><EFBFBD><EFBFBD>ַָ<D6B7><D6B8>pdwSize<7A>У<EFBFBD> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ķμ<C4B6><CEBC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>ִ<EFBFBD><D6B4>ȱʡ<C8B1><CAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// lpDefault <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EABBBA><EFBFBD><EFBFBD>lpReturnedString<6E><67>; <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EABBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
// lpReturnedStringΪ<67>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EABBBA><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>С<EFBFBD><D0A1>1<EFBFBD><31><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Ŀ<><EFBFBD><EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD>ԻὫȡ<E1BDAB><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ<C4BF>ij<EFBFBD><C4B3><EFBFBD>(<28><><EFBFBD><EFBFBD>'\0'<27>ַ<EFBFBD><>뵽ָ<EBB5BD><D6B8>pdwSize<7A><65>ָ<EFBFBD><D6B8><EFBFBD>ĵ<EFBFBD>ַ<EFBFBD>С<EFBFBD>
//
//
// <20><><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5> : int -- <20>ɹ<EFBFBD><C9B9>򷵻<EFBFBD>SUCCESS,ʧ<><CAA7><EFBFBD>򷵻ؾ<F2B7B5BB><D8BE><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʧ<EFBFBD>ܵĴ<DCB5><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>ֵ ˵<><CBB5>
// SUCCESS <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ķμ<C4B6><CEBC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ<C4BF><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lpReturnedStringΪ<67>׵<EFBFBD>ַ<EFBFBD><D6B7>
// Ŀ<><EFBFBD><EABBBA><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ<C4BF>ij<EFBFBD><C4B3><EFBFBD>С<EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EABBBA><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ<C4BF><D6B5>
// <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EABBBA><EFBFBD>У<EFBFBD><D0A3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SUCCESS
// ERROR_CONF_REVBUFFER <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ķμ<C4B6><CEBC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ<C4BF>ij<EFBFBD><C4B3>ȴ<EFBFBD><C8B4><EFBFBD>Ŀ<EFBFBD><EFBFBD><EABBBA>
// <20><><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>, <20><>ôȡ<C3B4><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ<C4BF><D6B5><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD>Ϊ<EFBFBD><CEAA>Ŀ<EFBFBD><EFBFBD><EABBBA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ĵ<EFBFBD>С<EFBFBD><D0A1>Ȼ<EFBFBD><C8BB><EFBFBD>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ERROR_CONF_REVBUFFER
//
// SUCCESS_CONF_DEFCOPY <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ķμ<C4B6><CEBC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD>lpDefaultָ<74>벻Ϊ<EBB2BB>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lpDefault
// <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EABBBA><EFBFBD><EFBFBD>lpReturnedString<6E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lpDefaultָ<74><D6B8><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
// <20>ij<EFBFBD><C4B3>ȴ<EFBFBD><C8B4><EFBFBD>Ŀ<EFBFBD><EFBFBD><EABBBA><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD>ôֻ<C3B4><D6BB>lpDefault<6C><74>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> [Ŀ<><EFBFBD><EABBBA><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD> <20><> 1]
// <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>
// ERROR_CONF_INVALIDHANDLE <20><><EFBFBD><EFBFBD><EFBFBD>˷Ƿ<CBB7><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ERROR_FAIL <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA>ַ<EFBFBD><D6B7><EFBFBD>Ŀ<EFBFBD><EFBFBD><EABBBA><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : lpAppName --[in]<5D><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : lpKeyName --[in]<5D><>Ŀ<EFBFBD><C4BF>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : lpDefault --[in] <20><><EFBFBD><EFBFBD>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵʧ<D6B5><CAA7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>д<EFBFBD><D0B4>lpReturnedStringĿ<67><EFBFBD><EABBBA>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : lpReturnedString --[out] Ŀ<><EFBFBD><EABBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : pdwSize -- [in][out]ָ<>򻺳<EFBFBD><F2BBBAB3><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȵ<EFBFBD>ָ<EFBFBD>룬ͬʱ<CDAC>ڵ<EFBFBD><DAB5>ý<EFBFBD><C3BD><EFBFBD><EFBFBD>󣬽<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>(<28><><EFBFBD><EFBFBD>'\0'<27>ַ<EFBFBD><><D0B4><EFBFBD>õ<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : hProfile --[in] <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int get_pgcprofile_string(
const pgcchar * lpAppName, // points to section name
const pgcchar * lpKeyName, // point to key name
const pgcchar * lpDefault, // point to default string
pgcchar * lpReturnedString, // point to destination buffer
pgcu32 * pdwSize, // point to size of destination buffer
HPROFILE hProfile // point to initialization filename
)
{
SItemInCache *psTemp = NULL;
TChainHash<SItemInCache> *phash_table = NULL;
pgcu32 dwBuffer = 0, dwCount = 0, dwNeed = 0;
//bRevBuffer - PGCTRUE<55><45>ʾ<EFBFBD><CABE><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B9BB>
PGCBOOL bRevBuffer = PGCTRUE;
if ((hProfile < 1) || (hProfile >= MAX_PROFILEHANDLE_NUM))
return ERROR_CONF_INVALIDHANDLE;
if ((lpAppName == NULL) || ( lpKeyName == NULL))
return ERROR_FAIL;
ReCreateCache(hProfile);
phash_table = g_pHandleIndex[hProfile].pHashTable;
if (phash_table == NULL)
return ERROR_CONF_INVALIDHANDLE;
profile_search_sequence(&psTemp, phash_table, lpAppName, lpKeyName);
if ((psTemp != NULL) && (psTemp->valid) && (pdwSize != NULL))
{
dwBuffer = (pgcu32)strlen(psTemp->szItemVal) + 1;
dwNeed = dwBuffer;
if (dwBuffer > *pdwSize)
{
dwBuffer = *pdwSize;
bRevBuffer = PGCFALSE;
}
if ((lpReturnedString != NULL) && (dwBuffer > 0))
{
for (dwCount = 0; dwCount < dwBuffer - 1; dwCount++)
lpReturnedString[dwCount] = psTemp->szItemVal[dwCount];
lpReturnedString[dwCount] = '\0';
}
}
else
{
//ִ<><D6B4>ȱʡ<C8B1><CAA1><EFBFBD><EFBFBD>
if ((lpDefault != NULL) && (pdwSize != NULL))
{
dwBuffer = (pgcu32)strlen(lpDefault) + 1;
dwNeed = dwBuffer;
if (dwBuffer > *pdwSize)
{
dwBuffer = *pdwSize;
bRevBuffer = PGCFALSE;
}
if ((dwBuffer > 0) && (lpReturnedString != NULL))
{
//2002/03/05 <20><>С<EFBFBD><D0A1>++++++++++++++++++++++++++++++++++++++++++++
#if 0
for (pgcu32 dwCount = 0; dwCount < dwBuffer - 1; dwCount++)
#endif
for (dwCount = 0; dwCount < dwBuffer - 1; dwCount++)
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
lpReturnedString[dwCount] = lpDefault[dwCount];
lpReturnedString[dwCount] = '\0';
}
}
else
dwBuffer = 0;
}
*pdwSize = dwNeed;
if (dwBuffer == 0)
return ERROR_FAIL;
if (!bRevBuffer)
return ERROR_CONF_REVBUFFER;
return SUCCESS;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : WritePgcProfileString
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : <20><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>д<EFBFBD><D0B4>Ŀֵ
// <20><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lpAppName<6D><65> lpKeyName<6D><65><EFBFBD><EFBFBD>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ<C4BF><D6B5><EFBFBD>ڵĶ<DAB5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ķμ<C4B6><CEBC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lpString<6E><67>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF>ַ<EFBFBD><D6B7><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>Ըö<D4B8><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ŀֵ<C4BF><D6B5><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD>ٰ<EFBFBD><D9B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>,
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SUCCESS;<3B><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ķμ<C4B6><CEBC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>bInsertItem<65><6D>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>Լ<EFBFBD>
// <20><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>bInsertItemΪ<6D><EFBFBD><E6A3AC><EFBFBD><EFBFBD><EFBFBD>Ӹö<D3B8><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB>д<EFBFBD><D0B4><EFBFBD><EFBFBD>Ŀֵ<C4BF><D6B5>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SUCCESS; <20><><EFBFBD><EFBFBD>bInsertItemΪ<6D>٣<EFBFBD><D9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ERROR_FAIL<49><4C>
// <20><><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5> : int -- <20>ɹ<EFBFBD><C9B9>򷵻<EFBFBD>SUCCESS,ʧ<><CAA7><EFBFBD>򷵻ؾ<F2B7B5BB><D8BE><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʧ<EFBFBD>ܵĴ<DCB5><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>ֵ ˵<><CBB5>
// SUCCESS <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ķμ<C4B6><CEBC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lpString<6E><67>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF>ַ<EFBFBD><D6B7><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>Ըö<D4B8><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ŀֵ<C4BF><D6B5><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD>ٰ<EFBFBD><D9B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>,
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SUCCESS
// ERROR_FWRITE д<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
// ERROR_CONF_INVALIDHANDLE <20><><EFBFBD><EFBFBD><EFBFBD>˷Ƿ<CBB7><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ERROR_CONF_INPUTSTRING_TOOLARGE <20><><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ<C4BF><D6B5><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD>
// ERROR_FAIL <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>κ<EFBFBD><CEBA>ַ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>ļ<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : lpAppName[in] -- <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : lpKeyName[in] -- <20><>Ŀ<EFBFBD><C4BF>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : lpString[in] -- Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : hProfile[in] -- <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : bInsertItem[in] -- <20><>ָ<EFBFBD><D6B8><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Ӹöλ<C3B6><CEBB><EFBFBD>Ŀ<EFBFBD><C4BF>PGCTRUE-<2D><><EFBFBD>ӣ<EFBFBD>PGCFALSE-<2D><><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>ȱʡ<C8B1><CAA1>
int write_pgcprofile_string(
const pgcchar * lpAppName, // point to section name
const pgcchar * lpKeyName, // point to key name
const pgcchar * lpString, // point to string to add
HPROFILE hProfile, // handle to Profile Cache
PGCBOOL bInsertItem
)
{
SItemInCache *psTemp = NULL, *psCacheEntry = NULL, *psSec = NULL;
TChainHash<SItemInCache> *phash_table = NULL;
pgc32 iBuffer = 0, iCurItem = 0, iSecPos = 0, i = 0, iWriteSuccess = 0;
PGCBOOL bSecExist = PGCFALSE;
PGCBOOL bTrunc = PGCFALSE ;/*д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ƿ񱻽ض<F1B1BBBD>*/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>Լ<EFBFBD><D4BC><EFBFBD>
if ((hProfile < 1) || (hProfile >= MAX_PROFILEHANDLE_NUM))
return ERROR_CONF_INVALIDHANDLE;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>Ϸ<EFBFBD><CFB7>Լ<EFBFBD><D4BC><EFBFBD>
if ((lpAppName == NULL) || ( lpKeyName == NULL))
return ERROR_FAIL;
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ƿ񳬳<C7B7>
if (strlen(lpAppName) >= MAX_CHAR_LINE)
bTrunc = PGCTRUE;
if (strlen(lpKeyName) >= MAX_CHAR_LINE)
bTrunc = PGCTRUE;
if ( (lpString != NULL) && (strlen(lpString) >= MAX_CHAR_LINE))
bTrunc = PGCTRUE;
if (bTrunc)
return ERROR_CONF_INPUTSTRING_TOOLARGE;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>,<2C><><EFBFBD>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>
ReCreateCache(hProfile);
//<2F><>ϣ<EFBFBD><CFA3><EFBFBD>Ϸ<EFBFBD><CFB7>Լ<EFBFBD><D4BC><EFBFBD>
phash_table = g_pHandleIndex[hProfile].pHashTable;
if (phash_table == NULL)
return ERROR_CONF_INVALIDHANDLE;
psCacheEntry = g_pHandleIndex[hProfile].pCacheEntry;
psTemp = NULL;
profile_search_sequence(&psTemp, phash_table, lpAppName, lpKeyName);
if ((psTemp == NULL) && (bInsertItem))
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>
profile_search_sequence(&psSec, phash_table, lpAppName, NULL);
if (psSec != NULL)
{
pgcu32 a1, a2;
//2002/03/05 <20><>С<EFBFBD><D0A1>++++++++++++++++++++++++++++++++++++++++++++
#if 0
a1 = (pgcu32)psSec - (pgcu32)psCacheEntry;
#endif
a1 = (pgcu32)(psSec - psCacheEntry);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
a2 = (pgcu32)sizeof(SItemInCache);
iSecPos = a1 / a2;
bSecExist = PGCTRUE;
psSec->valid = PGCTRUE;
}
//<2F>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
AdjustCache(hProfile, 2);
psCacheEntry = g_pHandleIndex[hProfile].pCacheEntry;
iCurItem = g_pHandleIndex[hProfile].CurUseItems;
//Ӧ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!bSecExist)
{
psTemp = &psCacheEntry[iCurItem];
#ifdef OS_WINDOWS
lstrcpyn((LPWSTR)psTemp->szSecName, (LPCWSTR)lpAppName, MAX_CHAR_LINE);
2 years ago
#else
memset(psTemp->szSecName, 0, MAX_CHAR_LINE);
strncpy(psTemp->szSecName, lpAppName, MAX_CHAR_LINE - 1);
#endif
psTemp->valid = PGCTRUE;
psTemp->bIsSecName = PGCTRUE;
psTemp->memo = NULL;
phash_table->insertItem(psTemp);
AddNode(g_pHandleIndex[hProfile].pSequence, g_pHandleIndex[hProfile].pCurSeq, iCurItem);
iSecPos = iCurItem;
iCurItem++;
g_pHandleIndex[hProfile].CurLines++;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀֵ
psTemp = &psCacheEntry[iCurItem];
#ifdef OS_WINDOWS
lstrcpyn((LPWSTR)psTemp->szSecName, (LPCWSTR)lpAppName, MAX_CHAR_LINE);
lstrcpyn((LPWSTR)psTemp->szItemName, (LPCWSTR)lpKeyName, MAX_CHAR_LINE);
lstrcpyn((LPWSTR)psTemp->szItemVal, (LPCWSTR)lpString, MAX_CHAR_LINE);
2 years ago
#else
memset(psTemp, 0, sizeof(SItemInCache));
strncpy(psTemp->szSecName, lpAppName, MAX_CHAR_LINE - 1);
strncpy(psTemp->szItemName, lpKeyName, MAX_CHAR_LINE - 1);
strncpy(psTemp->szItemVal, lpString, MAX_CHAR_LINE - 1);
#endif
psTemp->valid = PGCTRUE;
psTemp->bIsSecName = PGCFALSE;
psTemp->memo = NULL;
phash_table->insertItem(psTemp);
InsertNode(g_pHandleIndex[hProfile].pSequence, iCurItem, psCacheEntry, iSecPos);
iCurItem++;
g_pHandleIndex[hProfile].CurUseItems = iCurItem;
g_pHandleIndex[hProfile].CurLines++;
iBuffer = (pgc32)strlen(psTemp->szItemVal);
psTemp = NULL;
if ((iWriteSuccess = ReWriteProfile(hProfile)) != SUCCESS)
return iWriteSuccess;
}
if ((psTemp == NULL) && (!bInsertItem))
return ERROR_CONF_NOTEXIST;
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ε<EFBFBD><CEB5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ((psTemp != NULL) && (lpString != NULL))
{
if ((psTemp->valid) || (bInsertItem))
{
iBuffer = (pgc32)strlen(lpString);
if (iBuffer >= MAX_CHAR_LINE)
iBuffer = MAX_CHAR_LINE - 1;
for (i = 0; i < iBuffer; i++)
psTemp->szItemVal[i] = lpString[i];
psTemp->szItemVal[i] = '\0';
psTemp->valid = PGCTRUE;
if ((iWriteSuccess = ReWriteProfile(hProfile)) != SUCCESS)
return iWriteSuccess;
}
}
return SUCCESS;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : GetPgcProfileSectionNames
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>л<EFBFBD>ȡ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>г<EFBFBD><D0B3>ֵ<EFBFBD><D6B5>Ⱥ<EFBFBD><C8BA><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>pdwSize<7A><65>ָ<EFBFBD><D6B8><EFBFBD>ĵ<EFBFBD>ַ<EFBFBD>ռ
// ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD>β<EFBFBD><CEB2><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
// <20><>Ϊ<EFBFBD><CEAA><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ʽΪ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1\0<><30><EFBFBD><EFBFBD>2\0......<2E><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\0\0
// <20><><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5> : int -- <20>ɹ<EFBFBD><C9B9>򷵻<EFBFBD>SUCCESS,ʧ<><CAA7><EFBFBD>򷵻ؾ<F2B7B5BB><D8BE><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʧ<EFBFBD>ܵĴ<DCB5><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : LPTSTR lpszReturnBuffer --[out] д<><EFBFBD><EBBBBA><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : pgcu32 *pdwSize -- [in][out]д<><EFBFBD><EBBBBA><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><C4B0>ֽڳ<D6BD><DAB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : pgcu32 *nSecNum --[out]<5D><><EFBFBD><EFBFBD>ȡ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>õ<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : hProfile-- [in] handle to Profile Cache
int get_pgcprofile_secnames( pgcchar * lpszReturnBuffer, // address of return buffer
pgcu32 * pdwSize, // size of return buffer
pgcu32 *nSecNum,
HPROFILE hProfile // handle to Profile Cache
)
{
pgc32 iCount = g_pHandleIndex[hProfile].CurUseItems , iSecNum = 0, i = -1;
pgcu32 dwWrite = 0, dwSize = 0, dwNeed = 0;
SItemInCache *psCacheEntry = g_pHandleIndex[hProfile].pCacheEntry;
pgcchar *szSec = NULL;
if ((hProfile < 1) || (hProfile >= MAX_PROFILEHANDLE_NUM))
return ERROR_CONF_INVALIDHANDLE;
ReCreateCache(hProfile);
if ((pdwSize != NULL) && (*pdwSize > 2))
dwSize = *pdwSize - 2;
if ((dwSize > 2) && (lpszReturnBuffer != NULL))
{
for (i = 0; i < iCount; i++)
{
if ((psCacheEntry[i].bIsSecName) && (psCacheEntry[i].valid))
{
szSec = psCacheEntry[i].szSecName;
dwNeed = dwNeed + (pgcu32)strlen(szSec) + 1;
iSecNum++;
while ((dwWrite < dwSize ) && (*szSec != '\0'))
{
*lpszReturnBuffer = *szSec;
dwWrite++;
lpszReturnBuffer++;
szSec++;
}
*lpszReturnBuffer = '\0';
lpszReturnBuffer++;
dwWrite++;
if (dwWrite >= dwSize)
break;
}// endif
}// end for
*lpszReturnBuffer = '\0';
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><DCBA>Լ<EFBFBD><D4BC>θ<EFBFBD><CEB8><EFBFBD>
for (pgc32 iStart = i + 1; iStart < iCount; iStart++)
{
if ((psCacheEntry[iStart].bIsSecName) && (psCacheEntry[iStart].valid))
{
iSecNum++;
szSec = psCacheEntry[iStart].szSecName;
if (szSec != NULL)
{
dwNeed = dwNeed + (pgcu32)strlen(szSec) + 1;
}
}
}
if (pdwSize)
*pdwSize = dwNeed;
if (nSecNum)
*nSecNum = iSecNum;
return SUCCESS;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : del_pgcprofile_key
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : ɾ<><C9BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
// <20><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD> <20><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>ע<EFBFBD>ͣ<EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD>Ը<EFBFBD><D4B8>Ƿ<EFBFBD>ʽ<EFBFBD><CABD>д<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
// <20><><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5> : int -- <20>ɹ<EFBFBD><C9B9>򷵻<EFBFBD>SUCCESS,ʧ<><CAA7><EFBFBD>򷵻ؾ<F2B7B5BB><D8BE><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʧ<EFBFBD>ܵĴ<DCB5><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : lpAppName --[in] <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : lpKeyName -- [in]<5D><>Ŀ<EFBFBD><C4BF>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : HPROFILE hProfile <20><>-[in]<5D><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int del_pgcprofile_key( const pgcchar * lpAppName, // point to section name
const pgcchar * lpKeyName, // point to key name
HPROFILE hProfile // point to initialization filename
)
{
SItemInCache *psTemp = NULL;
TChainHash<SItemInCache> *phash_table = NULL;
pgc32 iWriteSuccess = 0;
if ((hProfile < 1) || (hProfile >= MAX_PROFILEHANDLE_NUM))
return ERROR_CONF_INVALIDHANDLE;
if ((lpAppName == NULL) || ( lpKeyName == NULL))
return ERROR_FAIL;
ReCreateCache(hProfile);
phash_table = g_pHandleIndex[hProfile].pHashTable;
if (phash_table == NULL)
return ERROR_CONF_INVALIDHANDLE;
profile_search_sequence(&psTemp, phash_table, lpAppName, lpKeyName);
if (psTemp != NULL)
{
psTemp->valid = PGCFALSE;
if ((iWriteSuccess = ReWriteProfile(hProfile)) != SUCCESS)
return iWriteSuccess;
return SUCCESS;
}
return ERROR_CONF_NOTEXIST;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : del_pgcprofile_sec
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : ɾ<><C9BE>ָ<EFBFBD><D6B8><EFBFBD>Ķ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD> <20><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>ָ<EFBFBD><D6B8><EFBFBD>ĶΣ<C4B6><CEA3>Լ<EFBFBD><D4BC>ö<EFBFBD><C3B6>Ϸ<EFBFBD><CFB7><EFBFBD>ע<EFBFBD>ͣ<EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD>Ը<EFBFBD><D4B8>Ƿ<EFBFBD>ʽ<EFBFBD><CABD>д<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
// <20><>ɾ<EFBFBD><C9BE>һ<EFBFBD><D2BB><EFBFBD>ε<EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>ע<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>
// <20><><EFBFBD><EFBFBD>ֵ˵<D6B5><CBB5> : int -- <20>ɹ<EFBFBD><C9B9>򷵻<EFBFBD>SUCCESS,ʧ<><CAA7><EFBFBD>򷵻ؾ<F2B7B5BB><D8BE><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʧ<EFBFBD>ܵĴ<DCB5><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : lpAppName --[in] <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : HPROFILE hProfile <20><>-[in]<5D><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int del_pgcprofile_sec( const pgcchar * lpAppName,
HPROFILE hProfile
)
{
SItemInCache *psSec = NULL, *psCacheEntry = NULL;
TChainHash<SItemInCache> *phash_table = NULL;
pgc32 iSecPos = 0;
if ((hProfile < 1) || (hProfile >= MAX_PROFILEHANDLE_NUM))
return ERROR_CONF_INVALIDHANDLE;
if (lpAppName == NULL)
return ERROR_FAIL;
psCacheEntry = g_pHandleIndex[hProfile].pCacheEntry;
if (psCacheEntry == NULL)
return ERROR_CONF_INVALIDHANDLE;
ReCreateCache(hProfile);
phash_table = g_pHandleIndex[hProfile].pHashTable;
if (phash_table == NULL)
return ERROR_CONF_INVALIDHANDLE;
profile_search_sequence(&psSec, phash_table, lpAppName, NULL);
if (psSec != NULL)
{
pgcu32 a1, a2;
//2002/03/05 <20><>С<EFBFBD><D0A1>++++++++++++++++++++++++++++++++++++++++++++
#if 0
a1 = (pgcu32)psSec - (pgcu32)psCacheEntry;
#endif
a1 = (pgcu32)(psSec - psCacheEntry);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
a2 = (pgcu32)sizeof(SItemInCache);
iSecPos = a1 / a2;
if (DisableSec(g_pHandleIndex[hProfile].pSequence, iSecPos, psCacheEntry))
{
return ReWriteProfile(hProfile);
}
}
return ERROR_CONF_NOTEXIST;
}