| /* 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 |