string.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "string.h"
  2. #include "errno.h"
  3. #include "stdio.h"
  4. extern "C" {
  5. size_t strlen(const char* str)
  6. {
  7. size_t len = 0;
  8. while (*(str++))
  9. ++len;
  10. return len;
  11. }
  12. const char* strerror(int errnum)
  13. {
  14. switch (errnum) {
  15. case 0: return "No error";
  16. case EPERM: return "Operation not permitted";
  17. case ENOENT: return "No such file or directory";
  18. case ESRCH: return "No such process";
  19. case EINTR: return "Interrupted syscall";
  20. case EIO: return "I/O error";
  21. case ENXIO: return "No such device/address";
  22. case E2BIG: return "Argument list too long";
  23. case ENOEXEC: return "Exec format error";
  24. case EBADF: return "Bad fd number";
  25. case ECHILD: return "No child processes";
  26. case EAGAIN: return "Try again";
  27. case ENOMEM: return "Out of memory";
  28. case EACCES: return "Access denied";
  29. case EFAULT: return "Bad address";
  30. case ENOTBLK: return "Not a block device";
  31. case EBUSY: return "Resource busy";
  32. case EEXIST: return "File already exists";
  33. case EXDEV: return "Cross-device link";
  34. case ENODEV: return "No such device";
  35. case ENOTDIR: return "Not a directory";
  36. case EISDIR: return "Is a directory";
  37. case EINVAL: return "Invalid argument";
  38. case ENFILE: return "File table overflow";
  39. case EMFILE: return "Too many open files";
  40. case ENOTTY: return "Not a TTY";
  41. case ETXTBSY: return "Text file busy";
  42. case EFBIG: return "File too big";
  43. case ENOSPC: return "No space left";
  44. case ESPIPE: return "Illegal seek";
  45. case EROFS: return "File system is read-only";
  46. case EMLINK: return "Too many links";
  47. case EPIPE: return "Broken pipe";
  48. case EDOM: return "Math argument out of domain";
  49. case ERANGE: return "Math result not representable";
  50. case ENAMETOOLONG: return "Name too long";
  51. case EOVERFLOW: return "Value too large for data type";
  52. }
  53. printf("strerror() missing string for errnum=%d\n", errnum);
  54. return "Unknown error";
  55. }
  56. }