Files
m241Neelima/vxworks-6.9/target/h/hookLib.h
T
2026-07-30 11:19:44 +05:30

134 lines
4.1 KiB
C

/* hookLib.h - Generic hook management library header */
/*
* Copyright (c) 2003-2005, 2008-2010 Wind River Systems, Inc.
*
* The right to copy, distribute, modify or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
/*
modification history
--------------------
01l,28apr10,pad Moved extern C statement after include statements.
01k,10dec09,cww Removed temporary variable in HOOK_INVOKE_CHECK_RETURN
01j,21aug09,jpb Changed prototype for hookShow.
01i,17mar09,jpb Updated for LP64 support.
01h,10jul08,mdo remove warnings
01g,22feb08,pad Fixed HOOK_INVOKE_CHECK_RETURN so that it does not continue
walking through the hook table when it finds an empty slot.
01f,09sep05,yvp Deleted prototypes for hookLibInit & hookShowInit (SPR 106485).
01e,24jan05,aeg added hookShow() function prototype (SPR #106381).
01d,29apr04,cjj Added hookShowInit() prototype and added "extern" to all
prototype declarations.
01c,08mar04,yvp Corrected doc error for HOOK_INVOKE_CHECK_RETURN.
01b,16feb04,yvp Added S_hookLib_HOOK_TABLE_NULL.
01a,18nov03,yvp written.
*/
/*
DESCRIPTION
*/
#ifndef __INChookLibh
#define __INChookLibh
/* includes */
#include <vxWorks.h>
#include <vwModNum.h>
#ifdef __cplusplus
extern "C" {
#endif
/* generic status codes for hookLib */
#define S_hookLib_HOOK_TABLE_FULL (M_hookLib | 1)
#define S_hookLib_HOOK_NOT_FOUND (M_hookLib | 2)
#define S_hookLib_HOOK_TABLE_NULL (M_hookLib | 3)
#ifndef _ASMLANGUAGE
/******************************************************************************
*
* HOOK_INVOKE_VOID_RETURN - Invoke all hooks in a table.
*
* This macro calls all hook functions added into the given hook table <tbl>
* of size <sz>. The called functions are not expected to return anything
* (return values are not checked). The <typecast> argument is a typecast
* that is applied to all function pointers in the table. This is done for
* type checking purposes. The <arglist> argument is a parenthesis-enclosed
* argument list that is passed verbatim to each hook function called.
*
* \NOMANUAL
*/
#define HOOK_INVOKE_VOID_RETURN(tbl,sz,typecast,arglist) \
{ \
int ix; \
\
for (ix = 0; ix < sz; ix++) \
{ \
if ((typecast)tbl[ix] != (typecast)NULL) \
(*(typecast)tbl[ix])arglist; \
else \
break; \
} \
}
/******************************************************************************
*
* HOOK_INVOKE_CHECK_RETURN - Invoke all hooks in a table, performing return
* value checking.
*
* This macro calls all hook functions added into the given hook table <tbl>
* of size <sz>. The return value from each called function is compared with
* <keepGoing>, and hook execution stops if they differ. In that case, any
* remaining hooks are not executed. The <typecast> argument is a typecast
* that is applied to all function pointers in the table. This is done for
* type checking purposes. The <arglist> must be a parenthesis-enclosed
* argument list that is passed verbatim to each hook function called.
*
* \NOMANUAL
*/
#define HOOK_INVOKE_CHECK_RETURN(tbl,sz,typecast,arglist,keepGoing,pRetval) \
{ \
int ix; \
\
for (ix = 0; ix < sz; ix++) \
{ \
if ((typecast)tbl[ix] != (typecast)NULL) \
{ \
*(pRetval) = (*(typecast)tbl[ix])arglist; \
if (*(pRetval) != keepGoing) \
{ \
break; \
} \
} \
else \
break; \
} \
}
/* function declarations */
extern STATUS hookAddToTail (void *, void * [], int);
extern STATUS hookAddToHead (void *, void * [], int);
extern STATUS hookDelete (void *, void * [], int);
extern BOOL hookFind (void *, void * [], int);
#ifdef _WRS_KERNEL
extern void hookShow (void * [], int maxEntries);
#endif /* _WRS_KERNEL */
#endif /* _ASMLANGUAGE */
#ifdef __cplusplus
}
#endif
#endif /* __INChookLibh */