| /* strncpy_from_user.S: Sparc strncpy from userspace. | |
| * | |
| * Copyright(C) 1996 David S. Miller | |
| */ | |
| #include <asm/ptrace.h> | |
| #include <asm/errno.h> | |
| .text | |
| .align 4 | |
| /* Must return: | |
| * | |
| * -EFAULT for an exception | |
| * count if we hit the buffer limit | |
| * bytes copied if we hit a null byte | |
| */ | |
| .globl __strncpy_from_user | |
| __strncpy_from_user: | |
| /* %o0=dest, %o1=src, %o2=count */ | |
| mov %o2, %o3 | |
| 1: | |
| subcc %o2, 1, %o2 | |
| bneg 2f | |
| nop | |
| 10: | |
| ldub [%o1], %o4 | |
| add %o0, 1, %o0 | |
| cmp %o4, 0 | |
| add %o1, 1, %o1 | |
| bne 1b | |
| stb %o4, [%o0 - 1] | |
| 2: | |
| add %o2, 1, %o0 | |
| retl | |
| sub %o3, %o0, %o0 | |
| .section .fixup,#alloc,#execinstr | |
| .align 4 | |
| 4: | |
| retl | |
| mov -EFAULT, %o0 | |
| .section __ex_table,#alloc | |
| .align 4 | |
| .word 10b, 4b |