blob: d1445575a25e1008d0f378d4899eafa49a1e5e00 [file] [log] [blame]
#ifndef __WILC_STRUTILS_H__
#define __WILC_STRUTILS_H__
/*!
* @file wilc_strutils.h
* @brief Basic string utilities
* @author syounan
* @sa wilc_oswrapper.h top level OS wrapper file
* @date 16 Aug 2010
* @version 1.0
*/
#include <linux/types.h>
#include <linux/string.h>
#include "wilc_errorsupport.h"
/*!
* @brief Compares two memory buffers
* @param[in] pvArg1 pointer to the first memory location
* @param[in] pvArg2 pointer to the second memory location
* @param[in] u32Count the size of the memory buffers
* @return 0 if the 2 buffers are equal, 1 if pvArg1 is bigger than pvArg2,
* -1 if pvArg1 smaller than pvArg2
* @note this function repeats the functionality of standard memcmp
* @author syounan
* @date 18 Aug 2010
* @version 1.0
*/
s32 WILC_memcmp(const void *pvArg1, const void *pvArg2, u32 u32Count);
/*!
* @brief Internal implementation for memory copy
* @param[in] pvTarget the target buffer to which the data is copied into
* @param[in] pvSource pointer to the second memory location
* @param[in] u32Count the size of the data to copy
* @note this function should not be used directly, use WILC_memcpy instead
* @author syounan
* @date 18 Aug 2010
* @version 1.0
*/
void WILC_memcpy_INTERNAL(void *pvTarget, const void *pvSource, u32 u32Count);
/*!
* @brief Copies the contents of a memory buffer into another
* @param[in] pvTarget the target buffer to which the data is copied into
* @param[in] pvSource pointer to the second memory location
* @param[in] u32Count the size of the data to copy
* @return WILC_SUCCESS if copy is successfully handeled
* WILC_FAIL if copy failed
* @note this function repeats the functionality of standard memcpy,
* however memcpy is undefined if the two buffers overlap but this
* implementation will check for overlap and report error
* @author syounan
* @date 18 Aug 2010
* @version 1.0
*/
static WILC_ErrNo WILC_memcpy(void *pvTarget, const void *pvSource, u32 u32Count)
{
if (
(((u8 *)pvTarget <= (u8 *)pvSource)
&& (((u8 *)pvTarget + u32Count) > (u8 *)pvSource))
|| (((u8 *)pvSource <= (u8 *)pvTarget)
&& (((u8 *)pvSource + u32Count) > (u8 *)pvTarget))
) {
/* ovelapped memory, return Error */
return WILC_FAIL;
} else {
WILC_memcpy_INTERNAL(pvTarget, pvSource, u32Count);
return WILC_SUCCESS;
}
}
/*!
* @brief Sets the contents of a memory buffer with the given value
* @param[in] pvTarget the target buffer which contsnts will be set
* @param[in] u8SetValue the value to be used
* @param[in] u32Count the size of the memory buffer
* @return value of pvTarget
* @note this function repeats the functionality of standard memset
* @author syounan
* @date 18 Aug 2010
* @version 1.0
*/
void *WILC_memset(void *pvTarget, u8 u8SetValue, u32 u32Count);
/*!
* @brief copies the contents of source string into the target string
* @param[in] pcTarget the target string buffer
* @param[in] pcSource the source string the will be copied
* @param[in] u32Count copying will proceed until a null character in pcSource
* is encountered or u32Count of bytes copied
* @return value of pcTarget
* @note this function repeats the functionality of standard strncpy
* @author syounan
* @date 18 Aug 2010
* @version 1.0
*/
char *WILC_strncpy(char *pcTarget, const char *pcSource,
u32 u32Count);
/*!
* @brief Compares two strings up to u32Count characters
* @details Compares 2 strings reporting which is bigger, NULL is considered
* the smallest string, then a zero length string then all other
* strings depending on thier ascii characters order with small case
* converted to uppder case
* @param[in] pcStr1 the first string, NULL is valid and considered smaller
* than any other non-NULL string (incliding zero lenght strings)
* @param[in] pcStr2 the second string, NULL is valid and considered smaller
* than any other non-NULL string (incliding zero lenght strings)
* @param[in] u32Count copying will proceed until a null character in pcStr1 or
* pcStr2 is encountered or u32Count of bytes copied
* @return 0 if the 2 strings are equal, 1 if pcStr1 is bigger than pcStr2,
* -1 if pcStr1 smaller than pcStr2
* @author aabozaeid
* @date 7 Dec 2010
* @version 1.0
*/
s32 WILC_strncmp(const char *pcStr1, const char *pcStr2,
u32 u32Count);
/*!
* @brief gets the length of a string
* @param[in] pcStr the string
* @return the length
* @note this function repeats the functionality of standard strlen
* @author syounan
* @date 18 Aug 2010
* @version 1.0
*/
u32 WILC_strlen(const char *pcStr);
#endif