1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
.TH MEMORY 3
.SH NAME
memccpy, memchr, memcmp, memcpy, memmove, memset \- memory operations
.SH SYNOPSIS
.B #include <u.h>
.br
.B #include <libc.h>
.PP
.ta \w'\fLvoid* 'u
.B
void* memccpy(void *s1, void *s2, int c, long n)
.PP
.B
void* memchr(void *s, int c, long n)
.PP
.B
int memcmp(void *s1, void *s2, long n)
.PP
.B
void* memcpy(void *s1, void *s2, long n)
.PP
.B
void* memmove(void *s1, void *s2, long n)
.PP
.B
void* memset(void *s, int c, long n)
.SH DESCRIPTION
These functions operate efficiently on memory areas
(arrays of bytes bounded by a count, not terminated by a zero byte).
They do not check for the overflow of any receiving memory area.
.PP
.I Memccpy
copies bytes from memory area
.I s2
into
.IR s1 ,
stopping after the first occurrence of byte
.I c
has been copied, or after
.I n
bytes have been copied, whichever comes first.
It returns a pointer to the byte after
the copy of
.I c
in
.IR s1 ,
or zero if
.I c
was not found in the first
.I n
bytes of
.IR s2 .
.PP
.I Memchr
returns a pointer to the first
occurrence of byte
.I c
in the first
.I n
bytes of memory area
.IR s,
or zero if
.I c
does not occur.
.PP
.I Memcmp
compares its arguments, looking at the first
.I n
bytes only, and returns an integer
less than, equal to, or greater than 0,
according as
.I s1
is lexicographically less than, equal to, or
greater than
.IR s2 .
The comparison is bytewise unsigned.
.PP
.I Memcpy
copies
.I n
bytes from memory area
.I s2
to
.IR s1 .
It returns
.IR s1 .
.PP
.I Memmove
works like
.IR memcpy ,
except that it is guaranteed to work if
.I s1
and
.IR s2
overlap.
.PP
.I Memset
sets the first
.I n
bytes in memory area
.I s
to the value of byte
.IR c .
It returns
.IR s .
.SH SOURCE
All these routines have portable C implementations in
.BR /usr/local/plan9/src/lib9 .
.\" Most also have machine-dependent assembly language implementations in
.\" .BR /usr/local/plan9/lib9/$objtype .
.SH SEE ALSO
.IR strcat (3)
.SH BUGS
ANSI C does not require
.I memcpy
to handle overlapping source and destination; on Plan 9, it does, so
.I memmove
and
.I memcpy
behave identically.
.PP
If
.I memcpy
and
.I memmove
are handed a negative count, they abort.
|