| 1 |
|
| 2 | #ifndef _M68K_STRING_H_
|
| 3 | #define _M68K_STRING_H_
|
| 4 |
|
| 5 | #include <linux/types.h>
|
| 6 | #include <linux/compiler.h>
|
| 7 |
|
| 8 | #define __HAVE_ARCH_STRNLEN
|
| 9 | static inline size_t strnlen(const char *s, size_t count)
|
| 10 | {
|
| 11 | const char *sc = s;
|
| 12 |
|
| 13 | asm volatile ("\n"
|
| 14 | "1: subq.l #1,%1\n"
|
| 15 | " jcs 2f\n"
|
| 16 | " tst.b (%0)+\n"
|
| 17 | " jne 1b\n"
|
| 18 | " subq.l #1,%0\n"
|
| 19 | "2:"
|
| 20 | : "+a" (sc), "+d" (count));
|
| 21 | return sc - s;
|
| 22 | }
|
| 23 |
|
| 24 | #define __HAVE_ARCH_MEMMOVE
|
| 25 | extern void *memmove(void *, const void *, __kernel_size_t);
|
| 26 |
|
| 27 | extern int memcmp(const void *, const void *, __kernel_size_t);
|
| 28 | #define memcmp(d, s, n) __builtin_memcmp(d, s, n)
|
| 29 |
|
| 30 | #define __HAVE_ARCH_MEMSET
|
| 31 | extern void *memset(void *, int, __kernel_size_t);
|
| 32 | #define memset(d, c, n) __builtin_memset(d, c, n)
|
| 33 |
|
| 34 | #define __HAVE_ARCH_MEMCPY
|
| 35 | extern void *memcpy(void *, const void *, __kernel_size_t);
|
| 36 | #define memcpy(d, s, n) __builtin_memcpy(d, s, n)
|
| 37 |
|
| 38 | #endif
|