1/******************************************************************************
2 *
3 *  Copyright (C) 2014 The Android Open Source Project
4 *  Copyright 2002 - 2004 Open Interface North America, Inc. All rights
5 *                        reserved.
6 *
7 *  Licensed under the Apache License, Version 2.0 (the "License");
8 *  you may not use this file except in compliance with the License.
9 *  You may obtain a copy of the License at:
10 *
11 *  http://www.apache.org/licenses/LICENSE-2.0
12 *
13 *  Unless required by applicable law or agreed to in writing, software
14 *  distributed under the License is distributed on an "AS IS" BASIS,
15 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 *  See the License for the specific language governing permissions and
17 *  limitations under the License.
18 *
19 ******************************************************************************/
20#ifndef OI_STRING_H
21#define OI_STRING_H
22/**
23 * @file
24 * This file contains BM3 supplied portable string.h functions
25 *
26 */
27
28/*******************************************************************************
29  $Revision: #1 $
30 ******************************************************************************/
31
32#include "oi_cpu_dep.h"
33#include "oi_stddefs.h"
34
35#if defined(USE_NATIVE_MEMCPY) || defined(USE_NATIVE_MALLOC)
36#include <string.h>
37#endif
38
39/** \addtogroup Misc Miscellaneous APIs */
40/**@{*/
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46/*
47 * If we are using Native malloc(), we must also use
48 * native Ansi string.h functions for memory manipulation.
49 */
50#ifdef USE_NATIVE_MALLOC
51#ifndef USE_NATIVE_MEMCPY
52#define USE_NATIVE_MEMCPY
53#endif
54#endif
55
56#ifdef USE_NATIVE_MEMCPY
57
58#define OI_MemCopy(to, from, size) memcpy((to), (from), (size))
59#define OI_MemSet(block, val, size) memset((block), (val), (size))
60#define OI_MemZero(block, size) memset((block), 0, (size))
61#define OI_MemCmp(s1, s2, n) memcmp((s1), (s2), (n))
62#define OI_Strcpy(dest, src) strcpy((dest), (src))
63#define OI_Strcat(dest, src) strcat((dest), (src))
64#define OI_StrLen(str) strlen((str))
65#define OI_Strcmp(s1, s2) strcmp((s1), (s2))
66#define OI_Strncmp(s1, s2, n) strncmp((s1), (s2), (n))
67
68#else
69
70/*
71 * OI_MemCopy
72 *
73 * Copy an arbitrary number of bytes from one memory address to another.
74 * The underlying implementation is the ANSI memmove() or equivalant, so
75 * overlapping memory copies will work correctly.
76 */
77void OI_MemCopy(void* To, void const* From, uint32_t Size);
78
79/*
80 * OI_MemSet
81 *
82 * Sets all bytes in a block of memory to the same value
83 */
84void OI_MemSet(void* Block, uint8_t Val, uint32_t Size);
85
86/*
87 * OI_MemZero
88 *
89 * Sets all bytes in a block of memory to zero
90 */
91void OI_MemZero(void* Block, uint32_t Size);
92
93/*
94 * OI_MemCmp
95 *
96 * Compare two blocks of memory
97 *
98 * Returns:
99 *        0, if s1 == s2
100 *      < 0, if s1 < s2
101 *      > 0, if s2 > s2
102 */
103OI_INT OI_MemCmp(void const* s1, void const* s2, uint32_t n);
104
105/*
106 * OI_Strcpy
107 *
108 * Copies the Null terminated string from pStr to pDest, and
109 * returns pDest.
110 */
111
112OI_CHAR* OI_Strcpy(OI_CHAR* pDest, OI_CHAR const* pStr);
113
114/*
115 * OI_Strcat
116 *
117 * Concatonates the pStr string to the end of pDest, and
118 * returns pDest.
119 */
120
121OI_CHAR* OI_Strcat(OI_CHAR* pDest, OI_CHAR const* pStr);
122
123/*
124 * OI_StrLen
125 *
126 * Calculates the number of OI_CHARs in pStr (not including
127 * the Null terminator) and returns the value.
128 */
129OI_UINT OI_StrLen(OI_CHAR const* pStr);
130
131/*
132 * OI_Strcmp
133 *
134 * Compares two Null terminated strings
135 *
136 * Returns:
137 *        0, if s1 == s2
138 *      < 0, if s1 < s2
139 *      > 0, if s2 > s2
140 */
141OI_INT OI_Strcmp(OI_CHAR const* s1, OI_CHAR const* s2);
142
143/*
144 * OI_Strncmp
145 *
146 * Compares the first "len" OI_CHARs of strings s1 and s2.
147 *
148 * Returns:
149 *        0, if s1 == s2
150 *      < 0, if s1 < s2
151 *      > 0, if s2 > s2
152 */
153OI_INT OI_Strncmp(OI_CHAR const* s1, OI_CHAR const* s2, uint32_t len);
154
155#endif /* USE_NATIVE_MEMCPY */
156
157/*
158 * OI_StrcmpInsensitive
159 *
160 * Compares two Null terminated strings, treating
161 * the Upper and Lower case of 'A' through 'Z' as
162 * equivilent.
163 *
164 * Returns:
165 *        0, if s1 == s2
166 *      < 0, if s1 < s2
167 *      > 0, if s2 > s2
168 */
169OI_INT OI_StrcmpInsensitive(OI_CHAR const* s1, OI_CHAR const* s2);
170
171/*
172 * OI_StrncmpInsensitive
173 *
174 * Compares the first "len" OI_CHARs of strings s1 and s2,
175 * treating the Upper and Lower case of 'A' through 'Z' as
176 * equivilent.
177 *
178 *
179 * Returns:
180 *        0, if s1 == s2
181 *      < 0, if s1 < s2
182 *      > 0, if s2 > s2
183 */
184OI_INT OI_StrncmpInsensitive(OI_CHAR const* s1, OI_CHAR const* s2, OI_UINT len);
185
186#ifdef __cplusplus
187}
188#endif
189
190/** @} */
191
192/*****************************************************************************/
193#endif /* OI_STRING_H */
194