summaryrefslogtreecommitdiffstats
path: root/man3/memcpy.3
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:40:15 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:40:15 +0000
commit399644e47874bff147afb19c89228901ac39340e (patch)
tree1c4c0b733f4c16b5783b41bebb19194a9ef62ad1 /man3/memcpy.3
parentInitial commit. (diff)
downloadmanpages-upstream/6.05.01.tar.xz
manpages-upstream/6.05.01.zip
Adding upstream version 6.05.01.upstream/6.05.01
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'man3/memcpy.3')
-rw-r--r--man3/memcpy.3107
1 files changed, 107 insertions, 0 deletions
diff --git a/man3/memcpy.3 b/man3/memcpy.3
new file mode 100644
index 0000000..ec8e3b4
--- /dev/null
+++ b/man3/memcpy.3
@@ -0,0 +1,107 @@
+'\" t
+.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
+.\" and Copyright 2015 Michael Kerrisk <mtk.manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.\" References consulted:
+.\" Linux libc source code
+.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
+.\" 386BSD man pages
+.\" Modified Sun Jul 25 10:41:09 1993 by Rik Faith (faith@cs.unc.edu)
+.TH memcpy 3 2023-07-20 "Linux man-pages 6.05.01"
+.SH NAME
+memcpy \- copy memory area
+.SH LIBRARY
+Standard C library
+.RI ( libc ", " \-lc )
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.PP
+.BI "void *memcpy(void " dest "[restrict ." n "], const void " src "[restrict ." n ],
+.BI " size_t " n );
+.fi
+.SH DESCRIPTION
+The
+.BR memcpy ()
+function copies \fIn\fP bytes from memory area
+\fIsrc\fP to memory area \fIdest\fP.
+The memory areas must not overlap.
+Use
+.BR memmove (3)
+if the memory areas do overlap.
+.SH RETURN VALUE
+The
+.BR memcpy ()
+function returns a pointer to \fIdest\fP.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lbx lb lb
+l l l.
+Interface Attribute Value
+T{
+.na
+.nh
+.BR memcpy ()
+T} Thread safety MT-Safe
+.TE
+.sp 1
+.SH STANDARDS
+C11, POSIX.1-2008.
+.SH HISTORY
+POSIX.1-2001, C89, SVr4, 4.3BSD.
+.SH CAVEATS
+Failure to observe the requirement that the memory areas
+do not overlap has been the source of significant bugs.
+(POSIX and the C standards are explicit that employing
+.BR memcpy ()
+with overlapping areas produces undefined behavior.)
+Most notably, in glibc 2.13
+.\" glibc commit 6fb8cbcb58a29fff73eb2101b34caa19a7f88eba
+a performance optimization of
+.BR memcpy ()
+on some platforms (including x86-64) included changing the order
+.\" From forward copying to backward copying
+in which bytes were copied from
+.I src
+to
+.IR dest .
+.PP
+This change revealed breakages in a number of applications that performed
+copying with overlapping areas.
+.\" Adobe Flash player was the highest profile example:
+.\" https://bugzilla.redhat.com/show_bug.cgi?id=638477
+.\" Reported: 2010-09-29 02:35 EDT by JCHuynh
+.\" Bug 638477 - Strange sound on mp3 flash website
+.\"
+.\" https://sourceware.org/bugzilla/show_bug.cgi?id=12518
+.\" Bug 12518 - memcpy acts randomly (and differently) with overlapping areas
+.\" Reported: 2011-02-25 02:26 UTC by Linus Torvalds
+.\"
+Under the previous implementation,
+the order in which the bytes were copied had fortuitously hidden the bug,
+which was revealed when the copying order was reversed.
+In glibc 2.14,
+.\" glibc commit 0354e355014b7bfda32622e0255399d859862fcd
+a versioned symbol was added so that old binaries
+(i.e., those linked against glibc versions earlier than 2.14)
+employed a
+.BR memcpy ()
+implementation that safely handles the overlapping buffers case
+(by providing an "older"
+.BR memcpy ()
+implementation that was aliased to
+.BR memmove (3)).
+.SH SEE ALSO
+.BR bcopy (3),
+.BR bstring (3),
+.BR memccpy (3),
+.BR memmove (3),
+.BR mempcpy (3),
+.BR strcpy (3),
+.BR strncpy (3),
+.BR wmemcpy (3)