strnlen_user.S 907 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. .text
  14. .align 5
  15. /* Prototype: unsigned long __strnlen_user(const char *str, long n)
  16. * Purpose : get length of a string in user memory
  17. * Params : str - address of string in user memory
  18. * Returns : length of string *including terminator*
  19. * or zero on exception, or n + 1 if too long
  20. */
  21. ENTRY(__strnlen_user)
  22. mov r2, r0
  23. 1:
  24. ldrusr r3, r0, 1
  25. teq r3, #0
  26. beq 2f
  27. subs r1, r1, #1
  28. bne 1b
  29. add r0, r0, #1
  30. 2: sub r0, r0, r2
  31. mov pc, lr
  32. ENDPROC(__strnlen_user)
  33. .pushsection .fixup,"ax"
  34. .align 0
  35. 9001: mov r0, #0
  36. mov pc, lr
  37. .popsection