修改了地址

This commit is contained in:
shi_jq 2025-03-12 09:54:32 +08:00
parent 82b8ffc88b
commit 79f70475b9

View File

@ -0,0 +1,997 @@
/*=============================================================================
* osicfg文件生成
* : V1.00
* : LGXY
* :
* :
* :
*============================================================================*/
#include "glbtypes.h"
#include "sysincs.h"
#define I_AM_THE_TRUE_GEN_LIST
#include "gen_list.h"
#include "slog.h"
#include "IEC850C_Osicfg.h"
extern char g_szOsiCfgXmlFileName[255];
/*==============================================================================
*
*============================================================================*/
#define LOG_ERROR0 printf
#define LOG_ERROR1 printf
#define LOG_ERROR2 printf
#define LOG_ERROR3 printf
#define LOG_ERROR4 printf
/*==============================================================================
*
*============================================================================*/
tagNetworkAddr g_tNetworkAddr = {&g_tNetworkAddr, &g_tNetworkAddr, "S1", "192.168.1.1", 102};
tagOsiCfg g_tOSICfg = { 65535, 1024, NULL, &g_tNetworkAddr};
// Tpx通信地址定义
tagTpxAddr g_tTpxAddr[2] = {{"local1", "1 3 9999 33", "33", "00 00 00 01", "00 01", "00 01"}, // local address
{"remote", "1 1 999 1", "12", "00 00 00 01", "00 01", "00 01"}}; // remote address
/*==============================================================================
*
*============================================================================*/
#define CN_SCL_EL_BUF_LEN_MAX (1024) // 临时缓冲区
#define CN_MAX_IDENT_LEN_255 (255) // Identifier变量的最大长度
static char *scl_el_buf = NULL; // 缓存文本信息, 动态开辟, 大小由SCL_EL_BUF_LEN_MAX指定
static FILE *scl_fd; // 写icd文件的句柄
static unsigned int scl_nest_count = 0; // 元素的嵌套层次, 按元素Tag的打开与关闭自动计数
static unsigned int whitespace_X = SD_FALSE; // 不需要换行及Tab缩进
#define XML_ADD_XML(version){ \
if(_xml_create(version) < 0){ \
LOG_ERROR0("Failed to create XML header info!\n"); \
return -1; \
} \
}
#define SCL_ADD_EL_0(elname) \
do { \
if(_elTagOpen(elname) < 0) \
{ \
LOG_ERROR1("elment '%s' open error!\n", elname); \
return -1; \
} \
}while(0)
#define SCL_ADD_EL_1(elname) \
do { \
if(_elTagClose(elname) < 0) \
{ \
LOG_ERROR1("elment '%s' close error!\n", elname); \
return -1; \
} \
}while(0)
#define SCL_EL_ADD_ATTR_STRING(name, value) \
do { \
if(_el_add_att_str(name, value) < 0) \
{ \
LOG_ERROR1("elment add att '%s' failured!\n", name); \
return -1; \
} \
}while(0)
// 增加元素节点属性(忽略空字符串)
#define SCL_EL_ADD_ATTR_IGONRE_EMPTY(name, value) \
do { \
if (strlen(value) > 0) \
SCL_EL_ADD_ATTR_STRING(name, value); \
} while (0)
#define SCL_EL_ADD_TEXT_INT(text) \
do { \
if(_el_add_text_int(text) < 0) \
{ \
LOG_ERROR1("elment add text '%d' failured!\n", text); \
return -1; \
} \
}while(0)
#define SCL_EL_ADD_TEXT(text) \
do { \
if((NULL == text) || (strlen(text) == 0)) { \
LOG_ERROR0("elment add text failured, text is NULL or empty!\n"); \
return -1; \
} \
if(_el_add_text(text) < 0) { \
LOG_ERROR1("elment add text '%s' failured!\n", text); \
return -1; \
} \
}while(0)
// 移动指针, 使其始终指向最后一个字符的位置
#define ELBUFPTRMOVE(el_buf_ptr) { \
if(strlen(el_buf_ptr) >= CN_SCL_EL_BUF_LEN_MAX){ \
LOG_ERROR0("scl_el_buf overflow!"); \
return -1; \
} \
el_buf_ptr = el_buf_ptr + strlen(el_buf_ptr); \
}
// 将缓存区的字符写入文件中
#define SCL_WRITE_FILE(){ \
assert(scl_fd != NULL && scl_el_buf != NULL); \
if(scl_el_buf[0] != 0) \
{ \
fprintf(scl_fd, "%s", scl_el_buf); \
memset(scl_el_buf, 0, CN_SCL_EL_BUF_LEN_MAX); \
} \
}
static int _check_name_legal(const char *name)
{
const char *pChar;
assert(name != NULL);
if (strlen (name) > CN_MAX_IDENT_LEN_255)
{
LOG_ERROR1("name '%s' is too long", name);
return -1;
}
for (pChar = name; *pChar != '\0'; pChar++)
{
if ((!(isalnum(*pChar))) && (*pChar != '_') && (*pChar != '$') && (*pChar != ':'))
{
LOG_ERROR1 ("\nIllegal character in name '%s'", name);
return -1;
}
}
return 0;
}
static int _whitespace(char *el_buf)
{
char *buf = el_buf;
unsigned int nest_count;
if(strlen(buf) >= CN_SCL_EL_BUF_LEN_MAX)
{
LOG_ERROR0("scl_el_buf overflow!");
return -1;
}
nest_count = scl_nest_count - 1;
if(SD_TRUE == whitespace_X) // 不需要Tab
{
whitespace_X = SD_FALSE;
return 0;
}
sprintf(buf, "\n");
switch(nest_count) // Tab键
{
case 0:
break;
case 1:
strcat(buf, "\t");
break;
case 2:
strcat(buf, "\t\t");
break;
case 3:
strcat(buf, "\t\t\t");
break;
case 4:
strcat(buf, "\t\t\t\t");
break;
case 5:
strcat(buf, "\t\t\t\t\t");
break;
case 6:
strcat(buf, "\t\t\t\t\t\t");
break;
case 7:
strcat(buf, "\t\t\t\t\t\t\t");
break;
case 8:
strcat(buf, "\t\t\t\t\t\t\t\t");
break;
case 9:
strcat(buf, "\t\t\t\t\t\t\t\t\t");
break;
case 10:
strcat(buf, "\t\t\t\t\t\t\t\t\t\t");
break;
case 11:
strcat(buf, "\t\t\t\t\t\t\t\t\t\t\t");
break;
case 12:
strcat(buf, "\t\t\t\t\t\t\t\t\t\t\t\t");
break;
default:
LOG_ERROR0("elment too deep!");
return -1;
}
return 0;
}
static int _xml_create(const char *version)
{
char *el_buf_ptr = scl_el_buf;
assert(el_buf_ptr != NULL);
sprintf(el_buf_ptr, "<?xml version=\"%s\" encoding=\"UTF-8\"?>\n",
version ? version : "1.0");
return 0;
}
static int _elTagOpen(const char *name)
{
char *el_buf_ptr = scl_el_buf;
char *bufTemp = NULL;
// 检查name有效性
if(_check_name_legal(name) < 0) return -1;
assert(el_buf_ptr != NULL);
// 如果有两个'<', 则写文件(为了防止Tag打开太深而导致缓冲区满)
if((bufTemp = strchr(el_buf_ptr, '<')) != NULL)
{
bufTemp++; // skip '<'
if(strchr(bufTemp, '<') != NULL)
SCL_WRITE_FILE();
}
ELBUFPTRMOVE(el_buf_ptr);
scl_nest_count++; // 嵌套层次计数
// 添加空格
if(_whitespace(el_buf_ptr) < 0) return -1;
ELBUFPTRMOVE(el_buf_ptr);
// 写eltag
sprintf(el_buf_ptr, "<%s>", name);
ELBUFPTRMOVE(el_buf_ptr);
return 0;
}
static int _elTagClose(const char *name)
{
char *el_buf_ptr = scl_el_buf;
assert(el_buf_ptr != NULL);
ELBUFPTRMOVE(el_buf_ptr);
if(name != NULL)
{
// 检查name有效性
if(_check_name_legal(name) < 0) return -1;
// 添加空格
if(_whitespace(el_buf_ptr) < 0) return -1;
ELBUFPTRMOVE(el_buf_ptr);
sprintf(el_buf_ptr, "</%s>", name);
}
else
{
// 移除'>'
el_buf_ptr--;
sprintf(el_buf_ptr, "/>");
}
ELBUFPTRMOVE(el_buf_ptr);
// 完成了一个完整的Tag, 写文件
SCL_WRITE_FILE();
scl_nest_count--; // 嵌套层次计数
return 0;
}
static int _el_add_att_str(const char *name, const char *val )
{
char *el_buf_ptr = scl_el_buf;
// 检查name有效性
if(_check_name_legal(name) < 0) return -1;
assert(el_buf_ptr != NULL);
ELBUFPTRMOVE(el_buf_ptr);
// 移除'>'
el_buf_ptr--;
// 写属性
sprintf(el_buf_ptr, " %s=\"%s\">", name, val);
ELBUFPTRMOVE(el_buf_ptr);
return 0;
}
static int _el_add_text_int(int i)
{
char *el_buf_ptr = scl_el_buf;
assert(el_buf_ptr != NULL);
ELBUFPTRMOVE(el_buf_ptr);
// 写属性
sprintf(el_buf_ptr, "%d", i);
ELBUFPTRMOVE(el_buf_ptr);
whitespace_X = SD_TRUE;
return 0;
}
static int _el_add_text(const char *text )
{
char *el_buf_ptr = scl_el_buf;
assert(el_buf_ptr != NULL);
ELBUFPTRMOVE(el_buf_ptr);
// 写属性
sprintf(el_buf_ptr, "%s", text);
ELBUFPTRMOVE(el_buf_ptr);
whitespace_X = SD_TRUE;
return 0;
}
/*==============================================================================
* : RemoteAddress节点
* : ptNetworkAddr IP地址信息
* :
* : 0-1
*============================================================================*/
static int OSI_Add_Node_RemoteAddress(const tagNetworkAddr *ptNetworkAddr)
{
assert(ptNetworkAddr != NULL);
// 创建RemoteAddress节点
SCL_ADD_EL_0("RemoteAddress");
// 创建AR_Name节点
SCL_ADD_EL_0("AR_Name");
SCL_EL_ADD_TEXT(ptNetworkAddr->arName);
SCL_ADD_EL_1("AR_Name");
// 创建AP_Title节点
SCL_ADD_EL_0("AP_Title");
SCL_EL_ADD_TEXT(g_tTpxAddr[1].AP_Title);
SCL_ADD_EL_1("AP_Title");
// 创建AE_Qualifier节点
SCL_ADD_EL_0("AE_Qualifier");
SCL_EL_ADD_TEXT(g_tTpxAddr[1].AE_Qualifier);
SCL_ADD_EL_1("AE_Qualifier");
// 创建Psel节点
SCL_ADD_EL_0("Psel");
SCL_EL_ADD_TEXT(g_tTpxAddr[1].Psel);
SCL_ADD_EL_1("Psel");
// 创建Ssel节点
SCL_ADD_EL_0("Ssel");
SCL_EL_ADD_TEXT(g_tTpxAddr[1].Ssel);
SCL_ADD_EL_1("Ssel");
// 创建Tsel节点
SCL_ADD_EL_0("Tsel");
SCL_EL_ADD_TEXT(g_tTpxAddr[1].Tsel);
SCL_ADD_EL_1("Tsel");
// 创建TransportType节点
SCL_ADD_EL_0("NetAddr");
// 添加元素属性
SCL_EL_ADD_ATTR_IGONRE_EMPTY("Type", "IPADDR");
SCL_EL_ADD_TEXT(ptNetworkAddr->ip);
SCL_ADD_EL_1("NetAddr");
// 创建Tsel节点
SCL_ADD_EL_0("Port");
SCL_EL_ADD_TEXT_INT(ptNetworkAddr->port);
SCL_ADD_EL_1("Port");
SCL_ADD_EL_1("RemoteAddress");
return 0;
}
/*==============================================================================
* : RemoteAddressList节点
* : ptOSICfg
* :
* : 0-1
*============================================================================*/
static int OSI_Add_Node_RemoteAddressList(const tagOsiCfg *ptOSICfg)
{
tagNetworkAddr *ptRemoteAddress; // 通道地址信息
assert(ptOSICfg != NULL);
// 创建RemoteAddressList节点
SCL_ADD_EL_0("RemoteAddressList");
for (ptRemoteAddress = (tagNetworkAddr *) list_find_last ((DBL_LNK *) ptOSICfg->ptRemoteAddr);
ptRemoteAddress != NULL;
ptRemoteAddress = (tagNetworkAddr *) list_find_prev ((DBL_LNK *) ptOSICfg->ptRemoteAddr, (DBL_LNK *) ptRemoteAddress))
{
if(OSI_Add_Node_RemoteAddress(ptRemoteAddress) < 0)
{
LOG_ERROR1("Failed to add node '%s'!", "RemoteAddress");
return -1;
}
}
SCL_ADD_EL_1("RemoteAddressList");
return 0;
}
/*==============================================================================
* : LocalAddress节点
* : ptOSICfg
* :
* : 0-1
*============================================================================*/
static int OSI_Add_Node_LocalAddress(const tagNetworkAddr *ptLocalAddr)
{
// assert(ptLocalAddr != NULL);
// 创建LocalAddress节点
SCL_ADD_EL_0("LocalAddress");
// 创建AR_Name节点
SCL_ADD_EL_0("AR_Name");
SCL_EL_ADD_TEXT(g_tTpxAddr[0].AR_Name);
SCL_ADD_EL_1("AR_Name");
// 创建AP_Title节点
SCL_ADD_EL_0("AP_Title");
SCL_EL_ADD_TEXT(g_tTpxAddr[0].AP_Title);
SCL_ADD_EL_1("AP_Title");
// 创建AE_Qualifier节点
SCL_ADD_EL_0("AE_Qualifier");
SCL_EL_ADD_TEXT(g_tTpxAddr[0].AE_Qualifier);
SCL_ADD_EL_1("AE_Qualifier");
// 创建Psel节点
SCL_ADD_EL_0("Psel");
SCL_EL_ADD_TEXT(g_tTpxAddr[0].Psel);
SCL_ADD_EL_1("Psel");
// 创建Ssel节点
SCL_ADD_EL_0("Ssel");
SCL_EL_ADD_TEXT(g_tTpxAddr[0].Ssel);
SCL_ADD_EL_1("Ssel");
// 创建Tsel节点
SCL_ADD_EL_0("Tsel");
SCL_EL_ADD_TEXT(g_tTpxAddr[0].Tsel);
SCL_ADD_EL_1("Tsel");
// 创建TransportType节点
SCL_ADD_EL_0("TransportType");
SCL_EL_ADD_TEXT("TCP");
SCL_ADD_EL_1("TransportType");
SCL_ADD_EL_1("LocalAddress");
return 0;
}
/*==============================================================================
* : LocalAddressList节点
* : ptOSICfg
* :
* : 0-1
*============================================================================*/
static int OSI_Add_Node_LocalAddressList(const tagOsiCfg *ptOSICfg)
{
assert(ptOSICfg != NULL);
// 创建LocalAddressList节点
SCL_ADD_EL_0("LocalAddressList");
// 客户端本地ip地址信息只创建1个
if(OSI_Add_Node_LocalAddress(ptOSICfg->ptLocalAddr) < 0)
{
LOG_ERROR1("Failed to add node '%s'!", "LocalAddress");
return -1;
}
SCL_ADD_EL_1("LocalAddressList");
return 0;
}
/*==============================================================================
* : NetworkAddressing节点
* : ptOSICfg
* :
* : 0-1
*============================================================================*/
static int OSI_Add_Node_NetworkAddressing(const tagOsiCfg *ptOSICfg)
{
assert(ptOSICfg != NULL);
// 创建NetworkAddressing节点
SCL_ADD_EL_0("NetworkAddressing");
if(OSI_Add_Node_LocalAddressList(ptOSICfg) < 0)
{
LOG_ERROR1("Failed to add node '%s'!", "LocalAddressList");
return -1;
}
if(OSI_Add_Node_RemoteAddressList(ptOSICfg) < 0)
{
LOG_ERROR1("Failed to add node '%s'!", "RemoteAddressList");
return -1;
}
SCL_ADD_EL_1("NetworkAddressing");
return 0;
}
/*==============================================================================
* : Tcp节点
* : ptOSICfg
* :
* : 0-1
*============================================================================*/
static int OSI_Add_Node_Tcp(const tagOsiCfg *ptOSICfg)
{
assert(ptOSICfg != NULL);
// 创建Tcp节点
SCL_ADD_EL_0("Tcp");
// 创建Rfc1006_Max_Tpdu_Len节点
SCL_ADD_EL_0("Rfc1006_Max_Tpdu_Len");
SCL_EL_ADD_TEXT_INT(1024);
SCL_ADD_EL_1("Rfc1006_Max_Tpdu_Len");
// 创建Rfc1006_Max_Spdu_Outstanding节点
SCL_ADD_EL_0("Rfc1006_Max_Spdu_Outstanding");
SCL_EL_ADD_TEXT_INT(50);
SCL_ADD_EL_1("Rfc1006_Max_Spdu_Outstanding");
SCL_ADD_EL_1("Tcp");
return 0;
}
/*==============================================================================
* : Tp4节点
* : ptOSICfg
* :
* : 0-1
*============================================================================*/
static int OSI_Add_Node_Tp4(const tagOsiCfg *ptOSICfg)
{
assert(ptOSICfg != NULL);
// 创建Network节点
SCL_ADD_EL_0("Tp4");
// 创建Max_Tpdu_Length节点
SCL_ADD_EL_0("Max_Tpdu_Length");
SCL_EL_ADD_TEXT_INT(1024);
SCL_ADD_EL_1("Max_Tpdu_Length");
// 创建Max_Remote_Cdt节点
SCL_ADD_EL_0("Max_Remote_Cdt");
SCL_EL_ADD_TEXT_INT(4);
SCL_ADD_EL_1("Max_Remote_Cdt");
// 创建Local_Cdt节点
SCL_ADD_EL_0("Local_Cdt");
SCL_EL_ADD_TEXT_INT(4);
SCL_ADD_EL_1("Local_Cdt");
// 创建Max_Spdu_Outstanding节点
SCL_ADD_EL_0("Max_Spdu_Outstanding");
SCL_EL_ADD_TEXT_INT(16);
SCL_ADD_EL_1("Max_Spdu_Outstanding");
// 创建Window_Time节点
SCL_ADD_EL_0("Window_Time");
SCL_EL_ADD_TEXT_INT(10);
SCL_ADD_EL_1("Window_Time");
// 创建Inactivity_Time节点
SCL_ADD_EL_0("Inactivity_Time");
SCL_EL_ADD_TEXT_INT(120);
SCL_ADD_EL_1("Inactivity_Time");
// 创建Retransmission_Time节点
SCL_ADD_EL_0("Retransmission_Time");
SCL_EL_ADD_TEXT_INT(10);
SCL_ADD_EL_1("Retransmission_Time");
// 创建Max_Transmissions节点
SCL_ADD_EL_0("Max_Transmissions");
SCL_EL_ADD_TEXT_INT(2);
SCL_ADD_EL_1("Max_Transmissions");
// 创建Ak_Delay节点
SCL_ADD_EL_0("Ak_Delay");
SCL_EL_ADD_TEXT_INT(2);
SCL_ADD_EL_1("Ak_Delay");
SCL_ADD_EL_1("Tp4");
return 0;
}
/*==============================================================================
* : Transport节点
* : ptOSICfg
* :
* : 0-1
*============================================================================*/
static int OSI_Add_Node_Transport(const tagOsiCfg *ptOSICfg)
{
assert(ptOSICfg != NULL);
// 创建Transport节点
SCL_ADD_EL_0("Transport");
if(OSI_Add_Node_Tp4(ptOSICfg) < 0)
{
LOG_ERROR1("Failed to add node '%s'!", "Tp4");
return -1;
}
if(OSI_Add_Node_Tcp(ptOSICfg) < 0)
{
LOG_ERROR1("Failed to add node '%s'!", "Tcp");
return -1;
}
SCL_ADD_EL_1("Transport");
return 0;
}
/*==============================================================================
* : Network节点
* : ptOSICfg
* :
* : 0-1
*============================================================================*/
static int OSI_Add_Node_Clnp(const tagOsiCfg *ptOSICfg)
{
assert(ptOSICfg != NULL);
// 创建Network节点
SCL_ADD_EL_0("Clnp");
// 创建Lifetime节点
SCL_ADD_EL_0("Lifetime");
SCL_EL_ADD_TEXT_INT(50);
SCL_ADD_EL_1("Lifetime");
// 创建Lifetime_Decrement节点
SCL_ADD_EL_0("Lifetime_Decrement");
SCL_EL_ADD_TEXT_INT(1);
SCL_ADD_EL_1("Lifetime_Decrement");
// 创建Cfg_Timer节点
SCL_ADD_EL_0("Cfg_Timer");
SCL_EL_ADD_TEXT_INT(120);
SCL_ADD_EL_1("Cfg_Timer");
// 创建Esh_Delay节点
SCL_ADD_EL_0("Esh_Delay");
SCL_EL_ADD_TEXT_INT(5);
SCL_ADD_EL_1("Esh_Delay");
// 创建Local_NSAP节点
SCL_ADD_EL_0("Local_NSAP");
SCL_EL_ADD_TEXT("49 00 01 53 49 53 43 21 00 01");
SCL_ADD_EL_1("Local_NSAP");
SCL_ADD_EL_1("Clnp");
return 0;
}
/*==============================================================================
* : Network节点
* : ptOSICfg
* :
* : 0-1
*============================================================================*/
static int OSI_Add_Node_Network(const tagOsiCfg *ptOSICfg)
{
assert(ptOSICfg != NULL);
// 创建Network节点
SCL_ADD_EL_0("Network");
if(OSI_Add_Node_Clnp(ptOSICfg) < 0)
{
LOG_ERROR1("Failed to add node '%s'!", "Clnp");
return -1;
}
SCL_ADD_EL_1("Network");
return 0;
}
/*==============================================================================
* : MMS节点
* : ptOSICfg
* :
* : 0-1
*============================================================================*/
static int OSI_Add_Node_MMS(const tagOsiCfg *ptOSICfg)
{
assert(ptOSICfg != NULL);
// 创建MMS节点
SCL_ADD_EL_0("MMS");
// 添加Max_Mms_Pdu_Length节点信息
SCL_ADD_EL_0("Max_Mms_Pdu_Length");
SCL_EL_ADD_TEXT_INT(ptOSICfg->mmsPDUSize);
SCL_ADD_EL_1("Max_Mms_Pdu_Length");
// 添加Max_Calling_Connections节点信息
SCL_ADD_EL_0("Max_Calling_Connections");
SCL_EL_ADD_TEXT_INT(ptOSICfg->maxCalling);
SCL_ADD_EL_1("Max_Calling_Connections");
// 添加Max_Called_Connections节点信息
SCL_ADD_EL_0("Max_Called_Connections");
SCL_EL_ADD_TEXT_INT(0); // 客户端, 默认为0
SCL_ADD_EL_1("Max_Called_Connections");
SCL_ADD_EL_1("MMS");
return 0;
}
/*==============================================================================
* : STACK_CFG节点
* : ptOSICfg
* :
* : 0-1
*============================================================================*/
static int OSI_Add_Node_Root(const tagOsiCfg *ptOSICfg)
{
assert(ptOSICfg != NULL);
XML_ADD_XML("1.0");
// 添加tab符
whitespace_X = SD_TRUE;
// 添加元素节点
SCL_ADD_EL_0("STACK_CFG");
// 添加MMS节点信息
if (OSI_Add_Node_MMS(ptOSICfg) < 0)
{
LOG_ERROR1("Failed to add node '%s'!", "MMS");
return -1;
}
// 添加Network节点信息
if (OSI_Add_Node_Network(ptOSICfg) < 0)
{
LOG_ERROR1("Failed to add node '%s'!", "Network");
return -1;
}
// 添加Transport节点信息
if (OSI_Add_Node_Transport(ptOSICfg) < 0)
{
LOG_ERROR1("Failed to add node '%s'!", "Transport");
return -1;
}
// 添加NetworkAddressing节点信息
if (OSI_Add_Node_NetworkAddressing(ptOSICfg) < 0)
{
LOG_ERROR1("Failed to add node '%s'!", "NetworkAddressing");
return -1;
}
SCL_ADD_EL_1("STACK_CFG");
return 0;
}
/*==============================================================================
* : ICD
* : pszFilePath
* ptOSICfg osi配置信息
* :
* : 0-1
*============================================================================*/
int XML_Save_File(const char *pszFilePath, const tagOsiCfg *ptOSICfg,const char *osicfgName)
{
FILE *fd;
char *buf;
char szFileName[255] = {0};
if((NULL == pszFilePath) || (strlen(pszFilePath) > 128)) return SD_FAILURE;
// 文件全路径
#ifndef _WIN32
sprintf(szFileName, "%s/%s", pszFilePath, osicfgName);
#else
sprintf(szFileName, "%s\\%s", pszFilePath, osicfgName);
#endif
strcpy(g_szOsiCfgXmlFileName, szFileName);
fd = fopen(szFileName, "w");
if(NULL == fd)
{
LOG_ERROR0("\nFile '%s' Open Error!", szFileName);
return -1;
}
buf = (char *)calloc(CN_SCL_EL_BUF_LEN_MAX, sizeof(char));
if(NULL == buf)
{
fclose(fd);
LOG_ERROR0("\nel_buf malloc failed!");
return -1;
}
scl_fd = fd; // save the 'fd'
scl_el_buf = buf; // save the buf ptr
if(OSI_Add_Node_Root(ptOSICfg) < 0)
{
fclose(fd);
free(buf);
LOG_ERROR0("Add Node 'STACK_CFG' failed!");
return -1;
}
assert(scl_nest_count == 0);
fclose(fd);
free(buf);
scl_fd = NULL;
scl_el_buf = NULL;
return 0;
}
int main2 ()
{
if(XML_Save_File("", &g_tOSICfg, "osicfg.xml") < 0)
{
printf("osicfg_11.xml create failed!");
}
else
{
printf("osicfg_11.xml create success!");
}
system("pause");
return 0;
}