diff options
Diffstat (limited to 'mcon/U/d_mempcpy.U')
-rw-r--r-- | mcon/U/d_mempcpy.U | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/mcon/U/d_mempcpy.U b/mcon/U/d_mempcpy.U new file mode 100644 index 0000000..63ccf51 --- /dev/null +++ b/mcon/U/d_mempcpy.U @@ -0,0 +1,51 @@ +?RCS: +?RCS: Copyright (c) 2012 Raphael Manfredi +?RCS: +?RCS: You may redistribute only under the terms of the Artistic License, +?RCS: as specified in the README file that comes with the distribution. +?RCS: You may reuse parts of this distribution only within the terms of +?RCS: that same Artistic License; a copy of which may be found at the root +?RCS: of the source tree for dist 4.0. +?RCS: +?MAKE:d_mempcpy: Trylink cat +?MAKE: -pick add $@ %< +?S:d_mempcpy: +?S: This variable conditionally defines the HAS_MEMPCPY symbol, which +?S: indicates to the C program that the mempcpy() routine is available +?S: to copy blocks of memory and returns a pointer past the last written +?S: byte. +?S:. +?C:HAS_MEMPCPY: +?C: This symbol, if defined, indicates that the mempcpy routine is available +?C: to copy blocks of memory, returning a pointer past the last written byte. +?C:. +?H:#$d_mempcpy HAS_MEMPCPY /**/ +?H:. +?LINT:set d_mempcpy +: see if mempcpy exists +?X: +?X: Need some extra code convolutions to avoid gcc's optimizing the mempcpy() +?X: call with its built-in implementation. +?X: +$cat >try.c <<EOC +#include <string.h> + +void *copy(void *d, const void *s, unsigned n) +{ + char *q = d; + const char *r = s; + return mempcpy(q + 4, r + 2, n - 1); +} + +int main(void) +{ + static char src, dst; + void *p; + p = copy(&dst, &src, sizeof(dst)); + return p ? 0 : 1; +} +EOC +cyn=mempcpy +set d_mempcpy +eval $trylink + |