1 /*
2 * Copyright (C) 2022 Beken Corporation
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <common/bk_include.h>
17
18 #include <string.h>
19 #include <stdlib.h>
20 #include <stdio.h>
21 #include <os/str.h>
22 #include <os/mem.h>
23
os_strchr(const char * s,int c)24 char *os_strchr(const char *s, int c)
25 {
26 return strchr(s, c);
27 }
28
os_strlen(const char * str)29 UINT32 os_strlen(const char *str)
30 {
31 return strlen(str);
32 }
33
os_strcmp(const char * s1,const char * s2)34 INT32 os_strcmp(const char *s1, const char *s2)
35 {
36 return strcmp(s1, s2);
37 }
38
os_strtoul(const char * nptr,char ** endptr,int base)39 UINT32 os_strtoul(const char *nptr, char **endptr, int base)
40 {
41 return strtoul(nptr, endptr, base);
42 }
43
os_strcpy(char * out,const char * in)44 char *os_strcpy(char *out, const char *in)
45 {
46 return strcpy(out, in);
47 }
48
os_strncpy(char * out,const char * in,const UINT32 n)49 char *os_strncpy(char *out, const char *in, const UINT32 n)
50 {
51 return strncpy(out, in, (unsigned int)n);
52 }
53
os_strlcpy(char * dest,const char * src,size_t siz)54 size_t os_strlcpy(char *dest, const char *src, size_t siz)
55 {
56 const char *s = src;
57 size_t left = siz;
58
59 if (left)
60 {
61 /* Copy string up to the maximum size of the dest buffer */
62 while (--left != 0)
63 {
64 if ((*dest++ = *s++) == '\0')
65 break;
66 }
67 }
68
69 if (left == 0)
70 {
71 /* Not enough room for the string; force NUL-termination */
72 if (siz != 0)
73 *dest = '\0';
74
75 while (*s++)
76 ; /* determine total src string length */
77 }
78
79 return s - src - 1;
80 }
81
os_strncmp(const char * s1,const char * s2,const UINT32 n)82 INT32 os_strncmp(const char *s1, const char *s2, const UINT32 n)
83 {
84 return strncmp(s1, s2, (unsigned int)n);
85 }
86
os_snprintf(char * buf,UINT32 size,const char * fmt,...)87 INT32 os_snprintf(char *buf, UINT32 size, const char *fmt, ...)
88 {
89 va_list args;
90 INT32 rc;
91
92 va_start(args, fmt);
93 rc = vsnprintf(buf, size, fmt, args);
94 va_end(args);
95
96 /* if want to print more than the limitation */
97 if (rc > size)
98 rc = (INT32)size - rc;
99
100 return rc;
101 }
102
os_vsnprintf(char * buf,UINT32 size,const char * fmt,va_list ap)103 INT32 os_vsnprintf(char *buf, UINT32 size, const char *fmt, va_list ap)
104 {
105 return vsnprintf(buf, size, fmt, ap);
106 }
107
os_strdup(const char * s)108 char *os_strdup(const char *s)
109 {
110 char *res;
111 size_t len;
112
113 if (s == NULL)
114 return NULL;
115
116 len = os_strlen(s);
117 res = os_malloc(len + 1);
118 if (res)
119 os_memcpy(res, s, len + 1);
120
121 return res;
122 }
123
124
os_strcasecmp(const char * s1,const char * s2)125 int os_strcasecmp(const char *s1, const char *s2)
126 {
127 /*
128 * Ignoring case is not required for main functionality, so just use
129 * the case sensitive version of the function.
130 */
131 return os_strcmp(s1, s2);
132 }
133
134
os_strncasecmp(const char * s1,const char * s2,size_t n)135 int os_strncasecmp(const char *s1, const char *s2, size_t n)
136 {
137 /*
138 * Ignoring case is not required for main functionality, so just use
139 * the case sensitive version of the function.
140 */
141 return os_strncmp(s1, s2, n);
142 }
143
os_strrchr(const char * s,int c)144 char *os_strrchr(const char *s, int c)
145 {
146 return strrchr(s, c);
147 }
148
os_strstr(const char * haystack,const char * needle)149 char *os_strstr(const char *haystack, const char *needle)
150 {
151 return strstr(haystack, needle);
152 }
153 // EOF
154