]> git.proxmox.com Git - ceph.git/blame - ceph/src/seastar/dpdk/lib/librte_eal/common/include/rte_string_fns.h
import 15.2.0 Octopus source
[ceph.git] / ceph / src / seastar / dpdk / lib / librte_eal / common / include / rte_string_fns.h
CommitLineData
9f95a23c
TL
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2010-2019 Intel Corporation
7c673cae
FG
3 */
4
5/**
6 * @file
7 *
8 * String-related functions as replacement for libc equivalents
9 */
10
11#ifndef _RTE_STRING_FNS_H_
12#define _RTE_STRING_FNS_H_
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
9f95a23c
TL
18#include <stdio.h>
19#include <string.h>
20
21#include <rte_common.h>
22
7c673cae
FG
23/**
24 * Takes string "string" parameter and splits it at character "delim"
25 * up to maxtokens-1 times - to give "maxtokens" resulting tokens. Like
26 * strtok or strsep functions, this modifies its input string, by replacing
27 * instances of "delim" with '\\0'. All resultant tokens are returned in the
28 * "tokens" array which must have enough entries to hold "maxtokens".
29 *
30 * @param string
31 * The input string to be split into tokens
32 *
33 * @param stringlen
34 * The max length of the input buffer
35 *
36 * @param tokens
37 * The array to hold the pointers to the tokens in the string
38 *
39 * @param maxtokens
40 * The number of elements in the tokens array. At most, maxtokens-1 splits
41 * of the string will be done.
42 *
43 * @param delim
44 * The character on which the split of the data will be done
45 *
46 * @return
47 * The number of tokens in the tokens array.
48 */
49int
50rte_strsplit(char *string, int stringlen,
51 char **tokens, int maxtokens, char delim);
52
9f95a23c
TL
53/**
54 * @internal
55 * DPDK-specific version of strlcpy for systems without
56 * libc or libbsd copies of the function
57 */
58static inline size_t
59rte_strlcpy(char *dst, const char *src, size_t size)
60{
61 return (size_t)snprintf(dst, size, "%s", src);
62}
63
64/**
65 * @internal
66 * DPDK-specific version of strlcat for systems without
67 * libc or libbsd copies of the function
68 */
69static inline size_t
70rte_strlcat(char *dst, const char *src, size_t size)
71{
72 size_t l = strnlen(dst, size);
73 if (l < size)
74 return l + rte_strlcpy(&dst[l], src, size - l);
75 return l + strlen(src);
76}
77
78/* pull in a strlcpy function */
79#ifdef RTE_EXEC_ENV_FREEBSD
80#ifndef __BSD_VISIBLE /* non-standard functions are hidden */
81#define strlcpy(dst, src, size) rte_strlcpy(dst, src, size)
82#define strlcat(dst, src, size) rte_strlcat(dst, src, size)
83#endif
84
85#else /* non-BSD platforms */
86#ifdef RTE_USE_LIBBSD
87#include <bsd/string.h>
88
89#else /* no BSD header files, create own */
90#define strlcpy(dst, src, size) rte_strlcpy(dst, src, size)
91#define strlcat(dst, src, size) rte_strlcat(dst, src, size)
92
93#endif /* RTE_USE_LIBBSD */
94#endif /* FREEBSD */
95
96/**
97 * Copy string src to buffer dst of size dsize.
98 * At most dsize-1 chars will be copied.
99 * Always NUL-terminates, unless (dsize == 0).
100 * Returns number of bytes copied (terminating NUL-byte excluded) on success ;
101 * negative errno on error.
102 *
103 * @param dst
104 * The destination string.
105 *
106 * @param src
107 * The input string to be copied.
108 *
109 * @param dsize
110 * Length in bytes of the destination buffer.
111 *
112 * @return
113 * The number of bytes copied on success
114 * -E2BIG if the destination buffer is too small.
115 */
116ssize_t
117rte_strscpy(char *dst, const char *src, size_t dsize);
118
7c673cae
FG
119#ifdef __cplusplus
120}
121#endif
122
123#endif /* RTE_STRING_FNS_H */