1 '\" te 2 .\" Copyright (c) 2009, Sun Microsystems, Inc. All Rights Reserved. 3 .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License. 4 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License. 5 .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner] 6 .TH STRING 9F "Jun 4, 2014" 7 .SH NAME 8 string, strcasecmp, strncasecmp, strncat, strlcat, strchr, strrchr, strcmp, 9 strncmp, strcpy, strncpy, strlcpy, strfree, strspn, strdup, ddi_strdup, strlen, 10 strnlen \- string operations 11 .SH SYNOPSIS 12 .LP 13 .nf 14 #include <sys/ddi.h> 15 #include <sys/sunddi.h> 16 17 \fBint\fR \fBstrcasecmp\fR(\fBconst char *\fR\fIs1\fR, \fBconst char *\fR\fIs2\fR); 18 .fi 19 20 .LP 21 .nf 22 \fBint\fR \fBstrncasecmp\fR(\fBconst char *\fR\fIs1\fR, \fBconst char *\fR\fIs2\fR, \fBsize_t\fR \fIn\fR); 23 .fi 24 25 .LP 26 .nf 27 \fBchar *\fR\fBstrncat\fR(\fBchar *\fR \fIs1\fR, \fBconst char *\fR \fIs2\fR, \fBsize_t\fR \fIn\fR); 28 .fi 29 30 .LP 31 .nf 32 \fBsize_t\fR \fBstrlcat\fR(\fBchar *\fR\fIdst\fR, \fBconst char *\fR\fIsrc\fR, \fBsize_t\fR \fIdstsize\fR); 33 .fi 34 35 .LP 36 .nf 37 \fBchar *\fR\fBstrchr\fR(\fBconst char *\fR\fIstr\fR, \fBint\fR \fIchr\fR); 38 .fi 39 40 .LP 41 .nf 42 \fBchar *\fR\fBstrrchr\fR(\fBconst char *\fR\fIstr\fR, \fBint\fR \fIchr\fR); 43 .fi 44 45 .LP 46 .nf 47 \fBint\fR \fBstrcmp\fR(\fBconst char *\fR\fIs1\fR, \fBconst char *\fR\fIs2\fR); 48 .fi 49 50 .LP 51 .nf 52 \fBint\fR \fBstrncmp\fR(\fBconst char *\fR\fIs1\fR, \fBconst char *\fR\fIs2\fR, \fBsize_t\fR \fIn\fR); 53 .fi 54 55 .LP 56 .nf 57 \fBchar *\fR\fBstrcpy\fR(\fBchar *\fR \fIdst\fR, \fBconst char *\fR \fIsrc\fR); 58 .fi 59 60 .LP 61 .nf 62 \fBchar *\fR\fBstrncpy\fR(\fBchar *\fR \fIdst\fR, \fBconst char *\fR \fIsrc\fR, \fBsize_t\fR \fIn\fR); 63 .fi 64 65 .LP 66 .nf 67 \fBsize_t\fR \fBstrlcpy\fR(\fBchar *\fR\fIdst\fR, \fBconst char *\fR\fIsrc\fR, \fBsize_t\fR \fIdstsize\fR); 68 .fi 69 70 .LP 71 .nf 72 \fBvoid\fR \fBstrfree\fR(\fBchar *\fR\fIs\fR); 73 .fi 74 75 .LP 76 .nf 77 \fBsize_t\fR \fBstrspn\fR(\fBconst char *\fR\fIs1\fR, \fBconst char *\fR\fIs2\fR); 78 .fi 79 80 .LP 81 .nf 82 \fBchar *\fR\fBstrdup\fR(\fBconst char *\fR\fIs1\fR); 83 .fi 84 85 .LP 86 .nf 87 \fBchar *\fR\fBddi_strdup\fR(\fBconst char *\fR\fIs1\fR, \fBint\fR \fIflag\fR); 88 .fi 89 90 .LP 91 .nf 92 \fBsize_t\fR \fBstrlen\fR(\fBconst char *\fR\fIs\fR); 93 .fi 94 95 .LP 96 .nf 97 \fBsize_t\fR \fBstrnlen\fR(\fBconst char *\fR\fIs\fR, \fBsize_t\fR \fIn\fR); 98 .fi 99 100 .SH INTERFACE LEVEL 101 .sp 102 .LP 103 Solaris DDI specific (Solaris DDI). 104 .SH DESCRIPTION 105 .sp 106 .LP 107 The arguments \fIs\fR, \fIs1\fR, and \fIs2\fR point to strings (arrays of 108 characters terminated by a null character). The \fBstrcat()\fR, 109 \fBstrncat()\fR, \fBstrlcat()\fR, \fBstrcpy()\fR, \fBstrncpy()\fR, 110 \fBstrlcpy()\fR, and \fBstrfree()\fR functions all alter their first argument. 111 Additionally, the \fBstrcpy()\fR function does not check for overflow of the 112 array. 113 .SS "\fBstrcasecmp()\fR, \fBstrncasecmp()\fR" 114 .sp 115 .LP 116 The \fBstrcasecmp()\fR and \fBstrncasecmp()\fR functions are case-insensitive 117 versions of \fBstrcmp()\fR and \fBstrncmp()\fR respectively, described below. 118 They assume the \fBASCII\fR character set and ignore differences in case when 119 comparing lower and upper case characters. 120 .SS "\fBstrncat()\fR, \fBstrlcat()\fR" 121 .sp 122 .LP 123 The \fBstrncat()\fR function appends at most \fIn\fR characters of string 124 \fIs2\fR, including the terminating null character, to the end of string 125 \fIs1\fR. It returns a pointer to the null-terminated result. The initial 126 character of \fIs2\fR overrides the null character at the end of \fIs1\fR. If 127 copying takes place between objects that overlap, the behavior of 128 \fBstrncat()\fRand \fBstrlcat()\fR is undefined. 129 .sp 130 .LP 131 The \fBstrlcat()\fR function appends at most 132 (\fIdstsize\fR-\fBstrlen\fR(\fIdst\fR)-1) characters of \fIsrc\fR to \fIdst\fR 133 (\fIdstsize\fR being the size of the string buffer \fIdst\fR). If the string 134 pointed to by \fIdst\fR contains a null-terminated string that fits into 135 \fIdstsize\fR bytes when \fBstrlcat()\fR is called, the string pointed to by 136 \fIdst\fR will be a null-terminated string that fits in \fIdstsize\fR bytes 137 (including the terminating null character) when it completes, and the initial 138 character of \fIsrc\fR will override the null character at the end of 139 \fIdst\fR. If the string pointed to by \fIdst\fR is longer than \fIdstsize\fR 140 bytes when \fBstrlcat()\fR is called, the string pointed to by \fIdst\fR will 141 not be changed. The function returns 142 \fBmin\fR{\fIdstsize\fR,\fBstrlen\fR(\fIdst\fR)}+\fBstrlen\fR(\fIsrc\fR). 143 Buffer overflow can be checked as follows: 144 .sp 145 .in +2 146 .nf 147 if (strlcat(dst, src, dstsize) >= dstsize) 148 return \(mi1; 149 .fi 150 .in -2 151 152 .SS "\fBstrchr()\fR, \fBstrrchr()\fR" 153 .sp 154 .LP 155 The \fBstrchr()\fR function returns a pointer to the first occurrence of 156 \fIc\fR (converted to a \fBchar\fR) in string \fIs\fR, or a null pointer if 157 \fIc\fR does not occur in the string. The \fBstrrchr()\fR function returns a 158 pointer to the last occurrence of \fIc\fR. The null character terminating a 159 string is considered to be part of the string. 160 .SS "\fBstrcmp()\fR, \fBstrncmp()\fR" 161 .sp 162 .LP 163 The \fBstrcmp()\fR function compares two strings byte-by-byte, according to the 164 ordering of your machine's character set. The function returns an integer 165 greater than, equal to, or less than 0, if the string pointed to by \fIs1\fR 166 is greater than, equal to, or less than the string pointed to by \fIs2\fR 167 respectively. The sign of a non-zero return value is determined by the sign of 168 the difference between the values of the first pair of bytes that differ in the 169 strings being compared. The \fBstrncmp()\fR function makes the same comparison 170 but looks at a maximum of \fIn\fR bytes. Bytes following a null byte are not 171 compared. 172 .SS "\fBstrcpy()\fR, \fBstrncpy()\fR, \fBstrlcpy()\fR" 173 .sp 174 .LP 175 The \fBstrcpy()\fR function copies string \fIs2\fR to \fIs1\fR, including the 176 terminating null character, stopping after the null character has been copied. 177 The \fBstrncpy()\fR function copies exactly \fIn\fR bytes, truncating \fIs2\fR 178 or adding null characters to \fIs1\fR if necessary. The result will not be 179 null-terminated if the length of \fIs2\fR is \fIn\fR or more. Each function 180 returns \fIs1\fR. If copying takes place between objects that overlap, the 181 behavior of \fBstrcpy()\fR, \fBstrncpy()\fR, and \fBstrlcpy()\fR is undefined. 182 .sp 183 .LP 184 The \fBstrlcpy()\fR function copies at most \fIdstsize\fR\(mi1 characters 185 (\fIdstsize\fR being the size of the string buffer \fIdst\fR) from \fIsrc\fR 186 to \fIdst\fR, truncating \fIsrc\fR if necessary. The result is always 187 null-terminated. The function returns \fBstrlen\fR(\fIsrc\fR). Buffer overflow 188 can be checked as follows: 189 .sp 190 .in +2 191 .nf 192 if (strlcpy(dst, src, dstsize) >= dstsize) 193 return \(mi1; 194 .fi 195 .in -2 196 197 .SS "\fBstrfree()\fR" 198 .sp 199 .LP 200 The \fBstrfree()\fR function frees the memory associated with the string 201 pointed to by \fIs\fR. This memory pointed to by \fIs\fR must be of size 202 \fBstrlen\fR(\fIs\fR)+1, and must have been allocated (either directly or 203 indirectly) by \fBkmem_alloc\fR(9F) or \fBkmem_zalloc\fR(9F). 204 .SS "\fBstrspn()\fR" 205 .sp 206 .LP 207 The \fBstrspn()\fR function returns the length of the initial segment of string 208 \fIs1\fR that consists entirely of characters from string \fIs2\fR. 209 .SS "\fBstrdup()\fR, \fBddi_strdup()\fR" 210 .sp 211 .LP 212 The \fBddi_strdup()\fR function returns a pointer to a new string that is a 213 duplicate of the string pointed to by \fIs1\fR. The returned pointer can be 214 passed to \fBstrfree()\fR or \fBkmem_free\fR(9F). The space for the new string 215 is obtained using \fBkmem_alloc()\fR. flag can be either \fBKM_SLEEP\fR or 216 \fBKM_NOSLEEP\fR, and determines whether the caller can sleep for memory. 217 \fBKM_SLEEP\fR allocations may sleep but are guaranteed to succeed. 218 \fBKM_NOSLEEP\fR allocations are guaranteed not to sleep but may fail (return 219 \fINULL\fR) if no memory is currently available. 220 .sp 221 .LP 222 The \fBstrdup()\fR function behaves the same as the \fBddi_strdup()\fR when 223 called with the \fBKM_SLEEP\fR flag. This means that \fBstrdup()\fR can sleep 224 until memory is available and will always succeed. 225 .SS "\fBstrlen()\fR, \fBstrnlen()\fR" 226 .sp 227 .LP 228 The \fBstrlen()\fR function returns the number of bytes in \fIs\fR, not 229 including the terminating null character. 230 .sp 231 .LP 232 The \fBstrnlen()\fR function returns the smaller of \fIn\fR or the number of 233 bytes in \fIs\fR, not including the terminating null character. The 234 \fBstrnlen()\fR function never examines more than \fIn\fR bytes of the string 235 pointed to by \fIs\fR. 236 .SH CONTEXT 237 .sp 238 .LP 239 The \fBstrdup()\fR and \fBddi_strdup()\fR functions can be called from user or 240 kernel context. 241 .sp 242 .LP 243 The \fBddi_strdup()\fR function can be called from interrupt context only if 244 the \fBKM_NOSLEEP\fR flag is set. 245 .sp 246 .LP 247 All the other string manipulation functions can be called from user, interrupt, 248 or kernel context. 249 .SH ATTRIBUTES 250 .sp 251 .LP 252 See \fBattributes\fR(5) for descriptions of the following attributes: 253 .sp 254 255 .sp 256 .TS 257 box; 258 c | c 259 l | l . 260 ATTRIBUTE TYPE ATTRIBUTE VALUE 261 _ 262 Interface Stability Committed 263 .TE 264 265 .SH SEE ALSO 266 .sp 267 .LP 268 \fBstring\fR(3C), \fBattributes\fR(5), \fBbcopy\fR(9F), \fBddi_copyin\fR(9F), 269 \fBkmem_alloc\fR(9F) 270 .sp 271 .LP 272 \fIWriting Device Drivers\fR 273 .SH NOTES 274 .sp 275 .LP 276 If copying takes place between objects that overlap, the behavior of 277 \fBstrlcat()\fR, \fBstrncat()\fR, \fBstrcpy()\fR, \fBstrlcpy()\fR, and 278 \fBstrncpy()\fR is undefined.