]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * linux/arch/arm/lib/strnlen_user.S | |
3 | * | |
4 | * Copyright (C) 1995-2000 Russell King | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License version 2 as | |
8 | * published by the Free Software Foundation. | |
9 | */ | |
10 | #include <linux/linkage.h> | |
11 | #include <asm/assembler.h> | |
12 | #include <asm/errno.h> | |
13 | ||
14 | .text | |
15 | .align 5 | |
16 | ||
02fcb974 | 17 | /* Prototype: unsigned long __strnlen_user(const char *str, long n) |
1da177e4 LT |
18 | * Purpose : get length of a string in user memory |
19 | * Params : str - address of string in user memory | |
20 | * Returns : length of string *including terminator* | |
21 | * or zero on exception, or n + 1 if too long | |
22 | */ | |
02fcb974 | 23 | ENTRY(__strnlen_user) |
1da177e4 LT |
24 | mov r2, r0 |
25 | 1: | |
8b592783 | 26 | ldrusr r3, r0, 1 |
1da177e4 LT |
27 | teq r3, #0 |
28 | beq 2f | |
29 | subs r1, r1, #1 | |
30 | bne 1b | |
31 | add r0, r0, #1 | |
32 | 2: sub r0, r0, r2 | |
405040a7 | 33 | mov pc, lr |
93ed3970 | 34 | ENDPROC(__strnlen_user) |
1da177e4 LT |
35 | |
36 | .section .fixup,"ax" | |
37 | .align 0 | |
38 | 9001: mov r0, #0 | |
405040a7 | 39 | mov pc, lr |
1da177e4 | 40 | .previous |