Linux 2.6.25-rc4
[linux-2.6/next.git] / arch / sparc / lib / strncpy_from_user.S
blobd77198976a66635f3ea54bce9d5d159014f0a296
1 /* strncpy_from_user.S: Sparc strncpy from userspace.
2  *
3  *  Copyright(C) 1996 David S. Miller
4  */
6 #include <asm/ptrace.h>
7 #include <asm/errno.h>
9         .text
10         .align  4
12         /* Must return:
13          *
14          * -EFAULT              for an exception
15          * count                if we hit the buffer limit
16          * bytes copied         if we hit a null byte
17          */
19         .globl  __strncpy_from_user
20 __strncpy_from_user:
21         /* %o0=dest, %o1=src, %o2=count */
22         mov     %o2, %o3
24         subcc   %o2, 1, %o2
25         bneg    2f
26          nop
27 10:
28         ldub    [%o1], %o4
29         add     %o0, 1, %o0
30         cmp     %o4, 0
31         add     %o1, 1, %o1
32         bne     1b
33          stb    %o4, [%o0 - 1]
35         add     %o2, 1, %o0
36         retl
37          sub    %o3, %o0, %o0
39         .section .fixup,#alloc,#execinstr
40         .align  4
42         retl
43          mov    -EFAULT, %o0
45         .section __ex_table,#alloc
46         .align  4
47         .word   10b, 4b