support run in container

This commit is contained in:
ruanshudong 2022-02-21 20:40:17 +08:00
parent c8f541fcce
commit 26ce453b08
16 changed files with 2021 additions and 1989 deletions

View File

@ -717,6 +717,9 @@ void Application::main(const TC_Option &option)
string config = TC_File::load2str(ServerConfig::ConfigFile); string config = TC_File::load2str(ServerConfig::ConfigFile);
__out__.debug() << "config:" << ServerConfig::ConfigFile << endl;
__out__.debug() << "config:" << config << endl;
main(config); main(config);
} }

View File

@ -239,52 +239,52 @@ void QueryEpBase::setObjName(const string & sObjName)
notifyEndpoints(_activeEndpoints,_inactiveEndpoints,true); notifyEndpoints(_activeEndpoints,_inactiveEndpoints,true);
} }
} }
//
vector<string> QueryEpBase::sepEndpoint(const string& sEndpoints) //vector<string> QueryEpBase::sepEndpoint(const string& sEndpoints)
{ //{
vector<string> vEndpoints; // vector<string> vEndpoints;
bool flag = false; // bool flag = false;
string::size_type startPos = 0; // string::size_type startPos = 0;
string::size_type sepPos = 0; // string::size_type sepPos = 0;
for(string::size_type pos = 0; pos < sEndpoints.size(); pos++) // for(string::size_type pos = 0; pos < sEndpoints.size(); pos++)
{ // {
if(sEndpoints[pos] == ':' && !flag ) // if(sEndpoints[pos] == ':' && !flag )
{ // {
sepPos = pos; // sepPos = pos;
flag = true; // flag = true;
} // }
else if(flag) // else if(flag)
{ // {
if(sEndpoints[pos] == ' ') // if(sEndpoints[pos] == ' ')
{ // {
continue; // continue;
} // }
//
if(TC_Port::strncasecmp("tcp", (sEndpoints.c_str() + pos), 3) == 0 // if(TC_Port::strncasecmp("tcp", (sEndpoints.c_str() + pos), 3) == 0
|| TC_Port::strncasecmp("udp", (sEndpoints.c_str() + pos), 3) == 0 // || TC_Port::strncasecmp("udp", (sEndpoints.c_str() + pos), 3) == 0
|| TC_Port::strncasecmp("ssl", (sEndpoints.c_str() + pos), 3) == 0) // || TC_Port::strncasecmp("ssl", (sEndpoints.c_str() + pos), 3) == 0)
{ // {
string ep = TC_Common::trim(string(sEndpoints.c_str() + startPos, sepPos - startPos)); // string ep = TC_Common::trim(string(sEndpoints.c_str() + startPos, sepPos - startPos));
if(!ep.empty()) { // if(!ep.empty()) {
vEndpoints.push_back(ep); // vEndpoints.push_back(ep);
} // }
startPos = pos; // startPos = pos;
} // }
//
flag = false; // flag = false;
} // }
} // }
//
string ep = sEndpoints.substr(startPos); // string ep = sEndpoints.substr(startPos);
//
if(!ep.empty()) { // if(!ep.empty()) {
vEndpoints.push_back(ep); // vEndpoints.push_back(ep);
} // }
//
// vEndpoints.push_back(sEndpoints.substr(startPos)); //// vEndpoints.push_back(sEndpoints.substr(startPos));
//
return vEndpoints; // return vEndpoints;
} //}
void QueryEpBase::setEndpoints(const string & sEndpoints, set<EndpointInfo> & setEndpoints) void QueryEpBase::setEndpoints(const string & sEndpoints, set<EndpointInfo> & setEndpoints)
{ {
@ -297,7 +297,7 @@ void QueryEpBase::setEndpoints(const string & sEndpoints, set<EndpointInfo> & se
bool bFirstWeightType = true; bool bFirstWeightType = true;
unsigned int iWeightType = 0; unsigned int iWeightType = 0;
vector<string> vEndpoints = sepEndpoint(sEndpoints); vector<string> vEndpoints = TC_Endpoint::sepEndpoint(sEndpoints);
for (size_t i = 0; i < vEndpoints.size(); ++i) for (size_t i = 0; i < vEndpoints.size(); ++i)
{ {

@ -1 +1 @@
Subproject commit 39c6f87733710a28eb5e57e42558c7e016d84eba Subproject commit 9d299a769d9f827670b726984e40ae9f52b3189c

View File

@ -155,10 +155,10 @@ private:
*/ */
void setObjName(const string & sObjName); void setObjName(const string & sObjName);
/* // /*
* endpoint // * 解析endpoint
*/ // */
vector<string> sepEndpoint(const string& sEndpoints); // vector<string> sepEndpoint(const string& sEndpoints);
/* /*
* sEndpoints提取ip列表信息 * sEndpoints提取ip列表信息

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
#line 2 "tars.lex.cpp" #line 1 "tars.lex.cpp"
#line 4 "tars.lex.cpp" #line 3 "tars.lex.cpp"
#define YY_INT_ALIGNED short int #define YY_INT_ALIGNED short int
@ -8,8 +8,8 @@
#define FLEX_SCANNER #define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_MINOR_VERSION 6
#define YY_FLEX_SUBMINOR_VERSION 37 #define YY_FLEX_SUBMINOR_VERSION 4
#if YY_FLEX_SUBMINOR_VERSION > 0 #if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA #define FLEX_BETA
#endif #endif
@ -47,6 +47,7 @@ typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t; typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t; typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t; typedef uint32_t flex_uint32_t;
typedef uint64_t flex_uint64_t;
#else #else
typedef signed char flex_int8_t; typedef signed char flex_int8_t;
typedef short int flex_int16_t; typedef short int flex_int16_t;
@ -84,65 +85,61 @@ typedef unsigned int flex_uint32_t;
#define UINT32_MAX (4294967295U) #define UINT32_MAX (4294967295U)
#endif #endif
#ifndef SIZE_MAX
#define SIZE_MAX (~(size_t)0)
#endif
#endif /* ! C99 */ #endif /* ! C99 */
#endif /* ! FLEXINT_H */ #endif /* ! FLEXINT_H */
#ifdef __cplusplus /* begin standard C++ headers. */
/* The "const" storage-class-modifier is valid. */ /* TODO: this is always defined, so inline it */
#define YY_USE_CONST
#else /* ! __cplusplus */
/* C99 requires __STDC__ to be defined as 1. */
#if defined (__STDC__)
#define YY_USE_CONST
#endif /* defined (__STDC__) */
#endif /* ! __cplusplus */
#ifdef YY_USE_CONST
#define yyconst const #define yyconst const
#if defined(__GNUC__) && __GNUC__ >= 3
#define yynoreturn __attribute__((__noreturn__))
#else #else
#define yyconst #define yynoreturn
#endif #endif
/* Returned upon end-of-file. */ /* Returned upon end-of-file. */
#define YY_NULL 0 #define YY_NULL 0
/* Promotes a possibly negative, possibly signed char to an unsigned /* Promotes a possibly negative, possibly signed char to an
* integer for use as an array index. If the signed char is negative, * integer in range [0..255] for use as an array index.
* we want to instead treat it as an 8-bit unsigned char, hence the
* double cast.
*/ */
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) #define YY_SC_TO_UI(c) ((YY_CHAR) (c))
/* Enter a start condition. This macro really ought to take a parameter, /* Enter a start condition. This macro really ought to take a parameter,
* but we do it the disgusting crufty way forced on us by the ()-less * but we do it the disgusting crufty way forced on us by the ()-less
* definition of BEGIN. * definition of BEGIN.
*/ */
#define BEGIN (yy_start) = 1 + 2 * #define BEGIN (yy_start) = 1 + 2 *
/* Translate the current start state into a value that can be later handed /* Translate the current start state into a value that can be later handed
* to BEGIN to return to the state. The YYSTATE alias is for lex * to BEGIN to return to the state. The YYSTATE alias is for lex
* compatibility. * compatibility.
*/ */
#define YY_START (((yy_start) - 1) / 2) #define YY_START (((yy_start) - 1) / 2)
#define YYSTATE YY_START #define YYSTATE YY_START
/* Action number for EOF rule of a given start state. */ /* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */ /* Special action meaning "start processing a new file". */
#define YY_NEW_FILE yyrestart( yyin ) #define YY_NEW_FILE yyrestart( yyin )
#define YY_END_OF_BUFFER_CHAR 0 #define YY_END_OF_BUFFER_CHAR 0
/* Size of default input buffer. */ /* Size of default input buffer. */
#ifndef YY_BUF_SIZE #ifndef YY_BUF_SIZE
#ifdef __ia64__
/* On IA-64, the buffer size is 16k, not 8k.
* Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
* Ditto for the __ia64__ case accordingly.
*/
#define YY_BUF_SIZE 32768
#else
#define YY_BUF_SIZE 16384 #define YY_BUF_SIZE 16384
#endif /* __ia64__ */
#endif #endif
/* The state buf must be large enough to hold one state per character in the main buffer. /* The state buf must be large enough to hold one state per character in the main buffer.
@ -176,11 +173,18 @@ extern FILE *yyin, *yyout;
*/ */
#define YY_LESS_LINENO(n) \ #define YY_LESS_LINENO(n) \
do { \ do { \
int yyl;\ yy_size_t yyl;\
for ( yyl = n; yyl < yyleng; ++yyl )\ for ( yyl = n; yyl < yyleng; ++yyl )\
if ( yytext[yyl] == '\n' )\ if ( yytext[yyl] == '\n' )\
--yylineno;\ --yylineno;\
}while(0) }while(0)
#define YY_LINENO_REWIND_TO(dst) \
do {\
const char *p;\
for ( p = yy_cp-1; p >= (dst); --p)\
if ( *p == '\n' )\
--yylineno;\
}while(0)
/* Return all but the first "n" matched characters back to the input stream. */ /* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \ #define yyless(n) \
@ -195,7 +199,6 @@ extern FILE *yyin, *yyout;
YY_DO_BEFORE_ACTION; /* set up yytext again */ \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
} \ } \
while ( 0 ) while ( 0 )
#define unput(c) yyunput( c, (yytext_ptr) ) #define unput(c) yyunput( c, (yytext_ptr) )
#ifndef YY_STRUCT_YY_BUFFER_STATE #ifndef YY_STRUCT_YY_BUFFER_STATE
@ -210,7 +213,7 @@ struct yy_buffer_state
/* Size of input buffer in bytes, not including room for EOB /* Size of input buffer in bytes, not including room for EOB
* characters. * characters.
*/ */
yy_size_t yy_buf_size; int yy_buf_size;
/* Number of characters read into yy_ch_buf, not including EOB /* Number of characters read into yy_ch_buf, not including EOB
* characters. * characters.
@ -266,7 +269,7 @@ struct yy_buffer_state
/* Stack of input buffers. */ /* Stack of input buffers. */
static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
/* We provide macros for accessing buffer states in case in the /* We provide macros for accessing buffer states in case in the
* future we want to put the buffer states in a more general * future we want to put the buffer states in a more general
@ -277,7 +280,6 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
? (yy_buffer_stack)[(yy_buffer_stack_top)] \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
: NULL) : NULL)
/* Same as previous macro, but useful when we know that the buffer stack is not /* Same as previous macro, but useful when we know that the buffer stack is not
* NULL or when we need an lvalue. For internal use only. * NULL or when we need an lvalue. For internal use only.
*/ */
@ -289,7 +291,7 @@ static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
yy_size_t yyleng; yy_size_t yyleng;
/* Points to current character in buffer. */ /* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0; static char *yy_c_buf_p = NULL;
static int yy_init = 0; /* whether we need to initialize */ static int yy_init = 0; /* whether we need to initialize */
static int yy_start = 0; /* start state number */ static int yy_start = 0; /* start state number */
@ -309,19 +311,17 @@ void yypop_buffer_state (void );
static void yyensure_buffer_stack ( void ); static void yyensure_buffer_stack ( void );
static void yy_load_buffer_state ( void ); static void yy_load_buffer_state ( void );
static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file );
#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size );
YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str );
YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, yy_size_t len );
void *yyalloc ( yy_size_t ); void *yyalloc ( yy_size_t );
void *yyrealloc ( void *, yy_size_t ); void *yyrealloc ( void *, yy_size_t );
void yyfree ( void * ); void yyfree ( void * );
#define yy_new_buffer yy_create_buffer #define yy_new_buffer yy_create_buffer
#define yy_set_interactive(is_interactive) \ #define yy_set_interactive(is_interactive) \
{ \ { \
if ( ! YY_CURRENT_BUFFER ){ \ if ( ! YY_CURRENT_BUFFER ){ \
@ -331,7 +331,6 @@ void yyfree (void * );
} \ } \
YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
} }
#define yy_set_bol(at_bol) \ #define yy_set_bol(at_bol) \
{ \ { \
if ( ! YY_CURRENT_BUFFER ){\ if ( ! YY_CURRENT_BUFFER ){\
@ -341,39 +340,38 @@ void yyfree (void * );
} \ } \
YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
} }
#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
/* Begin user sect3 */ /* Begin user sect3 */
typedef flex_uint8_t YY_CHAR;
typedef unsigned char YY_CHAR; FILE *yyin = NULL, *yyout = NULL;
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
typedef int yy_state_type; typedef int yy_state_type;
extern int yylineno; extern int yylineno;
int yylineno = 1; int yylineno = 1;
extern char *yytext; extern char *yytext;
#ifdef yytext_ptr
#undef yytext_ptr
#endif
#define yytext_ptr yytext #define yytext_ptr yytext
static yy_state_type yy_get_previous_state ( void ); static yy_state_type yy_get_previous_state ( void );
static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); static yy_state_type yy_try_NUL_trans ( yy_state_type current_state );
static int yy_get_next_buffer ( void ); static int yy_get_next_buffer ( void );
static void yy_fatal_error (yyconst char msg[] ); static void yynoreturn yy_fatal_error ( const char* msg );
/* Done after the current pattern has been matched and before the /* Done after the current pattern has been matched and before the
* corresponding action - sets up yytext. * corresponding action - sets up yytext.
*/ */
#define YY_DO_BEFORE_ACTION \ #define YY_DO_BEFORE_ACTION \
(yytext_ptr) = yy_bp; \ (yytext_ptr) = yy_bp; \
yyleng = (size_t) (yy_cp - yy_bp); \ yyleng = (yy_size_t) (yy_cp - yy_bp); \
(yy_hold_char) = *yy_cp; \ (yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \ *yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp; (yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 13 #define YY_NUM_RULES 13
#define YY_END_OF_BUFFER 14 #define YY_END_OF_BUFFER 14
/* This struct is not used in this scanner, /* This struct is not used in this scanner,
@ -383,7 +381,7 @@ struct yy_trans_info
flex_int32_t yy_verify; flex_int32_t yy_verify;
flex_int32_t yy_nxt; flex_int32_t yy_nxt;
}; };
static yyconst flex_int16_t yy_accept[52] = static const flex_int16_t yy_accept[52] =
{ 0, { 0,
0, 0, 0, 0, 14, 12, 11, 11, 8, 12, 0, 0, 0, 0, 14, 12, 11, 11, 8, 12,
12, 12, 12, 9, 9, 12, 6, 13, 13, 0, 12, 12, 12, 9, 9, 12, 6, 13, 13, 0,
@ -393,7 +391,7 @@ static yyconst flex_int16_t yy_accept[52] =
0 0
} ; } ;
static yyconst flex_int32_t yy_ec[256] = static const YY_CHAR yy_ec[256] =
{ 0, { 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1,
@ -425,14 +423,14 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1 1, 1, 1, 1, 1
} ; } ;
static yyconst flex_int32_t yy_meta[29] = static const YY_CHAR yy_meta[29] =
{ 0, { 0,
1, 2, 3, 2, 1, 1, 2, 1, 4, 4, 1, 2, 3, 2, 1, 1, 2, 1, 4, 4,
1, 1, 5, 5, 5, 1, 6, 6, 6, 2, 1, 1, 5, 5, 5, 1, 6, 6, 6, 2,
6, 6, 6, 2, 2, 2, 2, 2 6, 6, 6, 2, 2, 2, 2, 2
} ; } ;
static yyconst flex_int16_t yy_base[58] = static const flex_int16_t yy_base[58] =
{ 0, { 0,
0, 0, 119, 118, 122, 125, 125, 125, 125, 97, 0, 0, 119, 118, 122, 125, 125, 125, 125, 97,
18, 21, 29, 31, 25, 104, 48, 125, 114, 83, 18, 21, 29, 31, 25, 104, 48, 125, 114, 83,
@ -442,7 +440,7 @@ static yyconst flex_int16_t yy_base[58] =
125, 95, 100, 106, 109, 110, 113 125, 95, 100, 106, 109, 110, 113
} ; } ;
static yyconst flex_int16_t yy_def[58] = static const flex_int16_t yy_def[58] =
{ 0, { 0,
51, 1, 52, 52, 51, 51, 51, 51, 51, 51, 51, 1, 52, 52, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 14, 51, 53, 51, 54, 51, 51, 51, 51, 51, 14, 51, 53, 51, 54, 51,
@ -452,7 +450,7 @@ static yyconst flex_int16_t yy_def[58] =
0, 51, 51, 51, 51, 51, 51 0, 51, 51, 51, 51, 51, 51
} ; } ;
static yyconst flex_int16_t yy_nxt[154] = static const flex_int16_t yy_nxt[154] =
{ 0, { 0,
6, 7, 8, 7, 9, 10, 6, 6, 11, 11, 6, 7, 8, 7, 9, 10, 6, 6, 11, 11,
12, 13, 14, 15, 15, 16, 17, 17, 17, 17, 12, 13, 14, 15, 15, 16, 17, 17, 17, 17,
@ -473,7 +471,7 @@ static yyconst flex_int16_t yy_nxt[154] =
51, 51, 51 51, 51, 51
} ; } ;
static yyconst flex_int16_t yy_chk[154] = static const flex_int16_t yy_chk[154] =
{ 0, { 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@ -495,7 +493,7 @@ static yyconst flex_int16_t yy_chk[154] =
} ; } ;
/* Table of booleans, true if rule could match eol. */ /* Table of booleans, true if rule could match eol. */
static yyconst flex_int32_t yy_rule_can_match_eol[14] = static const flex_int32_t yy_rule_can_match_eol[14] =
{ 0, { 0,
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, }; 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, };
@ -513,7 +511,7 @@ int yy_flex_debug = 0;
#define YY_MORE_ADJ 0 #define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET #define YY_RESTORE_YY_MORE_OFFSET
char *yytext; char *yytext;
#line 1 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 1 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
/** /**
* Tencent is pleased to support the open source community by making Tars available. * Tencent is pleased to support the open source community by making Tars available.
* *
@ -529,7 +527,7 @@ char *yytext;
* CONDITIONS OF ANY KIND, either express or implied. See the License for the * CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License. * specific language governing permissions and limitations under the License.
*/ */
#line 20 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 20 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
#include <map> #include <map>
#include <string> #include <string>
#include <sstream> #include <sstream>
@ -566,8 +564,9 @@ int isatty(int)
return 0; return 0;
} }
#line 567 "tars.lex.cpp"
#line 571 "tars.lex.cpp" #line 569 "tars.lex.cpp"
#define INITIAL 0 #define INITIAL 0
#define INCL 1 #define INCL 1
@ -593,11 +592,11 @@ void yyset_extra (YY_EXTRA_TYPE user_defined );
FILE *yyget_in ( void ); FILE *yyget_in ( void );
void yyset_in (FILE * in_str ); void yyset_in ( FILE * _in_str );
FILE *yyget_out ( void ); FILE *yyget_out ( void );
void yyset_out (FILE * out_str ); void yyset_out ( FILE * _out_str );
yy_size_t yyget_leng ( void ); yy_size_t yyget_leng ( void );
@ -605,7 +604,7 @@ char *yyget_text (void );
int yyget_lineno ( void ); int yyget_lineno ( void );
void yyset_lineno (int line_number ); void yyset_lineno ( int _line_number );
/* Macros after this point can all be overridden by user definitions in /* Macros after this point can all be overridden by user definitions in
* section 1. * section 1.
@ -619,18 +618,21 @@ extern int yywrap (void );
#endif #endif
#endif #endif
#ifndef YY_NO_UNPUT
static void yyunput ( int c, char *buf_ptr ); static void yyunput ( int c, char *buf_ptr );
#endif
#ifndef yytext_ptr #ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int ); static void yy_flex_strncpy ( char *, const char *, int );
#endif #endif
#ifdef YY_NEED_STRLEN #ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * ); static int yy_flex_strlen ( const char * );
#endif #endif
#ifndef YY_NO_INPUT #ifndef YY_NO_INPUT
#ifdef __cplusplus #ifdef __cplusplus
static int yyinput ( void ); static int yyinput ( void );
#else #else
@ -641,7 +643,12 @@ static int input (void );
/* Amount of stuff to slurp up with each read. */ /* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE #ifndef YY_READ_BUF_SIZE
#ifdef __ia64__
/* On IA-64, the buffer size is 16k, not 8k */
#define YY_READ_BUF_SIZE 16384
#else
#define YY_READ_BUF_SIZE 8192 #define YY_READ_BUF_SIZE 8192
#endif /* __ia64__ */
#endif #endif
/* Copy whatever the last rule matched to the standard output. */ /* Copy whatever the last rule matched to the standard output. */
@ -649,7 +656,7 @@ static int input (void );
/* This used to be an fputs(), but since the string might contain NUL's, /* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite(). * we now use fwrite().
*/ */
#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) #define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
#endif #endif
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
@ -660,7 +667,7 @@ static int input (void );
if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
{ \ { \
int c = '*'; \ int c = '*'; \
size_t n; \ yy_size_t n; \
for ( n = 0; n < max_size && \ for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \ buf[n] = (char) c; \
@ -673,7 +680,7 @@ static int input (void );
else \ else \
{ \ { \
errno=0; \ errno=0; \
while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
{ \ { \
if( errno != EINTR) \ if( errno != EINTR) \
{ \ { \
@ -728,7 +735,7 @@ extern int yylex (void);
/* Code executed at the end of each rule. */ /* Code executed at the end of each rule. */
#ifndef YY_BREAK #ifndef YY_BREAK
#define YY_BREAK break; #define YY_BREAK /*LINTED*/break;
#endif #endif
#define YY_RULE_SETUP \ #define YY_RULE_SETUP \
@ -738,14 +745,9 @@ extern int yylex (void);
*/ */
YY_DECL YY_DECL
{ {
register yy_state_type yy_current_state; yy_state_type yy_current_state;
register char *yy_cp, *yy_bp; char *yy_cp, *yy_bp;
register int yy_act; int yy_act;
#line 67 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l"
#line 749 "tars.lex.cpp"
if ( !(yy_init) ) if ( !(yy_init) )
{ {
@ -773,7 +775,13 @@ YY_DECL
yy_load_buffer_state( ); yy_load_buffer_state( );
} }
while ( 1 ) /* loops until end-of-file is reached */ {
#line 67 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
#line 782 "tars.lex.cpp"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{ {
yy_cp = (yy_c_buf_p); yy_cp = (yy_c_buf_p);
@ -789,7 +797,7 @@ YY_DECL
yy_match: yy_match:
do do
{ {
register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
if ( yy_accept[yy_current_state] ) if ( yy_accept[yy_current_state] )
{ {
(yy_last_accepting_state) = yy_current_state; (yy_last_accepting_state) = yy_current_state;
@ -799,9 +807,9 @@ yy_match:
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 52 ) if ( yy_current_state >= 52 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp; ++yy_cp;
} }
while ( yy_base[yy_current_state] != 125 ); while ( yy_base[yy_current_state] != 125 );
@ -819,7 +827,7 @@ yy_find_action:
if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
{ {
int yyl; yy_size_t yyl;
for ( yyl = 0; yyl < yyleng; ++yyl ) for ( yyl = 0; yyl < yyleng; ++yyl )
if ( yytext[yyl] == '\n' ) if ( yytext[yyl] == '\n' )
@ -840,12 +848,12 @@ do_action: /* This label is used only to access EOF actions. */
case 1: case 1:
YY_RULE_SETUP YY_RULE_SETUP
#line 69 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 69 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ BEGIN(INCL); } { BEGIN(INCL); }
YY_BREAK YY_BREAK
case 2: case 2:
YY_RULE_SETUP YY_RULE_SETUP
#line 71 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 71 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ {
if ( include_file_stack_ptr >= MAX_INCLUDE_DEPTH ) if ( include_file_stack_ptr >= MAX_INCLUDE_DEPTH )
{ {
@ -878,7 +886,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(INCL): case YY_STATE_EOF(INCL):
#line 101 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 101 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ {
--include_file_stack_ptr; --include_file_stack_ptr;
if ( include_file_stack_ptr < 0 ) if ( include_file_stack_ptr < 0 )
@ -897,14 +905,14 @@ case YY_STATE_EOF(INCL):
YY_BREAK YY_BREAK
case 3: case 3:
YY_RULE_SETUP YY_RULE_SETUP
#line 117 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 117 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ {
return TARS_SCOPE_DELIMITER; return TARS_SCOPE_DELIMITER;
} }
YY_BREAK YY_BREAK
case 4: case 4:
YY_RULE_SETUP YY_RULE_SETUP
#line 121 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 121 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ {
// C++ comment // C++ comment
bool e = false; bool e = false;
@ -925,7 +933,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 5: case 5:
YY_RULE_SETUP YY_RULE_SETUP
#line 139 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 139 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ {
// C comment // C comment
bool e = false; bool e = false;
@ -976,7 +984,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 6: case 6:
YY_RULE_SETUP YY_RULE_SETUP
#line 187 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 187 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ {
StringGrammarPtr ident = new StringGrammar; StringGrammarPtr ident = new StringGrammar;
ident->v = yytext; ident->v = yytext;
@ -987,7 +995,7 @@ YY_RULE_SETUP
case 7: case 7:
/* rule 7 can match eol */ /* rule 7 can match eol */
YY_RULE_SETUP YY_RULE_SETUP
#line 194 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 194 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ {
StringGrammarPtr ident = new StringGrammar; StringGrammarPtr ident = new StringGrammar;
ident->v = yytext; ident->v = yytext;
@ -1000,7 +1008,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 8: case 8:
YY_RULE_SETUP YY_RULE_SETUP
#line 204 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 204 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ {
StringGrammarPtr str = new StringGrammar; StringGrammarPtr str = new StringGrammar;
bool e = false; bool e = false;
@ -1115,7 +1123,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 9: case 9:
YY_RULE_SETUP YY_RULE_SETUP
#line 316 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 316 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ {
errno = 0; errno = 0;
IntergerGrammarPtr ptr = new IntergerGrammar; IntergerGrammarPtr ptr = new IntergerGrammar;
@ -1140,7 +1148,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 10: case 10:
YY_RULE_SETUP YY_RULE_SETUP
#line 338 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 338 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ {
errno = 0; errno = 0;
FloatGrammarPtr ptr = new FloatGrammar; FloatGrammarPtr ptr = new FloatGrammar;
@ -1175,7 +1183,7 @@ YY_RULE_SETUP
case 11: case 11:
/* rule 11 can match eol */ /* rule 11 can match eol */
YY_RULE_SETUP YY_RULE_SETUP
#line 369 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 369 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ {
if(yytext[0] == '\n') if(yytext[0] == '\n')
{ {
@ -1185,7 +1193,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 12: case 12:
YY_RULE_SETUP YY_RULE_SETUP
#line 376 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 376 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
{ {
if(yytext[0] < 32 || yytext[0] > 126) if(yytext[0] < 32 || yytext[0] > 126)
{ {
@ -1204,10 +1212,10 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 13: case 13:
YY_RULE_SETUP YY_RULE_SETUP
#line 392 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 392 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"
ECHO; ECHO;
YY_BREAK YY_BREAK
#line 1211 "tars.lex.cpp" #line 1218 "tars.lex.cpp"
case YY_END_OF_BUFFER: case YY_END_OF_BUFFER:
{ {
@ -1336,6 +1344,7 @@ ECHO;
"fatal flex scanner internal error--no action found" ); "fatal flex scanner internal error--no action found" );
} /* end of action switch */ } /* end of action switch */
} /* end of scanning one token */ } /* end of scanning one token */
} /* end of user's declarations */
} /* end of yylex */ } /* end of yylex */
/* yy_get_next_buffer - try to read in a new buffer /* yy_get_next_buffer - try to read in a new buffer
@ -1347,9 +1356,9 @@ ECHO;
*/ */
static int yy_get_next_buffer (void) static int yy_get_next_buffer (void)
{ {
register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
register char *source = (yytext_ptr); char *source = (yytext_ptr);
register int number_to_move, i; int number_to_move, i;
int ret_val; int ret_val;
if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@ -1378,7 +1387,7 @@ static int yy_get_next_buffer (void)
/* Try to read more data. */ /* Try to read more data. */
/* First move last chars to start of buffer. */ /* First move last chars to start of buffer. */
number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
for ( i = 0; i < number_to_move; ++i ) for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++); *(dest++) = *(source++);
@ -1414,11 +1423,12 @@ static int yy_get_next_buffer (void)
b->yy_ch_buf = (char *) b->yy_ch_buf = (char *)
/* Include room in for 2 EOB chars. */ /* Include room in for 2 EOB chars. */
yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); yyrealloc( (void *) b->yy_ch_buf,
(yy_size_t) (b->yy_buf_size + 2) );
} }
else else
/* Can't grow it, we don't own it. */ /* Can't grow it, we don't own it. */
b->yy_ch_buf = 0; b->yy_ch_buf = NULL;
if ( ! b->yy_ch_buf ) if ( ! b->yy_ch_buf )
YY_FATAL_ERROR( YY_FATAL_ERROR(
@ -1460,12 +1470,15 @@ static int yy_get_next_buffer (void)
else else
ret_val = EOB_ACT_CONTINUE_SCAN; ret_val = EOB_ACT_CONTINUE_SCAN;
if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
/* Extend the array by 50%, plus the number we really need. */ /* Extend the array by 50%, plus the number we really need. */
yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
(void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size );
if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
/* "- 2" to take care of EOB's */
YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
} }
(yy_n_chars) += number_to_move; (yy_n_chars) += number_to_move;
@ -1481,14 +1494,14 @@ static int yy_get_next_buffer (void)
static yy_state_type yy_get_previous_state (void) static yy_state_type yy_get_previous_state (void)
{ {
register yy_state_type yy_current_state; yy_state_type yy_current_state;
register char *yy_cp; char *yy_cp;
yy_current_state = (yy_start); yy_current_state = (yy_start);
for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
{ {
register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
if ( yy_accept[yy_current_state] ) if ( yy_accept[yy_current_state] )
{ {
(yy_last_accepting_state) = yy_current_state; (yy_last_accepting_state) = yy_current_state;
@ -1498,9 +1511,9 @@ static int yy_get_next_buffer (void)
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 52 ) if ( yy_current_state >= 52 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
} }
return yy_current_state; return yy_current_state;
@ -1513,10 +1526,10 @@ static int yy_get_next_buffer (void)
*/ */
static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
{ {
register int yy_is_jam; int yy_is_jam;
register char *yy_cp = (yy_c_buf_p); char *yy_cp = (yy_c_buf_p);
register YY_CHAR yy_c = 1; YY_CHAR yy_c = 1;
if ( yy_accept[yy_current_state] ) if ( yy_accept[yy_current_state] )
{ {
(yy_last_accepting_state) = yy_current_state; (yy_last_accepting_state) = yy_current_state;
@ -1526,17 +1539,19 @@ static int yy_get_next_buffer (void)
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 52 ) if ( yy_current_state >= 52 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
yy_is_jam = (yy_current_state == 51); yy_is_jam = (yy_current_state == 51);
return yy_is_jam ? 0 : yy_current_state; return yy_is_jam ? 0 : yy_current_state;
} }
static void yyunput (int c, register char * yy_bp ) #ifndef YY_NO_UNPUT
static void yyunput (int c, char * yy_bp )
{ {
register char *yy_cp; char *yy_cp;
yy_cp = (yy_c_buf_p); yy_cp = (yy_c_buf_p);
@ -1546,10 +1561,10 @@ static int yy_get_next_buffer (void)
if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
{ /* need to shift things up to make room */ { /* need to shift things up to make room */
/* +2 for EOB chars. */ /* +2 for EOB chars. */
register yy_size_t number_to_move = (yy_n_chars) + 2; yy_size_t number_to_move = (yy_n_chars) + 2;
register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
register char *source = char *source =
&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
@ -1558,7 +1573,7 @@ static int yy_get_next_buffer (void)
yy_cp += (int) (dest - source); yy_cp += (int) (dest - source);
yy_bp += (int) (dest - source); yy_bp += (int) (dest - source);
YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
YY_FATAL_ERROR( "flex scanner push-back overflow" ); YY_FATAL_ERROR( "flex scanner push-back overflow" );
@ -1575,6 +1590,8 @@ static int yy_get_next_buffer (void)
(yy_c_buf_p) = yy_cp; (yy_c_buf_p) = yy_cp;
} }
#endif
#ifndef YY_NO_INPUT #ifndef YY_NO_INPUT
#ifdef __cplusplus #ifdef __cplusplus
static int yyinput (void) static int yyinput (void)
@ -1623,7 +1640,7 @@ static int yy_get_next_buffer (void)
case EOB_ACT_END_OF_FILE: case EOB_ACT_END_OF_FILE:
{ {
if ( yywrap( ) ) if ( yywrap( ) )
return EOF; return 0;
if ( ! (yy_did_buffer_switch_on_eof) ) if ( ! (yy_did_buffer_switch_on_eof) )
YY_NEW_FILE; YY_NEW_FILE;
@ -1734,7 +1751,7 @@ static void yy_load_buffer_state (void)
/* yy_ch_buf has to be 2 characters longer than the size given because /* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters. * we need to put in 2 end-of-buffer characters.
*/ */
b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) );
if ( ! b->yy_ch_buf ) if ( ! b->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
@ -1884,7 +1901,7 @@ static void yyensure_buffer_stack (void)
* scanner will even need a stack. We use 2 instead of 1 to avoid an * scanner will even need a stack. We use 2 instead of 1 to avoid an
* immediate realloc on the next call. * immediate realloc on the next call.
*/ */
num_to_alloc = 1; num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
(num_to_alloc * sizeof(struct yy_buffer_state*) (num_to_alloc * sizeof(struct yy_buffer_state*)
); );
@ -1901,7 +1918,7 @@ static void yyensure_buffer_stack (void)
if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
/* Increase the buffer to prepare for a possible push. */ /* Increase the buffer to prepare for a possible push. */
int grow_size = 8 /* arbitrary grow size */; yy_size_t grow_size = 8 /* arbitrary grow size */;
num_to_alloc = (yy_buffer_stack_max) + grow_size; num_to_alloc = (yy_buffer_stack_max) + grow_size;
(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
@ -1931,16 +1948,16 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-2] != YY_END_OF_BUFFER_CHAR ||
base[size-1] != YY_END_OF_BUFFER_CHAR ) base[size-1] != YY_END_OF_BUFFER_CHAR )
/* They forgot to leave room for the EOB's. */ /* They forgot to leave room for the EOB's. */
return 0; return NULL;
b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
if ( ! b ) if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */
b->yy_buf_pos = b->yy_ch_buf = base; b->yy_buf_pos = b->yy_ch_buf = base;
b->yy_is_our_buffer = 0; b->yy_is_our_buffer = 0;
b->yy_input_file = 0; b->yy_input_file = NULL;
b->yy_n_chars = b->yy_buf_size; b->yy_n_chars = b->yy_buf_size;
b->yy_is_interactive = 0; b->yy_is_interactive = 0;
b->yy_at_bol = 1; b->yy_at_bol = 1;
@ -1960,10 +1977,10 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
* @note If you want to scan bytes that may contain NUL values, then use * @note If you want to scan bytes that may contain NUL values, then use
* yy_scan_bytes() instead. * yy_scan_bytes() instead.
*/ */
YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) YY_BUFFER_STATE yy_scan_string (const char * yystr )
{ {
return yy_scan_bytes(yystr,strlen(yystr) ); return yy_scan_bytes( yystr, (int) strlen(yystr) );
} }
/** Setup the input buffer state to scan the given bytes. The next call to yylex() will /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
@ -1973,15 +1990,15 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
* *
* @return the newly allocated buffer state object. * @return the newly allocated buffer state object.
*/ */
YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, yy_size_t _yybytes_len )
{ {
YY_BUFFER_STATE b; YY_BUFFER_STATE b;
char *buf; char *buf;
yy_size_t n; yy_size_t n;
int i; yy_size_t i;
/* Get memory for full buffer, including space for trailing EOB's. */ /* Get memory for full buffer, including space for trailing EOB's. */
n = _yybytes_len + 2; n = (yy_size_t) (_yybytes_len + 2);
buf = (char *) yyalloc( n ); buf = (char *) yyalloc( n );
if ( ! buf ) if ( ! buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
@ -2007,9 +2024,9 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len
#define YY_EXIT_FAILURE 2 #define YY_EXIT_FAILURE 2
#endif #endif
static void yy_fatal_error (yyconst char* msg ) static void yynoreturn yy_fatal_error (const char* msg )
{ {
(void) fprintf( stderr, "%s\n", msg ); fprintf( stderr, "%s\n", msg );
exit( YY_EXIT_FAILURE ); exit( YY_EXIT_FAILURE );
} }
@ -2020,7 +2037,7 @@ static void yy_fatal_error (yyconst char* msg )
do \ do \
{ \ { \
/* Undo effects of setting up yytext. */ \ /* Undo effects of setting up yytext. */ \
int yyless_macro_arg = (n); \ yy_size_t yyless_macro_arg = (n); \
YY_LESS_LINENO(yyless_macro_arg);\ YY_LESS_LINENO(yyless_macro_arg);\
yytext[yyleng] = (yy_hold_char); \ yytext[yyleng] = (yy_hold_char); \
(yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_c_buf_p) = yytext + yyless_macro_arg; \
@ -2075,29 +2092,29 @@ char *yyget_text (void)
} }
/** Set the current line number. /** Set the current line number.
* @param line_number * @param _line_number line number
* *
*/ */
void yyset_lineno (int line_number ) void yyset_lineno (int _line_number )
{ {
yylineno = line_number; yylineno = _line_number;
} }
/** Set the input stream. This does not discard the current /** Set the input stream. This does not discard the current
* input buffer. * input buffer.
* @param in_str A readable stream. * @param _in_str A readable stream.
* *
* @see yy_switch_to_buffer * @see yy_switch_to_buffer
*/ */
void yyset_in (FILE * in_str ) void yyset_in (FILE * _in_str )
{ {
yyin = in_str ; yyin = _in_str ;
} }
void yyset_out (FILE * out_str ) void yyset_out (FILE * _out_str )
{ {
yyout = out_str ; yyout = _out_str ;
} }
int yyget_debug (void) int yyget_debug (void)
@ -2105,9 +2122,9 @@ int yyget_debug (void)
return yy_flex_debug; return yy_flex_debug;
} }
void yyset_debug (int bdebug ) void yyset_debug (int _bdebug )
{ {
yy_flex_debug = bdebug ; yy_flex_debug = _bdebug ;
} }
static int yy_init_globals (void) static int yy_init_globals (void)
@ -2119,10 +2136,10 @@ static int yy_init_globals (void)
/* We do not touch yylineno unless the option is enabled. */ /* We do not touch yylineno unless the option is enabled. */
yylineno = 1; yylineno = 1;
(yy_buffer_stack) = 0; (yy_buffer_stack) = NULL;
(yy_buffer_stack_top) = 0; (yy_buffer_stack_top) = 0;
(yy_buffer_stack_max) = 0; (yy_buffer_stack_max) = 0;
(yy_c_buf_p) = (char *) 0; (yy_c_buf_p) = NULL;
(yy_init) = 0; (yy_init) = 0;
(yy_start) = 0; (yy_start) = 0;
@ -2131,8 +2148,8 @@ static int yy_init_globals (void)
yyin = stdin; yyin = stdin;
yyout = stdout; yyout = stdout;
#else #else
yyin = (FILE *) 0; yyin = NULL;
yyout = (FILE *) 0; yyout = NULL;
#endif #endif
/* For future reference: Set errno on error, since we are called by /* For future reference: Set errno on error, since we are called by
@ -2168,18 +2185,19 @@ int yylex_destroy (void)
*/ */
#ifndef yytext_ptr #ifndef yytext_ptr
static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) static void yy_flex_strncpy (char* s1, const char * s2, int n )
{ {
register int i;
int i;
for ( i = 0; i < n; ++i ) for ( i = 0; i < n; ++i )
s1[i] = s2[i]; s1[i] = s2[i];
} }
#endif #endif
#ifdef YY_NEED_STRLEN #ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * s ) static int yy_flex_strlen (const char * s )
{ {
register int n; int n;
for ( n = 0; s[n]; ++n ) for ( n = 0; s[n]; ++n )
; ;
@ -2189,11 +2207,12 @@ static int yy_flex_strlen (yyconst char * s )
void *yyalloc (yy_size_t size ) void *yyalloc (yy_size_t size )
{ {
return (void *) malloc( size ); return malloc(size);
} }
void *yyrealloc (void * ptr, yy_size_t size ) void *yyrealloc (void * ptr, yy_size_t size )
{ {
/* The cast to (char *) in the following accommodates both /* The cast to (char *) in the following accommodates both
* implementations that use char* generic pointers, and those * implementations that use char* generic pointers, and those
* that use void* generic pointers. It works with the latter * that use void* generic pointers. It works with the latter
@ -2201,7 +2220,7 @@ void *yyrealloc (void * ptr, yy_size_t size )
* any pointer type to void*, and deal with argument conversions * any pointer type to void*, and deal with argument conversions
* as though doing an assignment. * as though doing an assignment.
*/ */
return (void *) realloc( (char *) ptr, size ); return realloc(ptr, size);
} }
void yyfree (void * ptr ) void yyfree (void * ptr )
@ -2211,8 +2230,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables" #define YYTABLES_NAME "yytables"
#line 392 "/home/worker/Centos_share/src/TarsCloud/UP-Tars/tars_kiven_dev/TarsCpp/tools/tarsgrammar/tars.l" #line 392 "/Users/jarod/centos/Tars/framework/tarscpp/tools/tarsgrammar/tars.l"

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,14 @@
/* A Bison parser, made by GNU Bison 2.7. */ /* A Bison parser, made by GNU Bison 2.3. */
/* Bison interface for Yacc-like parsers in C /* Skeleton interface for Bison's Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation; either version 2, or (at your option)
(at your option) any later version. any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -15,7 +16,9 @@
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */ along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
/* As a special exception, you may create a larger work that contains /* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work part or all of the Bison parser skeleton and distribute that work
@ -30,16 +33,6 @@
This special exception was added by the Free Software Foundation in This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */ version 2.2 of Bison. */
#ifndef YY_YY_TARS_TAB_HPP_INCLUDED
# define YY_YY_TARS_TAB_HPP_INCLUDED
/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG 1
#endif
#if YYDEBUG
extern int yydebug;
#endif
/* Tokens. */ /* Tokens. */
#ifndef YYTOKENTYPE #ifndef YYTOKENTYPE
# define YYTOKENTYPE # define YYTOKENTYPE
@ -79,29 +72,48 @@ extern int yydebug;
BAD_CHAR = 288 BAD_CHAR = 288
}; };
#endif #endif
/* Tokens. */
#define TARS_VOID 258
#define TARS_STRUCT 259
#define TARS_BOOL 260
#define TARS_BYTE 261
#define TARS_SHORT 262
#define TARS_INT 263
#define TARS_DOUBLE 264
#define TARS_FLOAT 265
#define TARS_LONG 266
#define TARS_STRING 267
#define TARS_VECTOR 268
#define TARS_MAP 269
#define TARS_NAMESPACE 270
#define TARS_INTERFACE 271
#define TARS_IDENTIFIER 272
#define TARS_OUT 273
#define TARS_OP 274
#define TARS_KEY 275
#define TARS_ROUTE_KEY 276
#define TARS_REQUIRE 277
#define TARS_OPTIONAL 278
#define TARS_CONST_INTEGER 279
#define TARS_CONST_FLOAT 280
#define TARS_FALSE 281
#define TARS_TRUE 282
#define TARS_STRING_LITERAL 283
#define TARS_SCOPE_DELIMITER 284
#define TARS_CONST 285
#define TARS_ENUM 286
#define TARS_UNSIGNED 287
#define BAD_CHAR 288
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef int YYSTYPE; typedef int YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
#endif #endif
extern YYSTYPE yylval; extern YYSTYPE yylval;
#ifdef YYPARSE_PARAM
#if defined __STDC__ || defined __cplusplus
int yyparse (void *YYPARSE_PARAM);
#else
int yyparse ();
#endif
#else /* ! YYPARSE_PARAM */
#if defined __STDC__ || defined __cplusplus
int yyparse (void);
#else
int yyparse ();
#endif
#endif /* ! YYPARSE_PARAM */
#endif /* !YY_YY_TARS_TAB_HPP_INCLUDED */

View File

@ -1,6 +1,6 @@
// ********************************************************************** // **********************************************************************
// This file was generated by a TARS parser! // This file was generated by a TARS parser!
// TARS version 3.0.3. // TARS version 3.0.4.
// ********************************************************************** // **********************************************************************
#ifndef __HELLO_H_ #ifndef __HELLO_H_

View File

@ -111,7 +111,7 @@ TEST_F(UtilEpollServerTest, RunTcp)
TEST_F(UtilEpollServerTest, RunEnableManualListen) TEST_F(UtilEpollServerTest, RunEnableManualListen)
{ {
int i = 0; // int i = 0;
for(int i = 0; i <= TC_EpollServer::NET_THREAD_MERGE_HANDLES_CO; i++) for(int i = 0; i <= TC_EpollServer::NET_THREAD_MERGE_HANDLES_CO; i++)
{ {
MyTcpServer server; MyTcpServer server;

35
unit-test/util/test_tc_port.cpp Executable file
View File

@ -0,0 +1,35 @@
#include "util/tc_port.h"
#include "util/tc_common.h"
#include <cmath>
#include "gtest/gtest.h"
#include <iostream>
#include <vector>
using namespace std;
using namespace tars;
class UtilPortTest : public testing::Test
{
public:
//添加日志
static void SetUpTestCase()
{
}
static void TearDownTestCase()
{
}
virtual void SetUp() //TEST跑之前会执行SetUp
{
}
virtual void TearDown() //TEST跑完之后会执行TearDown
{
}
};
TEST_F(UtilPortTest, testExec)
{
string err;
string result = TC_Port::exec("ls '*.txt'", err);
cout << result << endl;
}

View File

@ -369,6 +369,12 @@ public:
*/ */
void parse(const string &desc); void parse(const string &desc);
/*
* endpoint(tcp -h xxx -p yyy:udp -h xxx -p yyy:ssl -h xxx -p xxx)
* ipv6地址
*/
static vector<string> sepEndpoint(const string& sEndpoints);
private: private:
void init(const string& host, int port, int timeout, EType type, int grid, int qos, int weight, unsigned int weighttype, AUTH_TYPE authType); void init(const string& host, int port, int timeout, EType type, int grid, int qos, int weight, unsigned int weighttype, AUTH_TYPE authType);

View File

@ -2,6 +2,7 @@
#define __TC_PORT_H #define __TC_PORT_H
#include "util/tc_platform.h" #include "util/tc_platform.h"
#include "util/tc_ex.h"
#if TARGET_PLATFORM_LINUX || TARGET_PLATFORM_IOS #if TARGET_PLATFORM_LINUX || TARGET_PLATFORM_IOS
@ -36,6 +37,15 @@ using namespace std;
namespace tars namespace tars
{ {
/**
* @brief port异常类
*/
struct TC_Port_Exception : public TC_Exception
{
TC_Port_Exception(const string &buffer) : TC_Exception(buffer){};
~TC_Port_Exception() throw() {};
};
class TC_Port class TC_Port
{ {
public: public:
@ -81,13 +91,46 @@ public:
static int64_t getpid(); static int64_t getpid();
/**
*
* @param name
* @return
*/
static std::string getEnv(const std::string &name); static std::string getEnv(const std::string &name);
/**
*
* @param name
* @param value
*/
static void setEnv(const std::string &name, const std::string &value); static void setEnv(const std::string &name, const std::string &value);
/**
*
* @param cmd
* @param err
* @return
*/
static std::string exec(const char* cmd); static std::string exec(const char* cmd);
/**
* (+)
* @param cmd
* @param err
* @return:
*/
static std::string exec(const char* cmd, std::string &err); static std::string exec(const char* cmd, std::string &err);
/**
* fork子进程并运行程序
* @param sExe:
* @param sPwdPath:
* @param sRollLogPath: (stdout会重定向到滚动日志),
* @param vOptions:
* @return id: ==0: , >0: (pid), TC_Port_Exception
*/
static int64_t forkExec(const string& sExe, const string& sPwdPath, const string& sRollLogPath, const vector<string>& vOptions);
/** /**
* ctrl+c回调事件(SIGINT/CTRL_C_EVENT) * ctrl+c回调事件(SIGINT/CTRL_C_EVENT)
* @param callback * @param callback

View File

@ -250,7 +250,6 @@ public:
*/ */
void init(size_t num); void init(size_t num);
/** /**
* @brief 线, 线 * @brief 线, 线
*/ */

View File

@ -256,6 +256,51 @@ void TC_Endpoint::parse(const string &str)
// _authType = 1; // _authType = 1;
} }
vector<string> TC_Endpoint::sepEndpoint(const string& sEndpoints)
{
vector<string> vEndpoints;
bool flag = false;
string::size_type startPos = 0;
string::size_type sepPos = 0;
for(string::size_type pos = 0; pos < sEndpoints.size(); pos++)
{
if(sEndpoints[pos] == ':' && !flag )
{
sepPos = pos;
flag = true;
}
else if(flag)
{
if(sEndpoints[pos] == ' ')
{
continue;
}
if(TC_Port::strncasecmp("tcp", (sEndpoints.c_str() + pos), 3) == 0
|| TC_Port::strncasecmp("udp", (sEndpoints.c_str() + pos), 3) == 0
|| TC_Port::strncasecmp("ssl", (sEndpoints.c_str() + pos), 3) == 0)
{
string ep = TC_Common::trim(string(sEndpoints.c_str() + startPos, sepPos - startPos));
if(!ep.empty()) {
vEndpoints.push_back(ep);
}
startPos = pos;
}
flag = false;
}
}
string ep = sEndpoints.substr(startPos);
if(!ep.empty()) {
vEndpoints.push_back(ep);
}
return vEndpoints;
}
/*************************************TC_TCPClient**************************************/ /*************************************TC_TCPClient**************************************/
TC_ClientSocket::TC_ClientSocket() : _port(0),_timeout(3000) TC_ClientSocket::TC_ClientSocket() : _port(0),_timeout(3000)

View File

@ -272,6 +272,155 @@ std::string TC_Port::exec(const char* cmd, std::string &err)
return fileData; return fileData;
} }
int64_t TC_Port::forkExec(const string& sExePath, const string& sPwdPath, const string& sRollLogPath, const vector<string>& vOptions)
{
vector<string> vEnvs;
if (sExePath.empty())
{
throw TC_Port_Exception("[TC_Port::forkExec] server exe: " + sExePath + " is empty.");
}
#if TARGET_PLATFORM_LINUX || TARGET_PLATFORM_IOS
if (TC_File::isFileExistEx(sExePath) && !TC_File::canExecutable(sExePath))
{
TC_File::setExecutable(sExePath, true);
}
#endif
//
// Current directory
//
const char *pwdCStr = sPwdPath.c_str();
#if TARGET_PLATFORM_WINDOWS
vector<string> vArgs;
vArgs.insert(vArgs.end(), vOptions.begin(), vOptions.end());
string path;
for (vector<string>::const_iterator p = vArgs.begin(); p != vArgs.end(); ++p)
{
path += " " + *p;
}
string command = sExePath + " " + path;
TCHAR p[1024];
strncpy_s(p, sizeof(p) / sizeof(TCHAR), command.c_str(), command.length());
STARTUPINFO si;
memset(&si, 0, sizeof(si));
PROCESS_INFORMATION pi;
memset(&pi, 0, sizeof(pi));
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE; //TRUE表示显示创建的进程的窗口
if (!CreateProcessA(
NULL, // 指向一个NULL结尾的、用来指定可执行模块的宽字节字符串
p, // 命令行字符串
NULL, // 指向一个SECURITY_ATTRIBUTES结构体这个结构体决定是否返回的句柄可以被子进程继承。
NULL, // 如果lpProcessAttributes参数为空NULL那么句柄不能被继承。<同上>
false, // 指示新进程是否从调用进程处继承了句柄。
CREATE_NEW_CONSOLE|CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, // 指定附加的、用来控制优先类和进程的创建的标
NULL, // 指向一个新进程的环境块。如果此参数为空,新进程使用调用进程的环境
pwdCStr, // 指定子进程的工作路径
&si, // 决定新进程的主窗体如何显示的STARTUPINFO结构体
&pi // 接收新进程的识别信息的PROCESS_INFORMATION结构体
))
{
string err = TC_Exception::parseError(TC_Exception::getSystemCode());
throw TC_Port_Exception("[TC_Port::forkExec] CreateProcessA exception:" + err);
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return pi.dwProcessId;
#else
vector<string> vArgs;
vArgs.push_back(sExePath);
vArgs.insert(vArgs.end(), vOptions.begin(), vOptions.end());
int argc = static_cast<int>(vArgs.size());
char **argv = static_cast<char **>(malloc((argc + 1) * sizeof(char *)));
int i = 0;
for (vector<string>::const_iterator p = vArgs.begin(); p != vArgs.end(); ++p, ++i)
{
assert(i < argc);
argv[i] = strdup(p->c_str());
}
assert(i == argc);
argv[argc] = 0;
pid_t pid = fork();
if (pid == -1)
{
throw TC_Port_Exception("[TC_Port::forkExec] fork exception");
}
if (pid == 0)
{
int maxFd = static_cast<int>(sysconf(_SC_OPEN_MAX));
for (int fd = 3; fd < maxFd; ++fd)
{
close(fd);
}
//server stdcout 日志在滚动日志显示
if (!sRollLogPath.empty())
{
TC_File::makeDirRecursive(TC_File::extractFilePath(sRollLogPath));
#if TARGET_PLATFORM_IOS
if ((freopen(sRollLogPath.c_str(), "ab", stdout)) != NULL && (freopen(sRollLogPath.c_str(), "ab", stderr)) != NULL)
#else
if ((freopen64(sRollLogPath.c_str(), "ab", stdout)) != NULL && (freopen64(sRollLogPath.c_str(), "ab", stderr)) != NULL)
#endif
{
cout << argv[0] << " redirect stdout and stderr to " << sRollLogPath << endl;
}
else
{
//重定向失败 直接退出
exit(0);
}
}
else
{
cout << argv[0] << " cannot redirect stdout and stderr to log file sRollLogPath is empty" << endl;
}
// for_each(vEnvs.begin(), vEnvs.end(), EnvVal());
if (strlen(pwdCStr) != 0)
{
if (chdir(pwdCStr) == -1)
{
cerr << argv[0] << " cannot change working directory to " << pwdCStr << "|errno=" << errno << endl;
}
}
if (execvp(argv[0], argv) == -1)
{
cerr << "cannot execute " << argv[0] << "|errno=" << strerror(errno) << endl;
}
exit(0);
}
else
{
for (i = 0; argv[i]; i++)
{
free(argv[i]);
}
free(argv);
}
return pid;
#endif
}
shared_ptr<TC_Port::SigInfo> TC_Port::_sigInfo = std::make_shared<TC_Port::SigInfo>(); shared_ptr<TC_Port::SigInfo> TC_Port::_sigInfo = std::make_shared<TC_Port::SigInfo>();