glib.c 626 B

12345678910111213141516171819202122232425262728293031
  1. #include "glib.h"
  2. /**
  3. * @brief 测量来自用户空间的字符串的长度,会检验地址空间是否属于用户空间
  4. * @param src
  5. * @param maxlen
  6. * @return long
  7. */
  8. long strnlen_user(const char *src, unsigned long maxlen)
  9. {
  10. unsigned long size = strlen(src);
  11. // 地址不合法
  12. if (!verify_area((uint64_t)src, size))
  13. return 0;
  14. return size <= maxlen ? size : maxlen;
  15. }
  16. long strnlen(const char *src, unsigned long maxlen)
  17. {
  18. if (src == NULL)
  19. return 0;
  20. register int __res = 0;
  21. while (src[__res] != '\0' && __res < maxlen)
  22. {
  23. ++__res;
  24. }
  25. return __res;
  26. }