in pgxalib.cpp [464:557]
void XAConnection::parse_xa_info()
{
const char *cstr, *pstr, *pnstr;
char keyword[64], value[64];
bool keyhasbr, valhasbr;
int debugv = -1;
cstr = connstr.c_str();
immediateConnection = bImmediateConnectDefault;
GetMsdtclog();
for (pstr = cstr; *pstr;)
{
keyhasbr = valhasbr = false;
if (CHAR_OPENING_BRACE == *pstr)
{
keyhasbr = true;
if (pnstr = strchr(pstr, (int) CHAR_CLOSING_BRACE), NULL != pnstr)
strncpy_s(keyword, sizeof(keyword), pstr + 1, pnstr - pstr - 1);
else
break;
pstr = pnstr + 1;
if (CHAR_EQUAL != *pstr)
break;
}
else
{
if (pnstr = strchr(pstr, (int) CHAR_EQUAL), NULL != pnstr)
strncpy_s(keyword, sizeof(keyword), pstr, pnstr - pstr);
else
break;
pstr = pnstr;
}
pstr++;
if (CHAR_OPENING_BRACE == *pstr)
{
valhasbr = true;
if (pnstr = strchr(pstr, (int) CHAR_CLOSING_BRACE), NULL != pnstr)
strncpy_s(value, sizeof(value), pstr + 1, pnstr - pstr - 1);
else
break;
pstr = pnstr + 1;
}
else
{
if (pnstr = strchr(pstr, (int) CHAR_SEMI_COLON), NULL != pnstr)
{
strncpy_s(value, sizeof(value), pstr, pnstr - pstr);
pstr = pnstr;
}
else
{
strcpy(value, pstr);
pstr = strchr(pstr, '\0');
}
}
if (0 == _stricmp(keyword, KEYWORD_DTC_CHECK))
immediateConnection = (0 != (int) strtol(value, NULL, 10));
else if (0 == _stricmp(keyword, KEYWORD_DEBUG) ||
0 == _stricmp(keyword, KEYWORD_ABDEBUG))
debugv = (int) strtol(value, NULL, 10);
else
{
if (keyhasbr)
dsnstr += STR_OPENING_BRACE;
dsnstr += keyword;
if (keyhasbr)
dsnstr += STR_CLOSING_BRACE;
dsnstr += STR_EQUAL;
if (valhasbr)
dsnstr += STR_OPENING_BRACE;
dsnstr += value;
if (valhasbr)
dsnstr += STR_CLOSING_BRACE;
dsnstr += STR_SEMI_COLON;
}
if (NULL == pstr ||
CHAR_SEMI_COLON != *pstr)
break;
pstr++;
}
if (0 != dtclog)
{
char dbgopt[16];
if (debugv <= 0)
debugv = 1;
_snprintf(dbgopt, sizeof(dbgopt), KEYWORD_ABDEBUG "=%d;", debugv);
dsnstr += dbgopt;
}
}