📄 tools.h
字号:
/** * @file tools.h * @defgroup util Memory Utility Routines * @ingroup library * @{ */#ifndef _TOOLS_H#define _TOOLS_H#ifdef __cplusplusextern "C" {#endif /* * General acros and constants. */#ifdef WIN32# define SNMP_MAXPATH MAX_PATH#else# ifdef PATH_MAX# define SNMP_MAXPATH PATH_MAX# else# ifdef MAXPATHLEN# define SNMP_MAXPATH MAXPATHLEN# else# define SNMP_MAXPATH 1024 /* Should be safe enough */# endif# endif#endif#define SNMP_MAXBUF (1024 * 4)#define SNMP_MAXBUF_MEDIUM 1024#define SNMP_MAXBUF_SMALL 512#define SNMP_MAXBUF_MESSAGE 1500#define SNMP_MAXOID 64#define SNMP_MAX_CMDLINE_OIDS 128#define SNMP_FILEMODE_CLOSED 0600#define SNMP_FILEMODE_OPEN 0644#define BYTESIZE(bitsize) ((bitsize + 7) >> 3)#define ROUNDUP8(x) ( ( (x+7) >> 3 ) * 8 )/** @def SNMP_FREE(s) Frees a pointer only if it is !NULL and sets its value to NULL */#define SNMP_FREE(s) do { if (s) { free((void *)s); s=NULL; } } while(0)/** @def SNMP_SWIPE_MEM(n, s) Frees pointer n only if it is !NULL, sets n to s and sets s to NULL */#define SNMP_SWIPE_MEM(n,s) do { if (n) free((void *)n); n = s; s=NULL; } while(0) /* * XXX Not optimal everywhere. *//** @def SNMP_MALLOC_STRUCT(s) Mallocs memory of sizeof(struct s), zeros it and returns a pointer to it. */#define SNMP_MALLOC_STRUCT(s) (struct s *) calloc(1, sizeof(struct s))/** @def SNMP_MALLOC_TYPEDEF(t) Mallocs memory of sizeof(t), zeros it and returns a pointer to it. */#define SNMP_MALLOC_TYPEDEF(td) (td *) calloc(1, sizeof(td))/** @def SNMP_ZERO(s,l) Zeros l bytes of memory starting at s. */#define SNMP_ZERO(s,l) do { if (s) memset(s, 0, l); } while(0)#define TOUPPER(c) (c >= 'a' && c <= 'z' ? c - ('a' - 'A') : c)#define TOLOWER(c) (c >= 'A' && c <= 'Z' ? c + ('a' - 'A') : c)#define HEX2VAL(s) \ ((isalpha(s) ? (TOLOWER(s)-'a'+10) : (TOLOWER(s)-'0')) & 0xf)#define VAL2HEX(s) ( (s) + (((s) >= 10) ? ('a'-10) : '0') )/** @def SNMP_MAX(a, b) Computers the maximum of a and b. */#define SNMP_MAX(a,b) ((a) > (b) ? (a) : (b))/** @def SNMP_MIN(a, b) Computers the minimum of a and b. */#define SNMP_MIN(a,b) ((a) > (b) ? (b) : (a))#ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1#endif /* * QUIT the FUNction: * e Error code variable * l Label to goto to cleanup and get out of the function. * * XXX It would be nice if the label could be constructed by the * preprocessor in context. Limited to a single error return value. * Temporary hack at best. */#define QUITFUN(e, l) \ if ( (e) != SNMPERR_SUCCESS) { \ rval = SNMPERR_GENERR; \ goto l ; \ } /* * DIFFTIMEVAL * Set <diff> to the difference between <now> (current) and <then> (past). * * ASSUMES that all inputs are (struct timeval)'s. * Cf. system.c:calculate_time_diff(). */#define DIFFTIMEVAL(now, then, diff) \{ \ now.tv_sec--; \ now.tv_usec += 1000000L; \ diff.tv_sec = now.tv_sec - then.tv_sec; \ diff.tv_usec = now.tv_usec - then.tv_usec; \ if (diff.tv_usec > 1000000L){ \ diff.tv_usec -= 1000000L; \ diff.tv_sec++; \ } \} /* * ISTRANSFORM * ASSUMES the minimum length for ttype and toid. */#define USM_LENGTH_OID_TRANSFORM 10#define ISTRANSFORM(ttype, toid) \ !snmp_oid_compare(ttype, USM_LENGTH_OID_TRANSFORM, \ usm ## toid ## Protocol, USM_LENGTH_OID_TRANSFORM)#define ENGINETIME_MAX 2147483647 /* ((2^31)-1) */#define ENGINEBOOT_MAX 2147483647 /* ((2^31)-1) */ /* * Prototypes. */ int snmp_realloc(u_char ** buf, size_t * buf_len); void free_zero(void *buf, size_t size); u_char *malloc_random(size_t * size); u_char *malloc_zero(size_t size); int memdup(u_char ** to, const u_char * from, size_t size); u_int binary_to_hex(const u_char * input, size_t len, char **output); /* preferred */ int netsnmp_hex_to_binary(u_char ** buf, size_t * buf_len, size_t * offset, int allow_realloc, const char *hex, const char *delim); /* calls netsnmp_hex_to_binary w/delim of " " */ int snmp_hex_to_binary(u_char ** buf, size_t * buf_len, size_t * offset, int allow_realloc, const char *hex); /* handles odd lengths */ int hex_to_binary2(const u_char * input, size_t len, char **output); int snmp_decimal_to_binary(u_char ** buf, size_t * buf_len, size_t * out_len, int allow_realloc, const char *decimal); int snmp_strcat(u_char ** buf, size_t * buf_len, size_t * out_len, int allow_realloc, const u_char * s); char *netsnmp_strdup_and_null(const u_char * from, size_t from_len); void dump_chunk(const char *debugtoken, const char *title, const u_char * buf, int size); char *dump_snmpEngineID(const u_char * buf, size_t * buflen); typedef void *marker_t; marker_t atime_newMarker(void); void atime_setMarker(marker_t pm); long atime_diff(marker_t first, marker_t second); u_long uatime_diff(marker_t first, marker_t second); /* 1/1000th sec */ u_long uatime_hdiff(marker_t first, marker_t second); /* 1/100th sec */ int atime_ready(marker_t pm, int deltaT); int uatime_ready(marker_t pm, unsigned int deltaT); int marker_tticks(marker_t pm); int timeval_tticks(struct timeval *tv); char *netsnmp_getenv(const char *name); #ifdef __cplusplus}#endif#endif /* _TOOLS_H *//* @} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -