4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-01-29 10:30:50 +08:00
Jeff Johnston e9c9497815 Thu Mar 9 17:20:41 2000 Jeff Johnston <jjohnstn@cygnus.com>
* libc/include/string.h: Changed last argument back to ssize_t
        to make it compatible with XPG4 definition which is
        defined in <unistd.h>.  There is a conflict in the SVID 3
        and XPG4 definitions and newlib will settle with XPG4.
        * libc/string/swab.c: Ditto.
2000-03-09 22:25:01 +00:00

45 lines
900 B
C

/*
FUNCTION
<<swab>>---swap adjacent bytes
ANSI_SYNOPSIS
#include <string.h>
void swab(const void *<[in]>, void *<[out]>, ssize_t <[n]>);
TRAD_SYNOPSIS
void swab(<[in]>, <[out]>, <[n]>
void *<[in]>;
void *<[out]>;
ssize_t <[n]>;
DESCRIPTION
This function copies <[n]> bytes from the memory region
pointed to by <[in]> to the memory region pointed to by
<[out]>, exchanging adjacent even and odd bytes.
PORTABILITY
<<swab>> requires no supporting OS subroutines.
*/
#include <string.h>
void
_DEFUN (swab, (b1, b2, length),
_CONST void *b1 _AND
void *b2 _AND
ssize_t length)
{
const char *from = b1;
char *to = b2;
ssize_t ptr;
for (ptr = 1; ptr < length; ptr += 2)
{
char p = from[ptr];
char q = from[ptr-1];
to[ptr-1] = p;
to[ptr ] = q;
}
if (ptr == length) /* I.e., if length is odd, */
to[ptr-1] = 0; /* then pad with a NUL. */
}