numam-dpdk/lib/librte_eal/include/rte_string_fns.h
Thomas Monjalon 9c1e0dc39a eal: move common header files
The EAL API (with doxygen documentation) is moved from
common/include/ to include/, which makes more clear that
it is the global API for all environments and architectures.

Note that the arch-specific and OS-specific include files are not
in this global include directory, but include/generic/ should
cover the doxygen documentation for them.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: David Marchand <david.marchand@redhat.com>
2020-03-31 13:08:55 +02:00

124 lines
3.0 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2010-2019 Intel Corporation
*/
/**
* @file
*
* String-related functions as replacement for libc equivalents
*/
#ifndef _RTE_STRING_FNS_H_
#define _RTE_STRING_FNS_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include <string.h>
#include <rte_common.h>
/**
* Takes string "string" parameter and splits it at character "delim"
* up to maxtokens-1 times - to give "maxtokens" resulting tokens. Like
* strtok or strsep functions, this modifies its input string, by replacing
* instances of "delim" with '\\0'. All resultant tokens are returned in the
* "tokens" array which must have enough entries to hold "maxtokens".
*
* @param string
* The input string to be split into tokens
*
* @param stringlen
* The max length of the input buffer
*
* @param tokens
* The array to hold the pointers to the tokens in the string
*
* @param maxtokens
* The number of elements in the tokens array. At most, maxtokens-1 splits
* of the string will be done.
*
* @param delim
* The character on which the split of the data will be done
*
* @return
* The number of tokens in the tokens array.
*/
int
rte_strsplit(char *string, int stringlen,
char **tokens, int maxtokens, char delim);
/**
* @internal
* DPDK-specific version of strlcpy for systems without
* libc or libbsd copies of the function
*/
static inline size_t
rte_strlcpy(char *dst, const char *src, size_t size)
{
return (size_t)snprintf(dst, size, "%s", src);
}
/**
* @internal
* DPDK-specific version of strlcat for systems without
* libc or libbsd copies of the function
*/
static inline size_t
rte_strlcat(char *dst, const char *src, size_t size)
{
size_t l = strnlen(dst, size);
if (l < size)
return l + rte_strlcpy(&dst[l], src, size - l);
return l + strlen(src);
}
/* pull in a strlcpy function */
#ifdef RTE_EXEC_ENV_FREEBSD
#ifndef __BSD_VISIBLE /* non-standard functions are hidden */
#define strlcpy(dst, src, size) rte_strlcpy(dst, src, size)
#define strlcat(dst, src, size) rte_strlcat(dst, src, size)
#endif
#else /* non-BSD platforms */
#ifdef RTE_USE_LIBBSD
#include <bsd/string.h>
#else /* no BSD header files, create own */
#define strlcpy(dst, src, size) rte_strlcpy(dst, src, size)
#define strlcat(dst, src, size) rte_strlcat(dst, src, size)
#endif /* RTE_USE_LIBBSD */
#endif /* FREEBSD */
/**
* Copy string src to buffer dst of size dsize.
* At most dsize-1 chars will be copied.
* Always NUL-terminates, unless (dsize == 0).
* Returns number of bytes copied (terminating NUL-byte excluded) on success ;
* negative errno on error.
*
* @param dst
* The destination string.
*
* @param src
* The input string to be copied.
*
* @param dsize
* Length in bytes of the destination buffer.
*
* @return
* The number of bytes copied on success
* -E2BIG if the destination buffer is too small.
*/
ssize_t
rte_strscpy(char *dst, const char *src, size_t dsize);
#ifdef __cplusplus
}
#endif
#endif /* RTE_STRING_FNS_H */