?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 < 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