Import 2.3.18pre1
[davej-history.git] / arch / sparc / lib / strncpy_from_user.S
blobcb3349fb10c5dbaf945f6e7d67cb80bac9501e8f
1 /* strncpy_from_user.S: Sparc strncpy from userspace.
2  *
3  *  Copyright(C) 1996 David S. Miller
4  */
6 #include <asm/cprefix.h>
7 #include <asm/ptrace.h>
8 #include <asm/errno.h>
10         .text
11         .align  4
13         /* Must return:
14          *
15          * -EFAULT              for an exception
16          * count                if we hit the buffer limit
17          * bytes copied         if we hit a null byte
18          */
20         .globl  C_LABEL(__strncpy_from_user)
21 C_LABEL(__strncpy_from_user):
22         /* %o0=dest, %o1=src, %o2=count */
23         mov     %o2, %o3
25         subcc   %o2, 1, %o2
26         bneg    2f
27          nop
28 10:
29         ldub    [%o1], %o4
30         add     %o0, 1, %o0
31         cmp     %o4, 0
32         add     %o1, 1, %o1
33         bne     1b
34          stb    %o4, [%o0 - 1]
36         add     %o2, 1, %o0
37         retl
38          sub    %o3, %o0, %o0
40         .section .fixup,#alloc,#execinstr
41         .align  4
43         retl
44          mov    -EFAULT, %o0
46         .section __ex_table,#alloc
47         .align  4
48         .word   10b, 4b