xref: /plan9/sys/man/2/memory (revision 4d61b9464c3307bc8c94bd0012cee9068303d928)
MEMORY 2
NAME
memccpy, memchr, memcmp, memcpy, memmove, memset - memory operations
SYNOPSIS
#include <u.h>

#include <libc.h>

void* memccpy(void *s1, void *s2, int c, ulong n)

void* memchr(void *s, int c, ulong n)

int memcmp(void *s1, void *s2, ulong n)

void* memcpy(void *s1, void *s2, ulong n)

void* memmove(void *s1, void *s2, ulong n)

void* memset(void *s, int c, ulong n)

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.

Memccpy copies bytes from memory area s2 into s1 , stopping after the first occurrence of byte c has been copied, or after n bytes have been copied, whichever comes first. It returns a pointer to the byte after the copy of c in s1 , or zero if c was not found in the first n bytes of s2 .

Memchr returns a pointer to the first occurrence of byte c in the first n bytes of memory area s, or zero if c does not occur.

Memcmp compares its arguments, looking at the first n bytes only, and returns an integer less than, equal to, or greater than 0, according as s1 is lexicographically less than, equal to, or greater than s2 . The comparison is bytewise unsigned.

Memcpy copies n bytes from memory area s2 to s1 . It returns s1 .

Memmove works like memcpy , except that it is guaranteed to work if s1 and s2 overlap.

Memset sets the first n bytes in memory area s to the value of byte c . It returns s .

SOURCE
All these routines have portable C implementations in /sys/src/libc/port . Most also have machine-dependent assembly language implementations in /sys/src/libc/$objtype .
SEE ALSO
strcat (2)
BUGS
ANSI C does not require memcpy to handle overlapping source and destination; on Plan 9, it does, so memmove and memcpy behave identically.

If memcpy and memmove are handed a negative count, they abort.