aboutsummaryrefslogtreecommitdiffstats
path: root/man/man3/memcpy.3
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2024-04-26 15:06:49 +0200
committerAlejandro Colomar <alx@kernel.org>2024-05-02 01:24:19 +0200
commitdcde2f70372b49ec43efc5db864c9ff585d0a2dd (patch)
tree78b9b7425130e4a5858e4c01a524d802423879ed /man/man3/memcpy.3
parent12aca537ce78a41bbcdaf485209691e10f8002d7 (diff)
downloadman-pages-dcde2f70372b49ec43efc5db864c9ff585d0a2dd.tar.gz
man/, share/mk/: Move man*/ to man/
This is a scripted change: $ mkdir man/; $ mv man* man/; $ ln -st . man/man*; $ find share/mk/ -type f \ | xargs grep -l '^MANDIR *:=' \ | xargs sed -i '/^MANDIR *:=/s,$,/man,'; $ find share/mk/dist/ -type f \ | xargs grep -l man \ | xargs sed -i 's,man%,man/%,g'; Link: <https://lore.kernel.org/linux-man/YxcV4h+Xn7cd6+q2@pevik/T/> Cc: Petr Vorel <pvorel@suse.cz> Cc: Jakub Wilk <jwilk@jwilk.net> Cc: Stefan Puiu <stefan.puiu@gmail.com> Signed-off-by: Alejandro Colomar <alx@kernel.org>
Diffstat (limited to 'man/man3/memcpy.3')
-rw-r--r--man/man3/memcpy.3106
1 files changed, 106 insertions, 0 deletions
diff --git a/man/man3/memcpy.3 b/man/man3/memcpy.3
new file mode 100644
index 0000000000..c97f6701a7
--- /dev/null
+++ b/man/man3/memcpy.3
@@ -0,0 +1,106 @@
+'\" 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 (date) "Linux man-pages (unreleased)"
+.SH NAME
+memcpy \- copy memory area
+.SH LIBRARY
+Standard C library
+.RI ( libc ", " \-lc )
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.P
+.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
+.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 .
+.P
+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)