diff options
| author | Geert Uytterhoeven <geert@linux-m68k.org> | 2012-05-29 17:30:08 -0400 |
|---|---|---|
| committer | Geert Uytterhoeven <geert@linux-m68k.org> | 2012-06-06 09:31:28 -0400 |
| commit | d8ce7263e1bc3b6b2b906fec0c5037bc27d21d6a (patch) | |
| tree | 700796dc3c5c5068d82d159b020d7a7fa50144c8 /arch/m68k/lib | |
| parent | f8f5701bdaf9134b1f90e5044a82c66324d2073f (diff) | |
m68k: Use generic strncpy_from_user(), strlen_user(), and strnlen_user()
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Greg Ungerer <gerg@uclinux.org>
Diffstat (limited to 'arch/m68k/lib')
| -rw-r--r-- | arch/m68k/lib/uaccess.c | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/arch/m68k/lib/uaccess.c b/arch/m68k/lib/uaccess.c index 5664386338da..5e97f2ee7c11 100644 --- a/arch/m68k/lib/uaccess.c +++ b/arch/m68k/lib/uaccess.c | |||
| @@ -104,80 +104,6 @@ unsigned long __generic_copy_to_user(void __user *to, const void *from, | |||
| 104 | EXPORT_SYMBOL(__generic_copy_to_user); | 104 | EXPORT_SYMBOL(__generic_copy_to_user); |
| 105 | 105 | ||
| 106 | /* | 106 | /* |
| 107 | * Copy a null terminated string from userspace. | ||
| 108 | */ | ||
| 109 | long strncpy_from_user(char *dst, const char __user *src, long count) | ||
| 110 | { | ||
| 111 | long res; | ||
| 112 | char c; | ||
| 113 | |||
| 114 | if (count <= 0) | ||
| 115 | return count; | ||
| 116 | |||
| 117 | asm volatile ("\n" | ||
| 118 | "1: "MOVES".b (%2)+,%4\n" | ||
| 119 | " move.b %4,(%1)+\n" | ||
| 120 | " jeq 2f\n" | ||
| 121 | " subq.l #1,%3\n" | ||
| 122 | " jne 1b\n" | ||
| 123 | "2: sub.l %3,%0\n" | ||
| 124 | "3:\n" | ||
| 125 | " .section .fixup,\"ax\"\n" | ||
| 126 | " .even\n" | ||
| 127 | "10: move.l %5,%0\n" | ||
| 128 | " jra 3b\n" | ||
| 129 | " .previous\n" | ||
| 130 | "\n" | ||
| 131 | " .section __ex_table,\"a\"\n" | ||
| 132 | " .align 4\n" | ||
| 133 | " .long 1b,10b\n" | ||
| 134 | " .previous" | ||
| 135 | : "=d" (res), "+a" (dst), "+a" (src), "+r" (count), "=&d" (c) | ||
| 136 | : "i" (-EFAULT), "0" (count)); | ||
| 137 | |||
| 138 | return res; | ||
| 139 | } | ||
| 140 | EXPORT_SYMBOL(strncpy_from_user); | ||
| 141 | |||
| 142 | /* | ||
| 143 | * Return the size of a string (including the ending 0) | ||
| 144 | * | ||
| 145 | * Return 0 on exception, a value greater than N if too long | ||
| 146 | */ | ||
| 147 | long strnlen_user(const char __user *src, long n) | ||
| 148 | { | ||
| 149 | char c; | ||
| 150 | long res; | ||
| 151 | |||
| 152 | asm volatile ("\n" | ||
| 153 | "1: subq.l #1,%1\n" | ||
| 154 | " jmi 3f\n" | ||
| 155 | "2: "MOVES".b (%0)+,%2\n" | ||
| 156 | " tst.b %2\n" | ||
| 157 | " jne 1b\n" | ||
| 158 | " jra 4f\n" | ||
| 159 | "\n" | ||
| 160 | "3: addq.l #1,%0\n" | ||
| 161 | "4: sub.l %4,%0\n" | ||
| 162 | "5:\n" | ||
| 163 | " .section .fixup,\"ax\"\n" | ||
| 164 | " .even\n" | ||
| 165 | "20: sub.l %0,%0\n" | ||
| 166 | " jra 5b\n" | ||
| 167 | " .previous\n" | ||
| 168 | "\n" | ||
| 169 | " .section __ex_table,\"a\"\n" | ||
| 170 | " .align 4\n" | ||
| 171 | " .long 2b,20b\n" | ||
| 172 | " .previous\n" | ||
| 173 | : "=&a" (res), "+d" (n), "=&d" (c) | ||
| 174 | : "0" (src), "r" (src)); | ||
| 175 | |||
| 176 | return res; | ||
| 177 | } | ||
| 178 | EXPORT_SYMBOL(strnlen_user); | ||
| 179 | |||
| 180 | /* | ||
| 181 | * Zero Userspace | 107 | * Zero Userspace |
| 182 | */ | 108 | */ |
| 183 | 109 | ||
