1d6bf1708SRobert Mustacchi.\" 2f6ed5ca2SRobert Mustacchi.\" Copyright (c) 2014, Joyent, Inc. 3c10c16deSRichard Lowe.\" Copyright (c) 2009, Sun Microsystems, Inc. All Rights Reserved. 4c10c16deSRichard Lowe.\" Copyright 1989 AT&T 5d6bf1708SRobert Mustacchi.\" Copyright 2021 Oxide Computer Company 6d6bf1708SRobert Mustacchi.\" 7d6bf1708SRobert Mustacchi.\" The contents of this file are subject to the terms of the 8d6bf1708SRobert Mustacchi.\" Common Development and Distribution License (the "License"). 9d6bf1708SRobert Mustacchi.\" You may not use this file except in compliance with the License. 10d6bf1708SRobert Mustacchi.\" 11d6bf1708SRobert Mustacchi.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 12d6bf1708SRobert Mustacchi.\" or http://www.opensolaris.org/os/licensing. 13d6bf1708SRobert Mustacchi.\" See the License for the specific language governing permissions 14d6bf1708SRobert Mustacchi.\" and limitations under the License. 15d6bf1708SRobert Mustacchi.\" 16d6bf1708SRobert Mustacchi.\" When distributing Covered Code, include this CDDL HEADER in each 17d6bf1708SRobert Mustacchi.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE. 18d6bf1708SRobert Mustacchi.\" If applicable, add the following below this CDDL HEADER, with the 19d6bf1708SRobert Mustacchi.\" fields enclosed by brackets "[]" replaced with your own identifying 20d6bf1708SRobert Mustacchi.\" information: Portions Copyright [yyyy] [name of copyright owner] 21d6bf1708SRobert Mustacchi.\" 2225cdfc4fSDenis Ovsienko.Dd January 25, 2022 23d6bf1708SRobert Mustacchi.Dt MEMORY 3C 24d6bf1708SRobert Mustacchi.Os 25d6bf1708SRobert Mustacchi.Sh NAME 26d6bf1708SRobert Mustacchi.Nm memory , 27d6bf1708SRobert Mustacchi.Nm memccpy , 28d6bf1708SRobert Mustacchi.Nm memchr , 29d6bf1708SRobert Mustacchi.Nm memcmp , 30d6bf1708SRobert Mustacchi.Nm memcpy , 31d6bf1708SRobert Mustacchi.Nm memmem , 32d6bf1708SRobert Mustacchi.Nm memmove , 33d6bf1708SRobert Mustacchi.Nm memrchr , 34d6bf1708SRobert Mustacchi.Nm memset 35d6bf1708SRobert Mustacchi.Nd memory operations 36d6bf1708SRobert Mustacchi.Sh SYNOPSIS 37d6bf1708SRobert Mustacchi.In string.h 38d6bf1708SRobert Mustacchi.Ft "void *" 39d6bf1708SRobert Mustacchi.Fo memccpy 40d6bf1708SRobert Mustacchi.Fa "void *restrict s1" 41d6bf1708SRobert Mustacchi.Fa "const void *restrict s2" 42d6bf1708SRobert Mustacchi.Fa "int c" 43d6bf1708SRobert Mustacchi.Fa "size_t n" 44d6bf1708SRobert Mustacchi.Fc 45d6bf1708SRobert Mustacchi.Ft "void *" 46d6bf1708SRobert Mustacchi.Fo memchr 4725cdfc4fSDenis Ovsienko.Fa "void *s" 48d6bf1708SRobert Mustacchi.Fa "int c" 49d6bf1708SRobert Mustacchi.Fa "size_t n" 50d6bf1708SRobert Mustacchi.Fc 51d6bf1708SRobert Mustacchi.Ft int 52d6bf1708SRobert Mustacchi.Fo memcmp 53d6bf1708SRobert Mustacchi.Fa "const void *s1" 54d6bf1708SRobert Mustacchi.Fa "const void *s2" 55d6bf1708SRobert Mustacchi.Fa "size_t n" 56d6bf1708SRobert Mustacchi.Fc 57d6bf1708SRobert Mustacchi.Ft "void *" 58d6bf1708SRobert Mustacchi.Fo memcpy 59d6bf1708SRobert Mustacchi.Fa "void *restrict s1" 60d6bf1708SRobert Mustacchi.Fa "const void *restrict s2" 61d6bf1708SRobert Mustacchi.Fa "size_t n" 62d6bf1708SRobert Mustacchi.Fc 63d6bf1708SRobert Mustacchi.Ft "void *" 64d6bf1708SRobert Mustacchi.Fo memmem 65d6bf1708SRobert Mustacchi.Fa "const void *l" 66d6bf1708SRobert Mustacchi.Fa "size_t l_len" 67d6bf1708SRobert Mustacchi.Fa "const void *s" 68d6bf1708SRobert Mustacchi.Fa "size_t s_len" 69d6bf1708SRobert Mustacchi.Fc 70d6bf1708SRobert Mustacchi.Ft "void *" 71d6bf1708SRobert Mustacchi.Fo memmove 72d6bf1708SRobert Mustacchi.Fa "void *s1" 73d6bf1708SRobert Mustacchi.Fa "const void *s2" 74d6bf1708SRobert Mustacchi.Fa "size_t n" 75d6bf1708SRobert Mustacchi.Fc 76d6bf1708SRobert Mustacchi.Ft "void *" 77d6bf1708SRobert Mustacchi.Fo memrchr 7825cdfc4fSDenis Ovsienko.Fa "void *s" 79d6bf1708SRobert Mustacchi.Fa "int c" 80d6bf1708SRobert Mustacchi.Fa "size_t n" 81d6bf1708SRobert Mustacchi.Fc 82d6bf1708SRobert Mustacchi.Ft "void *" 83d6bf1708SRobert Mustacchi.Fo memset 84d6bf1708SRobert Mustacchi.Fa "void *s" 8525cdfc4fSDenis Ovsienko.Fa "int c" 86d6bf1708SRobert Mustacchi.Fa "size_t n" 87d6bf1708SRobert Mustacchi.Fc 88d6bf1708SRobert Mustacchi.Sh DESCRIPTION 89c10c16deSRichard LoweThese functions operate as efficiently as possible on memory areas (arrays of 90d6bf1708SRobert Mustacchibytes bounded by a count, not terminated by a null character). 91d6bf1708SRobert MustacchiThey do not check for the overflow of any receiving memory area. 92d6bf1708SRobert Mustacchi.Pp 93d6bf1708SRobert MustacchiThe 94d6bf1708SRobert Mustacchi.Fn memccpy 95d6bf1708SRobert Mustacchifunction copies bytes from memory area 96d6bf1708SRobert Mustacchi.Fa s2 97d6bf1708SRobert Mustacchiinto 98d6bf1708SRobert Mustacchi.Fa s1 , 99d6bf1708SRobert Mustacchistopping after the first occurrence of 100d6bf1708SRobert Mustacchi.Fa c 101d6bf1708SRobert Mustacchi.Po 102d6bf1708SRobert Mustacchiconverted to an 103d6bf1708SRobert Mustacchi.Vt unsigned char 104d6bf1708SRobert Mustacchi.Pc 105d6bf1708SRobert Mustacchihas been copied, or after 106d6bf1708SRobert Mustacchi.Fa n 107d6bf1708SRobert Mustacchibytes have been copied, whichever comes first. 108d6bf1708SRobert MustacchiIt returns a pointer to the byte after the copy of 109d6bf1708SRobert Mustacchi.Fa c 110d6bf1708SRobert Mustacchiin 111d6bf1708SRobert Mustacchi.Fa s1 , 112d6bf1708SRobert Mustacchior a 113d6bf1708SRobert Mustacchi.Dv NULL 114d6bf1708SRobert Mustacchipointer if 115d6bf1708SRobert Mustacchi.Fa c 116d6bf1708SRobert Mustacchiwas not found in the first 117d6bf1708SRobert Mustacchi.Fa n 118d6bf1708SRobert Mustacchibytes of 119d6bf1708SRobert Mustacchi.Fa s2 . 120d6bf1708SRobert Mustacchi.Pp 121d6bf1708SRobert MustacchiThe 122d6bf1708SRobert Mustacchi.Fn memchr 123d6bf1708SRobert Mustacchifunction returns a pointer to the first occurrence of 124d6bf1708SRobert Mustacchi.Fa c 125d6bf1708SRobert Mustacchi.Po 126d6bf1708SRobert Mustacchiconverted to an 127d6bf1708SRobert Mustacchi.Vt unsigned char 128d6bf1708SRobert Mustacchi.Pc 129d6bf1708SRobert Mustacchiin the first 130d6bf1708SRobert Mustacchi.Fa n 131d6bf1708SRobert Mustacchibytes 132d6bf1708SRobert Mustacchi.Po 133d6bf1708SRobert Mustacchieach interpreted as an 134d6bf1708SRobert Mustacchi.Vt unsigned char 135d6bf1708SRobert Mustacchi.Pc 136d6bf1708SRobert Mustacchiof memory area 137d6bf1708SRobert Mustacchi.Fa s , 138d6bf1708SRobert Mustacchior a 139d6bf1708SRobert Mustacchi.Dv NULL 140d6bf1708SRobert Mustacchipointer if 141d6bf1708SRobert Mustacchi.Fa c 142d6bf1708SRobert Mustacchidoes not occur. 143d6bf1708SRobert Mustacchi.Pp 144d6bf1708SRobert MustacchiThe 145d6bf1708SRobert Mustacchi.Fn memrchr 146d6bf1708SRobert Mustacchifunction behaves similarly to the 147d6bf1708SRobert Mustacchi.Fn memchr 148d6bf1708SRobert Mustacchifunction, except that the memory area is searched in reverse from the 149d6bf1708SRobert Mustacchilast byte. 150d6bf1708SRobert Mustacchi.Pp 151d6bf1708SRobert MustacchiThe 152d6bf1708SRobert Mustacchi.Fn memcmp 153d6bf1708SRobert Mustacchifunction compares its arguments, looking at the first 154d6bf1708SRobert Mustacchi.Fa n 155d6bf1708SRobert Mustacchibytes 156d6bf1708SRobert Mustacchi.Po 157d6bf1708SRobert Mustacchieach interpreted as an 158d6bf1708SRobert Mustacchi.Vt unsigned char 159d6bf1708SRobert Mustacchi.Pc , 160d6bf1708SRobert Mustacchiand returns an integer less than, equal to, or greater than 0, according as 161d6bf1708SRobert Mustacchi.Fa s1 162d6bf1708SRobert Mustacchiis less than, equal to, or greater than 163d6bf1708SRobert Mustacchi.Fa s2 164d6bf1708SRobert Mustacchiwhen taken to be unsigned characters. 165d6bf1708SRobert Mustacchi.Pp 166d6bf1708SRobert MustacchiThe 167d6bf1708SRobert Mustacchi.Fn memcpy 168d6bf1708SRobert Mustacchifunction copies 169d6bf1708SRobert Mustacchi.Fa n 170d6bf1708SRobert Mustacchibytes from memory area 171d6bf1708SRobert Mustacchi.Fa s2 172d6bf1708SRobert Mustacchito 173d6bf1708SRobert Mustacchi.Fa s1 174d6bf1708SRobert MustacchiIt returns 175d6bf1708SRobert Mustacchi.Fa s1 . 176d6bf1708SRobert MustacchiIf copying takes place between objects that overlap, the behavior is undefined. 177d6bf1708SRobert MustacchiIn such cases, use 178d6bf1708SRobert Mustacchi.Fn memmove 179d6bf1708SRobert Mustacchiinstead. 180d6bf1708SRobert Mustacchi.Pp 181d6bf1708SRobert MustacchiThe 182d6bf1708SRobert Mustacchi.Fn memmem 183d6bf1708SRobert Mustacchifunction searches for the 184d6bf1708SRobert Mustacchi.Fa s_len 185d6bf1708SRobert Mustacchilong byte pattern 186d6bf1708SRobert Mustacchi.Fa s 187d6bf1708SRobert Mustacchiin the memory region starting at 188d6bf1708SRobert Mustacchi.Fa l 189d6bf1708SRobert Mustacchifor 190d6bf1708SRobert Mustacchi.Fa l_len 191d6bf1708SRobert Mustacchibytes. 192d6bf1708SRobert MustacchiIf a match is found, a pointer to the starting location in 193d6bf1708SRobert Mustacchi.Fa l 194d6bf1708SRobert Mustacchiis returned. 195d6bf1708SRobert MustacchiIf no match is found, 196d6bf1708SRobert Mustacchi.Fa l_len 197d6bf1708SRobert Mustacchiis zero, 198d6bf1708SRobert Mustacchi.Fa s_len 199d6bf1708SRobert Mustacchiis zero, or 200d6bf1708SRobert Mustacchi.Fa l_len 201d6bf1708SRobert Mustacchiis less than 202d6bf1708SRobert Mustacchi.Fa s_len 203d6bf1708SRobert Mustacchithen a 204d6bf1708SRobert Mustacchi.Dv NULL 205d6bf1708SRobert Mustacchipointer is return. 206d6bf1708SRobert Mustacchi.Pp 207d6bf1708SRobert MustacchiThe 208d6bf1708SRobert Mustacchi.Fn memmove 209d6bf1708SRobert Mustacchifunction copies 210d6bf1708SRobert Mustacchi.Fa n 211d6bf1708SRobert Mustacchibytes from memory area 212d6bf1708SRobert Mustacchi.Fa s2 213d6bf1708SRobert Mustacchito memory area 214d6bf1708SRobert Mustacchi.Fa s1 . 215d6bf1708SRobert MustacchiCopying between objects that overlap will take place correctly. 216d6bf1708SRobert MustacchiIt returns 217d6bf1708SRobert Mustacchi.Fa s1 . 218d6bf1708SRobert Mustacchi.Pp 219d6bf1708SRobert MustacchiThe 220d6bf1708SRobert Mustacchi.Fn memset 221d6bf1708SRobert Mustacchifunction sets the first 222d6bf1708SRobert Mustacchi.Fa n 223d6bf1708SRobert Mustacchibytes in memory area 224d6bf1708SRobert Mustacchi.Fa s 225d6bf1708SRobert Mustacchito the value of 226d6bf1708SRobert Mustacchi.Fa c 227d6bf1708SRobert Mustacchi.Po 228d6bf1708SRobert Mustacchiconverted to an 229d6bf1708SRobert Mustacchi.Vt unsigned char 230d6bf1708SRobert Mustacchi.Pc . 231d6bf1708SRobert MustacchiIt returns 232d6bf1708SRobert Mustacchi.Fa s . 233d6bf1708SRobert Mustacchi.Sh USAGE 234d6bf1708SRobert MustacchiUsing 235d6bf1708SRobert Mustacchi.Fn memcpy 236d6bf1708SRobert Mustacchimight be faster than using 237d6bf1708SRobert Mustacchi.Fn memmove 238d6bf1708SRobert Mustacchiif the 239c10c16deSRichard Loweapplication knows that the objects being copied do not overlap. 240d6bf1708SRobert Mustacchi.Sh INTERFACE STABILITY 241d6bf1708SRobert Mustacchi.Sy Committed 242d6bf1708SRobert Mustacchi.Sh MT-LEVEL 243d6bf1708SRobert Mustacchi.Sy MT-Safe 244d6bf1708SRobert Mustacchi.Sh SEE ALSO 245d6bf1708SRobert Mustacchi.Xr string 3C , 246*bbf21555SRichard Lowe.Xr attributes 7 , 247*bbf21555SRichard Lowe.Xr standards 7 248d6bf1708SRobert Mustacchi.Sh NOTES 249d6bf1708SRobert MustacchiOverlap between objects being copied can arise even when their 250d6bf1708SRobert Mustacchi.Pq virtual 251c10c16deSRichard Loweaddress ranges appear to be disjoint; for example, as a result of 252c10c16deSRichard Lowememory-mapping overlapping portions of the same underlying file, or of 253c10c16deSRichard Loweattaching the same shared memory segment more than once. 254