blob: f67063c006634464b268d099e3ddc9a54f5f09ba [file] [log] [blame]
.TH "Memory Utility Routines" 3 "31 May 2012" "Version 5.5.2.rc2" "net-snmp" \" -*- nroff -*-
.ad l
.nh
.SH NAME
Memory Utility Routines \-
.SS "Defines"
.in +1c
.ti -1c
.RI "#define \fBSNMP_MAXPATH\fP PATH_MAX"
.br
.ti -1c
.RI "#define \fBSNMP_MAXBUF\fP (1024 * 4)"
.br
.ti -1c
.RI "#define \fBSNMP_MAXBUF_MEDIUM\fP 1024"
.br
.ti -1c
.RI "#define \fBSNMP_MAXBUF_SMALL\fP 512"
.br
.ti -1c
.RI "#define \fBSNMP_MAXBUF_MESSAGE\fP 1500"
.br
.ti -1c
.RI "#define \fBSNMP_MAXOID\fP 64"
.br
.ti -1c
.RI "#define \fBSNMP_MAX_CMDLINE_OIDS\fP 128"
.br
.ti -1c
.RI "#define \fBSNMP_FILEMODE_CLOSED\fP 0600"
.br
.ti -1c
.RI "#define \fBSNMP_FILEMODE_OPEN\fP 0644"
.br
.ti -1c
.RI "#define \fBBYTESIZE\fP(bitsize) ((bitsize + 7) >> 3)"
.br
.ti -1c
.RI "#define \fBROUNDUP8\fP(x) ( ( (x+7) >> 3 ) * 8 )"
.br
.ti -1c
.RI "#define \fBSNMP_STRORNULL\fP(x) ( x ? x : '(null)')"
.br
.ti -1c
.RI "#define \fBSNMP_FREE\fP(s) do { if (s) { free((void *)s); s=NULL; } } while(0)"
.br
.RI "\fIFrees a pointer only if it is !NULL and sets its value to NULL. \fP"
.ti -1c
.RI "#define \fBSNMP_SWIPE_MEM\fP(n, s) do { if (n) free((void *)n); n = s; s=NULL; } while(0)"
.br
.RI "\fIFrees pointer n only if it is !NULL, sets n to s and sets s to NULL. \fP"
.ti -1c
.RI "#define \fBSNMP_MALLOC_STRUCT\fP(s) (struct s *) calloc(1, sizeof(struct s))"
.br
.RI "\fIMallocs memory of sizeof(struct s), zeros it and returns a pointer to it. \fP"
.ti -1c
.RI "#define \fBSNMP_MALLOC_TYPEDEF\fP(td) (td *) calloc(1, sizeof(td))"
.br
.RI "\fIMallocs memory of sizeof(t), zeros it and returns a pointer to it. \fP"
.ti -1c
.RI "#define \fBSNMP_ZERO\fP(s, l) do { if (s) memset(s, 0, l); } while(0)"
.br
.RI "\fIZeros l bytes of memory starting at s. \fP"
.ti -1c
.RI "#define \fBNETSNMP_REMOVE_CONST\fP(t, e) ((t)(uintptr_t)(e))"
.br
.RI "\fICast away constness without that gcc -Wcast-qual prints a compiler warning, similar to const_cast<> in C++. \fP"
.ti -1c
.RI "#define \fBTOUPPER\fP(c) (c >= 'a' && c <= 'z' ? c - ('a' - 'A') : c)"
.br
.ti -1c
.RI "#define \fBTOLOWER\fP(c) (c >= 'A' && c <= 'Z' ? c + ('a' - 'A') : c)"
.br
.ti -1c
.RI "#define \fBHEX2VAL\fP(s) ((isalpha(s) ? (TOLOWER(s)-'a'+10) : (TOLOWER(s)-'0')) & 0xf)"
.br
.ti -1c
.RI "#define \fBVAL2HEX\fP(s) ( (s) + (((s) >= 10) ? ('a'-10) : '0') )"
.br
.ti -1c
.RI "#define \fBSNMP_MAX\fP(a, b) ((a) > (b) ? (a) : (b))"
.br
.RI "\fIComputers the maximum of a and b. \fP"
.ti -1c
.RI "#define \fBSNMP_MIN\fP(a, b) ((a) > (b) ? (b) : (a))"
.br
.RI "\fIComputers the minimum of a and b. \fP"
.ti -1c
.RI "#define \fBSNMP_MACRO_VAL_TO_STR\fP(s) SNMP_MACRO_VAL_TO_STR_PRIV(s)"
.br
.RI "\fIExpands to string with value of the s. \fP"
.ti -1c
.RI "#define \fBSNMP_MACRO_VAL_TO_STR_PRIV\fP(s) #s"
.br
.ti -1c
.RI "#define \fBQUITFUN\fP(e, l)"
.br
.ti -1c
.RI "#define \fBDIFFTIMEVAL\fP(now, then, diff)"
.br
.ti -1c
.RI "#define \fBUSM_LENGTH_OID_TRANSFORM\fP 10"
.br
.ti -1c
.RI "#define \fBISTRANSFORM\fP(ttype, toid)"
.br
.ti -1c
.RI "#define \fBENGINETIME_MAX\fP 2147483647"
.br
.ti -1c
.RI "#define \fBENGINEBOOT_MAX\fP 2147483647"
.br
.ti -1c
.RI "#define \fBsnmp_cstrcat\fP(b, l, o, a, s) snmp_strcat(b,l,o,a,(const u_char *)s)"
.br
.in -1c
.SS "Typedefs"
.in +1c
.ti -1c
.RI "typedef void * \fBmarker_t\fP"
.br
.in -1c
.SS "Functions"
.in +1c
.ti -1c
.RI "int \fBsnmp_realloc\fP (u_char **buf, size_t *buf_len)"
.br
.RI "\fIThis function increase the size of the buffer pointed at by *buf, which is initially of size *buf_len. \fP"
.ti -1c
.RI "void \fBfree_zero\fP (void *buf, size_t size)"
.br
.RI "\fIzeros memory before freeing it. \fP"
.ti -1c
.RI "u_char * \fBmalloc_random\fP (size_t *size)"
.br
.RI "\fIReturns pointer to allocaed & set buffer on success, size contains number of random bytes filled. \fP"
.ti -1c
.RI "u_char * \fBmalloc_zero\fP (size_t size)"
.br
.ti -1c
.RI "int \fBmemdup\fP (u_char **to, const void *from, size_t size)"
.br
.RI "\fIDuplicates a memory block. \fP"
.ti -1c
.RI "u_int \fBbinary_to_hex\fP (const u_char *input, size_t len, char **output)"
.br
.RI "\fIconverts binary to hexidecimal \fP"
.ti -1c
.RI "int \fBnetsnmp_hex_to_binary\fP (u_char **buf, size_t *buf_len, size_t *offset, int allow_realloc, const char *hex, const char *delim)"
.br
.RI "\fIconvert an ASCII hex string (with specified delimiters) to binary \fP"
.ti -1c
.RI "int \fBsnmp_hex_to_binary\fP (u_char **buf, size_t *buf_len, size_t *offset, int allow_realloc, const char *hex)"
.br
.RI "\fIconvert an ASCII hex string to binary \fP"
.ti -1c
.RI "int \fBhex_to_binary2\fP (const u_char *input, size_t len, char **output)"
.br
.RI "\fIhex_to_binary2 \fP"
.ti -1c
.RI "int \fBsnmp_decimal_to_binary\fP (u_char **buf, size_t *buf_len, size_t *out_len, int allow_realloc, const char *decimal)"
.br
.ti -1c
.RI "int \fBsnmp_strcat\fP (u_char **buf, size_t *buf_len, size_t *out_len, int allow_realloc, const u_char *s)"
.br
.ti -1c
.RI "char * \fBnetsnmp_strdup_and_null\fP (const u_char *from, size_t from_len)"
.br
.RI "\fIcopies a (possible) unterminated string of a given length into a new buffer and null terminates it as well (new buffer MAY be one byte longer to account for this \fP"
.ti -1c
.RI "void \fBdump_chunk\fP (const char *debugtoken, const char *title, const u_char *buf, int size)"
.br
.ti -1c
.RI "char * \fBdump_snmpEngineID\fP (const u_char *buf, size_t *buflen)"
.br
.ti -1c
.RI "marker_t \fBatime_newMarker\fP (void)"
.br
.RI "\fIcreate a new time marker. \fP"
.ti -1c
.RI "void \fBatime_setMarker\fP (marker_t pm)"
.br
.RI "\fIset a time marker. \fP"
.ti -1c
.RI "long \fBatime_diff\fP (marker_t first, marker_t second)"
.br
.RI "\fIReturns the difference (in msec) between the two markers. \fP"
.ti -1c
.RI "u_long \fBuatime_diff\fP (marker_t first, marker_t second)"
.br
.RI "\fIReturns the difference (in u_long msec) between the two markers. \fP"
.ti -1c
.RI "u_long \fBuatime_hdiff\fP (marker_t first, marker_t second)"
.br
.RI "\fIReturns the difference (in u_long 1/100th secs) between the two markers (functionally this is what sysUpTime needs). \fP"
.ti -1c
.RI "int \fBatime_ready\fP (marker_t pm, int deltaT)"
.br
.RI "\fITest: Has (marked time plus delta) exceeded current time (in msec) ? Returns 0 if test fails or cannot be tested (no marker). \fP"
.ti -1c
.RI "int \fBuatime_ready\fP (marker_t pm, unsigned int deltaT)"
.br
.RI "\fITest: Has (marked time plus delta) exceeded current time (in msec) ? Returns 0 if test fails or cannot be tested (no marker). \fP"
.ti -1c
.RI "int \fBmarker_tticks\fP (marker_t pm)"
.br
.RI "\fIReturn the number of timeTicks since the given marker. \fP"
.ti -1c
.RI "int \fBtimeval_tticks\fP (struct timeval *tv)"
.br
.ti -1c
.RI "NETSNMP_IMPORT char * \fBnetsnmp_getenv\fP (const char *name)"
.br
.RI "\fINon Windows: Returns a pointer to the desired environment \fBvariable\fP or NULL if the environment \fBvariable\fP does not exist. \fP"
.ti -1c
.RI "NETSNMP_IMPORT int \fBnetsnmp_setenv\fP (const char *envname, const char *envval, int overwrite)"
.br
.RI "\fISet an environment \fBvariable\fP. \fP"
.ti -1c
.RI "int \fBnetsnmp_addrstr_hton\fP (char *ptr, size_t len)"
.br
.in -1c
.SH "Define Documentation"
.PP
.SS "#define DIFFTIMEVAL(now, then, diff)"\fBValue:\fP
.PP
.nf
{ \
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++; \
} \
}
.fi
.PP
Definition at line 152 of file tools.h.
.SS "#define ISTRANSFORM(ttype, toid)"\fBValue:\fP
.PP
.nf
!snmp_oid_compare(ttype, USM_LENGTH_OID_TRANSFORM, \
usm ## toid ## Protocol, USM_LENGTH_OID_TRANSFORM)
.fi
.PP
Definition at line 171 of file tools.h.
.SS "#define NETSNMP_REMOVE_CONST(t, e) ((t)(uintptr_t)(e))"
.PP
Cast away constness without that gcc -Wcast-qual prints a compiler warning, similar to const_cast<> in C++. \fBParameters:\fP
.RS 4
\fIt\fP A pointer type.
.br
\fIe\fP An expression of a type that can be assigned to the type (const t).
.RE
.PP
.PP
Definition at line 92 of file tools.h.
.SS "#define QUITFUN(e, l)"\fBValue:\fP
.PP
.nf
if ( (e) != SNMPERR_SUCCESS) { \
rval = SNMPERR_GENERR; \
goto l ; \
}
.fi
.PP
Definition at line 139 of file tools.h.
.SS "#define SNMP_FREE(s) do { if (s) { free((void *)s); s=NULL; } } while(0)"
.PP
Frees a pointer only if it is !NULL and sets its value to NULL.
.PP
Definition at line 57 of file tools.h.
.SS "#define SNMP_MACRO_VAL_TO_STR(s) SNMP_MACRO_VAL_TO_STR_PRIV(s)"
.PP
Expands to string with value of the s. If s is macro, the resulting string is value of the macro. Example: #define TEST 1234 \fBSNMP_MACRO_VAL_TO_STR(TEST)\fP expands to '1234' SNMP_MACRO_VAL_TO_STR(TEST+1) expands to '1234+1'
.PP
Definition at line 120 of file tools.h.
.SS "#define SNMP_MALLOC_STRUCT(s) (struct s *) calloc(1, sizeof(struct s))"
.PP
Mallocs memory of sizeof(struct s), zeros it and returns a pointer to it.
.PP
Definition at line 68 of file tools.h.
.SS "#define SNMP_MALLOC_TYPEDEF(td) (td *) calloc(1, sizeof(td))"
.PP
Mallocs memory of sizeof(t), zeros it and returns a pointer to it.
.PP
Definition at line 72 of file tools.h.
.SS "#define SNMP_MAX(a, b) ((a) > (b) ? (a) : (b))"
.PP
Computers the maximum of a and b.
.PP
Definition at line 106 of file tools.h.
.SS "#define SNMP_MIN(a, b) ((a) > (b) ? (b) : (a))"
.PP
Computers the minimum of a and b.
.PP
Definition at line 110 of file tools.h.
.SS "#define SNMP_SWIPE_MEM(n, s) do { if (n) free((void *)n); n = s; s=NULL; } while(0)"
.PP
Frees pointer n only if it is !NULL, sets n to s and sets s to NULL.
.PP
Definition at line 61 of file tools.h.
.SS "#define SNMP_ZERO(s, l) do { if (s) memset(s, 0, l); } while(0)"
.PP
Zeros l bytes of memory starting at s.
.PP
Definition at line 76 of file tools.h.
.SH "Function Documentation"
.PP
.SS "long atime_diff (marker_t first, marker_t second)"
.PP
Returns the difference (in msec) between the two markers.
.PP
Definition at line 803 of file tools.c.
.SS "marker_t atime_newMarker (void)"
.PP
create a new time marker. NOTE: Caller must free time marker when no longer needed.
.PP
Definition at line 779 of file tools.c.
.SS "int atime_ready (marker_t pm, int deltaT)"
.PP
Test: Has (marked time plus delta) exceeded current time (in msec) ? Returns 0 if test fails or cannot be tested (no marker).
.PP
Definition at line 858 of file tools.c.
.SS "void atime_setMarker (marker_t pm)"
.PP
set a time marker.
.PP
Definition at line 790 of file tools.c.
.SS "u_int binary_to_hex (const u_char * input, size_t len, char ** output)"
.PP
converts binary to hexidecimal \fBParameters:\fP
.RS 4
\fI*input\fP Binary data.
.br
\fIlen\fP Length of binary data.
.br
\fI**output\fP NULL terminated string equivalent in hex.
.RE
.PP
\fBReturns:\fP
.RS 4
olen Length of output string not including NULL terminator.
.RE
.PP
FIX Is there already one of these in the UCD SNMP codebase? The old one should be used, or this one should be moved to \fBsnmplib/snmp_api.c\fP.
.PP
Definition at line 299 of file tools.c.
.SS "void free_zero (void * buf, size_t size)"
.PP
zeros memory before freeing it. \fBParameters:\fP
.RS 4
\fI*buf\fP Pointer at bytes to free.
.br
\fIsize\fP Number of bytes in buf.
.RE
.PP
.PP
Definition at line 197 of file tools.c.
.SS "int hex_to_binary2 (const u_char * input, size_t len, char ** output)"
.PP
hex_to_binary2 \fBParameters:\fP
.RS 4
\fI*input\fP Printable data in base16.
.br
\fIlen\fP Length in bytes of data.
.br
\fI**output\fP Binary data equivalent to input.
.RE
.PP
\fBReturns:\fP
.RS 4
SNMPERR_GENERR on failure, otherwise length of allocated string.
.RE
.PP
Input of an odd length is right aligned.
.PP
FIX Another version of 'hex-to-binary' which takes odd length input strings. It also allocates the memory to hold the binary data. Should be integrated with the official hex_to_binary() function.
.PP
Definition at line 336 of file tools.c.
.SS "u_char* malloc_random (size_t * size)"
.PP
Returns pointer to allocaed & set buffer on success, size contains number of random bytes filled. buf is NULL and *size set to KMT error value upon failure.
.PP
\fBParameters:\fP
.RS 4
\fIsize\fP Number of bytes to malloc() and fill with random bytes.
.RE
.PP
\fBReturns:\fP
.RS 4
a malloced buffer
.RE
.PP
.PP
Definition at line 217 of file tools.c.
.SS "int marker_tticks (marker_t pm)"
.PP
Return the number of timeTicks since the given marker.
.PP
Definition at line 906 of file tools.c.
.SS "void * netsnmp_memdup (const void * from, size_t size)"
.PP
Duplicates a memory block. Copies a existing memory location from a pointer to another, newly malloced, pointer.
.PP
\fBParameters:\fP
.RS 4
\fIto\fP Pointer to allocate and copy memory to.
.br
\fIfrom\fP Pointer to copy memory from.
.br
\fIsize\fP Size of the data to be copied.
.RE
.PP
\fBReturns:\fP
.RS 4
SNMPERR_SUCCESS on success, SNMPERR_GENERR on failure.
.RE
.PP
.PP
Definition at line 248 of file tools.c.
.SS "NETSNMP_IMPORT char* netsnmp_getenv (const char * name)"
.PP
Non Windows: Returns a pointer to the desired environment \fBvariable\fP or NULL if the environment \fBvariable\fP does not exist. Windows: Returns a pointer to the desired environment \fBvariable\fP if it exists. If it does not, the \fBvariable\fP is looked up in the registry in HKCU\\Net-SNMP or HKLM\\Net-SNMP (whichever it finds first) and stores the result in the environment \fBvariable\fP. It then returns a pointer to environment \fBvariable\fP.
.PP
Definition at line 934 of file tools.c.
.SS "int netsnmp_hex_to_binary (u_char ** buf, size_t * buf_len, size_t * offset, int allow_realloc, const char * hex, const char * delim)"
.PP
convert an ASCII hex string (with specified delimiters) to binary \fBParameters:\fP
.RS 4
\fIbuf\fP address of a pointer (pointer to pointer) for the output buffer. If allow_realloc is set, the buffer may be grown via snmp_realloc to accomodate the data.
.br
\fIbuf_len\fP pointer to a size_t containing the initial size of buf.
.br
\fIoffset\fP On input, a pointer to a size_t indicating an offset into buf. The binary data will be stored at this offset. On output, this pointer will have updated the offset to be the first byte after the converted data.
.br
\fIallow_realloc\fP If true, the buffer can be reallocated. If false, and the buffer is not large enough to contain the string, an error will be returned.
.br
\fIhex\fP pointer to hex string to be converted. May be prefixed by '0x' or '0X'.
.br
\fIdelim\fP point to a string of allowed delimiters between bytes. If not specified, any non-hex characters will be an error.
.RE
.PP
\fBReturn values:\fP
.RS 4
\fI1\fP success
.br
\fI0\fP error
.RE
.PP
.PP
Definition at line 437 of file tools.c.
.SS "NETSNMP_IMPORT int netsnmp_setenv (const char * envname, const char * envval, int overwrite)"
.PP
Set an environment \fBvariable\fP. This function is only necessary on Windows for the MSVC and MinGW environments. If the process that uses the Net-SNMP DLL (e.g. a Perl interpreter) and the Net-SNMP have been built with a different compiler version then each will have a separate set of environment variables. This function allows to set an environment \fBvariable\fP such that it gets noticed by the Net-SNMP DLL.
.PP
Definition at line 1067 of file tools.c.
.SS "char* netsnmp_strdup_and_null (const u_char * from, size_t from_len)"
.PP
copies a (possible) unterminated string of a given length into a new buffer and null terminates it as well (new buffer MAY be one byte longer to account for this
.PP
Definition at line 267 of file tools.c.
.SS "int snmp_hex_to_binary (u_char ** buf, size_t * buf_len, size_t * offset, int allow_realloc, const char * hex)"
.PP
convert an ASCII hex string to binary \fBNote:\fP
.RS 4
This is a wrapper which calls netsnmp_hex_to_binary with a delimiter string of ' '.
.RE
.PP
See netsnmp_hex_to_binary for parameter descriptions.
.PP
\fBReturn values:\fP
.RS 4
\fI1\fP success
.br
\fI0\fP error
.RE
.PP
.PP
Definition at line 497 of file tools.c.
.SS "int snmp_realloc (u_char ** buf, size_t * buf_len)"
.PP
This function increase the size of the buffer pointed at by *buf, which is initially of size *buf_len. Contents are preserved **AT THE BOTTOM END OF THE BUFFER**. If memory can be (re-)allocated then it returns 1, else it returns 0.
.PP
\fBParameters:\fP
.RS 4
\fIbuf\fP pointer to a buffer pointer
.br
\fIbuf_len\fP pointer to current size of buffer in bytes
.RE
.PP
\fBNote:\fP
.RS 4
The current re-allocation algorithm is to increase the buffer size by whichever is the greater of 256 bytes or the current buffer size, up to a maximum increase of 8192 bytes.
.RE
.PP
.PP
Definition at line 133 of file tools.c.
.SS "u_long uatime_diff (marker_t first, marker_t second)"
.PP
Returns the difference (in u_long msec) between the two markers.
.PP
Definition at line 820 of file tools.c.
.SS "u_long uatime_hdiff (marker_t first, marker_t second)"
.PP
Returns the difference (in u_long 1/100th secs) between the two markers (functionally this is what sysUpTime needs).
.PP
Definition at line 838 of file tools.c.
.SS "int uatime_ready (marker_t pm, unsigned int deltaT)"
.PP
Test: Has (marked time plus delta) exceeded current time (in msec) ? Returns 0 if test fails or cannot be tested (no marker).
.PP
Definition at line 880 of file tools.c.
.SH "Author"
.PP
Generated automatically by Doxygen for net-snmp from the source code.