📄 wtx.c
字号:
/* wtx.c - WTX C library *//* Copyright 1994-2001 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------06k,08mar02,c_c Reworked license management.06j,04mar02,fle SPR#73615 fix : wtxResultFree () may free already freed memory06i,17dec01,c_c Fixed LM file descriptor leak problem.06h,04dec01,sn Added wtxDefaultDemanglerStyle06g,05dec01,fle added Object directory retirving to wtxCpuInfoGet ()06f,18oct01,c_c Updated feature name in license check.06e,11oct01,c_c Added license bypass.06d,03oct01,c_c Added license check. Added wtxTargetToolNameGet API.06c,28sep01,fle Fixed wtxResultFree () to not return WTX_ERROR06b,15jun01,pch Add new WTX_TS_INFO_GET_V2 service to handle WTX_RT_INFO change (from BOOL32 hasFpp to UINT32 hasCoprocessor) without breaking existing clients.06a,30may01,kab Fixed wtxTgtHasDsp comment05z,09may01,dtr Changing wtxTgtHasFpp , altivec for new format introduced by hasCoprocessor. Also adding in wtxTgtHasDsp.05y,21mar01,dtr Updating comments in code.05x,06feb01,dtr Adding check for altivec support.05w,18jan01,dtr Adding altivec register support.05v,24nov99,fle SPR#28684 fix : made wtxToolAttach() update the target server key if the first adapter is not the good one05u,22jun99,fle made wtx compile on target side05t,02apr99,fle fixed a problem with wtxServiceAdd that was always allocating wdb service description even if all the wdb parameters were set to NULL SPR 6736705s,31mar99,fle doc : specified that wtxFileOpen does not support RDONLY flag under WIN3205r,23feb99,c_c Implemented an API to get the target IP address (SPR #25044).05q,11feb99,c_c Authorize accesses to target's address 0 (SPR #25049).05p,18jan99,c_c documented WTX_CONSOLE_LINES setting (SPR 6209).05o,08jan99,fle doc : added REGISTRY_NAME_CLASH to wtxRegister possible errors05n,01dec98,pcn SPR #22867: complete the fix: in wtxObjModuleLoad(), copy the address fields of the input parameter in the protocol input value.05m,30nov98,pcn Moved a badly placed #ifdef HOST for the symbol table synchronization (SPR #22867).05l,05nov98,fle doc : made wtxLogging been linked correctly05k,02nov98,c_c Modified WTX_ERR_SVR_EINVAL error explanation for Load requests.05j,16sep98,fle Modified wtxMemDisassemble doc since its new output format05i,22sep98,l_k Removed wtxFindExecutable.05h,22sep98,pcn Change the returned error in wtxObjModuleLoadProgressReport.05g,18sep98,l_k Implement wtxFindExecutable.05f,18sep98,pcn Implement wtxObjModuleInfoAndPathGet.05e,18sep98,pcn Removed memory leak when asynchronous load is used.05d,04sep98,pcn Added WTX_EVENT_EVTPT_ADDED, WTX_EVENT_EVTPT_DELETED.05c,10sep98,pcn Remove wtxResultFree from wtxObjModuleLoadStart and wtxObjModuleLoadProgressReport.05b,18aug98,pcn Use WTX_MSG_EVTPT_LIST_2 and doc updated.05a,20jul98,pcn wtxObjModuleLoadProgressReport doc updated.04z,20jul98,pcn Added evtptNum and toolId in the wtxEventpointListGet return list.04y,10jul98,fle removed wpwrLog calls in wtxCpuInfoGet function04x,09jul98,fle re-added wtxCommandSend04w,08jul98,pcn Added undefined symbols list in wtxObjModuleLoadProgressReport result.04v,06jul98,pcn Removed wtxObjModuleUndefSymAdd from API.04u,02jul98,pcn Removed memory leak from wtxObjModuleLoadStart and wtxObjModuleLoadProgressReport.04t,19jun98,pcn Added wtxObjModuleLoadStart, wtxObjModuleLoadProgressReport, wtxObjModuleLoadCancel.04s,11jun98,pcn Added an input parameter at wtxEventListGet.04r,09jun98,jmp added wtxAsyncResultFree to free memory used by a wtxAsyncEventGet() call result, imported wtxAsyncEventGet() from wtxAsync.c.04q,03jun98,pcn Added 2 requests: wtxSymListByModuleNameGet and wtxSymListByModuleIdGet.04p,25may98,pcn Changed wtxTsLock in wtxTsTimedLock, wtxEventpointList_2 in wtxEventpointListGet, wtxObjModuleUnload_2 in wtxObjModuleUnloadByName.04o,20may98,jmp modified wtxAsyncInitialize() call, now if no user defined function is given then received events are just stored in the asynchronous event list, those events can be get using wtxAsyncEventGet().04n,19may98,rhp doc: corrected wtxLogging example (supplied missing .CE)04m,07may98,pcn Re-added WTX_TS_KILLED.04l,30apr98,dbt added wtxHwBreakpointAdd and wtxEventpointAdd.04k,28apr98,pcn Removed wtxCommandSend from C API.04j,24apr98,pcn Removed wtxEventGetThread.04i,23apr98,fle added CPU name retrieving to wtxCpuInfoGet04h,23apr98,fle added ifdef HOST around wtxCpuInfoGet + added warning for HOST defined functions04g,08apr98,fle doc: updated and added examples to wtxMemDisassemble + added wtxCpuInfoGet function.04f,02apr98,pcn WTX 2: added new error codes.04e,31mar98,fle made wtxToolAttach() always call for wtxInfo() + made some history cleanup04d,27mar98,pcn Moved #ifdef HOST after functions parameters in order to generate manual.04c,26mar98,pcn Changed strdup in strcpy.04b,26mar98,pcn WTX 2: Added an event filter for WTX logging. Added new behavior of wtxObjModuleLoad_2: a file can be opened locally or by the target server.04a,24mar98,dbt added wtxContextStatusGet.03z,17mar98,pcn WTX 2: wtxObjModuleChecksum: set filename to WTX_ALL_MODULE_CHECK if moduleId is set to WTX_ALL_MODULE_ID.03y,09mar98,pcn WTX 2: added a test of <fileName> in wtxLogging.03x,06mar98,pcn WTX 2: changed the width test in wtxMemWidthRead/Write.03w,05mar98,fle got rid of wtxRegistryPing() routine03v,03mar98,pcn WTX 2: added fcntl.h for file constants.03u,03mar98,pcn Added #ifdef for HOST side.03t,02mar98,pcn WTX 2: added wtxAsyncNotifyEnable, wtxCacheTextUpdate, wtxEventListGet, wtxEventpointList_2, wtxLogging, wtxMemWidthRead, wtxMemWidthWrite, wtxObjModuleChecksum, wtxObjModuleLoad_2, wtxObjModuleUnload_2, wtxUnregisterForEvent, wtxThreadSigHandle. Changed WTX_EVT_BREAKPOINT in WTX_EVT_HW_BP, wtxEventAdd, wtxResultFree, wtxObjModuleUnload, wtxEventToStrType, wtxTargetRtTypeGet, wtxTargetCpuTypeGet.03s,29jan98,fle made wtxToolAttach return hWtx->errCode when unable to attch tool (due to implementation of wtxregdSvrPing()) + added wtxRegistryPing()03r,28jan98,c_c Packed all wtxEvtxxxStringGet routines into one.03q,29aug97,fle Adding the WTX_MEM_DISASSEMBLE service + Updating NOTE written after the "forward declarations" + made wtxSymListGet() usable by the WTX TCL API + moved tsSymListFree() from tgtsvr/server/tssymlk.c in symLisFree()03p,06dec96,dgp doc: correct spelling03o,21nov96,dgp doc: change Object-Module, correct italic and bold formatting03n,20nov96,dgp doc: correct WTX_THROW() to WTX_THROW03m,18nov96,dgp doc: final changes, wtxGopherEval, wtxErrExceptionFunc, wtxSymFind03l,12nov96,c_s remove use of strerror on sun4-sunos403k,11nov96,dgp doc: "final" formatting for API Guide03j,30sep96,elp put in share, adapted to be compiled on target side (added wtxSymAddWithGroup() and wtxObjModuleUndefSymAdd()).03i,19sep96,p_m fixed syntax error in wtxMemAlign() introduced by last doc modification03h,17sep96,dgp doc: API Guide updates, particularly wtxGopherEval, wtxObjectModuleLoad03g,05sep96,p_m Documented wtxToolIdGet() and wtxServiceAdd()03f,05sep96,elp changed val in wtxMemSet() from UINT8 to UINT32 (SPR# 6894).03e,02sep96,jmp added wtxToolIdGet(), added WTX RPC service number argument to wtxServiceAdd().03d,30aug96,elp Changed wpwrVersionGet() into wtxTsVersionGet().03c,26jul96,pad Changed order of include files (AIX port).03b,26jul96,dbt fixed a memory leak. Added serverDescFree to clean servor descriptor. 03a,15jul96,dbt supressed call to wtxExchangeDelete() and wtxExchangeTerminate() in exchange() in case of server exchange handle (SPR #6862).01a,24dec94,jcf written.*//*DESCRIPTIONThis module implements a C-language transport-neutral interface to the WTX messaging protocol. A tool must always call wtxInitialize() to initialize a handle that isused in all further WTX calls. The tool can then attach to a targetserver using a call to wtxToolAttach(). Each WTX handle can only beconnected to one server at a time. After a successful call ofwtxToolAttach(), the handle is considered bound to the specified targetserver until a call of wtxToolDetach() is made; then the handle can be attached to a new target server. When thehandle is no longer required, call wtxTerminate() to release anyinternal storage used by the handle. The handle must not be used afterwtxTerminate() has been called..CS#include "wtx.h" HWTX hWtx; /@ initialize WTX session handle @/ if (wtxInitialize (&hWtx) != WTX_OK) return (WTX_ERROR); /@ attach to Target Server named "soubirou" @/ if (wtxToolAttach (hWtx, "soubirou", "wtxApp") != WTX_OK) return (WTX_ERROR); /@ register for events we want to hear about (all events here) @/ if (wtxRegisterForEvent (hWtx, ".*") != WTX_OK) { wtxToolDetach (hWtx); return (WTX_ERROR); } /@ core of the WTX application @/ . . . . /@ detach form the Target Server @/ wtxToolDetach (hWtx); /@ terminate WTX session @/ wtxTerminate (hWtx);.CEMost WTX calls return either a pointer value which is NULL on error or aSTATUS value which is WTX_ERROR if an error occurs. A descriptive stringcan be obtained for the last error that occurred by callingwtxErrMsgGet().Note that virtually all WTX calls can fail due to an error in the messagetransport layer used to carry out WTX requests. Transport errors thatare non-recoverable result in the tool being detached from the serverand an error code of WTX_ERR_API_TOOL_DISCONNECTED. If a non-fatalerror occurs, WTX_ERR_API_REQUEST_FAILED is set, except in the case ofa timeout. In that case the error is WTX_ERR_API_REQUEST_TIMED_OUT. Inthe non-fatal cases, the call may be retried. In the fatal case, retrying thecall results in the error WTX_ERR_API_NOT_CONNECTED.All API calls attempt to check the validity of the API handle provided.The error WTX_ERR_API_INVALID_HANDLE indicates a bad handle. Otherpointer arguments are checked and WTX_ERR_API_INVALID_ARG indicates abad argument value such as a NULL pointer. API calls that require thehandle to be connected to a target server generate theWTX_ERR_API_NOT_CONNECTED error if the handle is not connected.In addition to simple error return values, the C API allows errorhandlers to be installed on a per handle basis usingwtxErrHandlerAdd(). If an error occurs, the last installedhandler is called first. If it returns a TRUE value, then anypreviously installed handlers are called in reverse order, in other words,last installed, first called. The C API includes macros that use thepredefined error handler wtxErrExceptionFunc() to support C++ styleexception catching. Once an API handle has been initialized usingwtxInitiliaze(), it can be used in the WTX_TRY macro to cause APIerrors to be treated like exceptions. When this is done, an API callthat would normally return an error code actually causes a jumpstraight to the nearest 'catch' handler as specified using a WTX_CATCHor WTX_CATCH_ALL macro. The previous example is shown below using thisstyle of error handling..CS#include "wtx.h" HWTX hWtx; /@ initialize WTX session handle @/ if (wtxInitialize (&hWtx) != WTX_OK) return (WTX_ERROR); /@ Start a block in which errors will be "caught" by a catch block @/ WTX_TRY (hWtx) { /@ attach to Target Server named "soubirou" @/ wtxToolAttach (hWtx, "soubirou", "wtxApp"); /@ register for events we want to hear about (all events here) @/ wtxRegisterForEvent (hWtx, ".*"); /@ core of the WTX application @/ . . . . /@ detach form the Target Server @/ wtxToolDetach (hWtx); } /@ Catch a specific error, WTX_ERR_API_NOT_CONNECTED @/ WTX_CATCH (hWtx, WTX_ERR_API_NOT_CONNECTED) { fprintf (stderr, "Connection lost, exiting\n"); wtxTerminate (hWtx); exit (0); } /@ Catch any other errors in one handler and print error message @/ WTX_CATCH_ALL (hWtx) fprintf (stderr, "%s\n", wtxErrMsgGet (hWtx)); /@ Finish the try block and resume normal error handling @/ WTX_TRY_END (hWtx); /@ * Normal error handling is now restored - the WTX_TRY_END macro * must be executed for this to occur. @/ /@ wtxTerminate() will also detach the tool if already attached @/ wtxTerminate (hWtx);.CEIn certain circumstances, it may be useful to generate a user-definederror or to simulate an API error from within user code. This may bedone using the WTX_THROW macro, which causes execution to jump to thenearest handler for the error thrown or to the nearest "catch all"handler.Many of the C API calls are very similar to the equivalent WTXprotocol calls and the user may also refer to the appropriate sectionin the \f2WTX Protocol\fP reference for further information.INCLUDE FILES: wtx.h*//*INTERNAL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! WARNING !! ------- !! !! This file is to be compiled from both host and target side. When adding new !! functions, please care if it is target oriented or not, and try to compile !! the target/src/wtx directory. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*//* includes */#include <string.h>#ifdef HOST# include <stdlib.h># include <stdio.h># include <fcntl.h># ifndef WIN32# include <unistd.h># endif# ifdef SUN4_SUNOS4 extern int sys_nerr; extern char * sys_errlist;# endif /* SUN4_SUNOS4 */#ifndef _DEBUG#include "licmgt.h"#endif /* _DEBUG */#endif /* HOST */#include "private/wtxp.h" /* Private (and public) headers */#include "wtxexch.h"#if (! defined WIN32) && (defined HOST)# include "win32ProfileLib.h"#endif /* WIN32 *//* * These five include files are here because this implementation * of the WTX API is based on RPC calls. Full implementation of the * "exchange" layer would remove this transport dependency */#include "wtxrpc.h" /* For handling wtxregd RPC key routines */#include "wtxxdr.h" /* For WTX XDR routines */#include <errno.h>#include <sys/stat.h>#include <arpa/inet.h> /* inet_ntoa */#ifdef HOST# include <netdb.h> /* gethostbyname */# include "wpwrutil.h"# include "wtxAsync.h"#endif#include "sllLib.h" /* singly linked list library */#include "pathLib.h"/* defines */#define STREQ(a,b) (*(a) == *(b) ? !strcmp ((a), (b)) : 0)#define WTX_LOAD_BITMASK (WTX_LOAD_FROM_TARGET_SERVER | \ WTX_LOAD_ASYNCHRONOUSLY | \ WTX_LOAD_PROGRESS_REPORT)/* typedefs *//* * Special dummy message type for anonymous casting and calculating field * alignments in wtxResultFree() */typedef struct wtx_msg_dummy { WTX_CORE wtxCore; UINT32 field; } WTX_MSG_DUMMY;typedef struct wtxFreeNode /* wtxResultFree parameters */ { SL_NODE node; /* node in list */ void * pToFree; /* pointer to free */ FUNCPTR pFreeFunc; /* function that should free pointer */ void * pMsgToFree; /* WTX message containing pToFree */ WTX_REQUEST svcNum; /* number of server service to free */ WTX_XID server; /* RPC server to connect to */ WTX_SVR_TYPE svrType; /* is it a tgtsvr or registry server */ } WTX_FREE_NODE;/* See wtx.h and wtxp.h *//* locals */static const char * WTX_EVT_NONE = "NONE";static const char * WTX_EVT_OBJ_LOADED = "OBJ_LOADED";static const char * WTX_EVT_CTX_EXIT = "CTX_EXIT";static const char * WTX_EVT_CTX_START = "CTX_START";static const char * WTX_EVT_TEXT_ACCESS = "TEXT_ACCESS";static const char * WTX_EVT_OBJ_UNLOADED = "OBJ_UNLOADED";static const char * WTX_EVT_TGT_RESET = "TGT_RESET";static const char * WTX_EVT_SYM_ADDED = "SYM_ADDED";static const char * WTX_EVT_SYM_REMOVED = "SYM_REMOVED";static const char * WTX_EVT_EXCEPTION = "EXCEPTION";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -