|
|
|
|
/*****************************************************************************
|
|
|
|
|
*
|
|
|
|
|
* 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>
|
|
|
|
|
#endif
|
|
|
|
|
#include "Profile_Hash.h"
|
|
|
|
|
#include "confrw_errno.h"
|
|
|
|
|
//#include "util.h"
|
|
|
|
|
#include "common.h"
|
|
|
|
|
#include "basefunc.h"
|
|
|
|
|
|
|
|
|
|
//<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);
|
|
|
|
|
// 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);
|
|
|
|
|
// 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
|
|
|
|
|
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);
|
|
|
|
|
#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
|
|
|
|
|
lstrcpyn((LPWSTR)szProfileName, (LPWSTR)g_pHandleIndex[hProfile].szPathName, MAX_PATH_NUM);
|
|
|
|
|
#else
|
|
|
|
|
strncpy(szProfileName, g_pHandleIndex[hProfile].szPathName, MAX_PATH_NUM - 1);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
#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
|
|
|
|
|
lstrcpyn((LPWSTR)g_pHandleIndex[hCurCacher].szPathName, (LPWSTR)szProfileName, MAX_PATH_NUM);
|
|
|
|
|
#else
|
|
|
|
|
strncpy(g_pHandleIndex[hCurCacher].szPathName, szProfileName, MAX_PATH_NUM - 1);
|
|
|
|
|
#endif
|
|
|
|
|
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);
|
|
|
|
|
#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);
|
|
|
|
|
#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;
|
|
|
|
|
}
|
|
|
|
|
|