| 1 | /*- |
| 2 | * Copyright (c) 1990 The Regents of the University of California. |
| 3 | * All rights reserved. |
| 4 | * |
| 5 | * This code is derived from software contributed to Berkeley by |
| 6 | * Chris Torek. |
| 7 | * |
| 8 | * %sccs.include.redist.c% |
| 9 | */ |
| 10 | |
| 11 | #if defined(LIBC_SCCS) && !defined(lint) |
| 12 | static char sccsid[] = "@(#)strxfrm.c 5.2 (Berkeley) %G%"; |
| 13 | #endif /* LIBC_SCCS and not lint */ |
| 14 | |
| 15 | #include <sys/cdefs.h> |
| 16 | #include <string.h> |
| 17 | |
| 18 | /* |
| 19 | * Transform src, storing the result in dst, such that |
| 20 | * strcmp() on transformed strings returns what strcoll() |
| 21 | * on the original untransformed strings would return. |
| 22 | */ |
| 23 | size_t |
| 24 | strxfrm(dst, src, n) |
| 25 | register char *dst; |
| 26 | register const char *src; |
| 27 | register size_t n; |
| 28 | { |
| 29 | register size_t r = 0; |
| 30 | register int c; |
| 31 | |
| 32 | /* |
| 33 | * Since locales are unimplemented, this is just a copy. |
| 34 | */ |
| 35 | if (n != 0) { |
| 36 | while ((c = *src++) != 0) { |
| 37 | r++; |
| 38 | if (--n == 0) { |
| 39 | while (*src++ != 0) |
| 40 | r++; |
| 41 | break; |
| 42 | } |
| 43 | *dst++ = c; |
| 44 | } |
| 45 | *dst = 0; |
| 46 | } |
| 47 | return (r); |
| 48 | } |