ulib.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #include "types.h"
  2. #include "stat.h"
  3. #include "fcntl.h"
  4. #include "user.h"
  5. #include "arm.h"
  6. char*
  7. strcpy(char *s, char *t)
  8. {
  9. char *os;
  10. os = s;
  11. while((*s++ = *t++) != 0)
  12. ;
  13. return os;
  14. }
  15. int
  16. strcmp(const char *p, const char *q)
  17. {
  18. while(*p && *p == *q)
  19. p++, q++;
  20. return (uchar)*p - (uchar)*q;
  21. }
  22. uint
  23. strlen(char *s)
  24. {
  25. int n;
  26. for(n = 0; s[n]; n++)
  27. ;
  28. return n;
  29. }
  30. void*
  31. memset(void *dst, int c, uint n)
  32. {
  33. char *p=dst;
  34. u32 rc=n;
  35. while (rc-- > 0) *p++ = c;
  36. return (void *)p;
  37. }
  38. char*
  39. strchr(const char *s, char c)
  40. {
  41. for(; *s; s++)
  42. if(*s == c)
  43. return (char*)s;
  44. return 0;
  45. }
  46. char*
  47. gets(char *buf, int max)
  48. {
  49. int i, cc;
  50. char c;
  51. for(i=0; i+1 < max; ){
  52. cc = read(0, &c, 1);
  53. if(cc < 1)
  54. break;
  55. buf[i++] = c;
  56. if(c == '\n' || c == '\r')
  57. break;
  58. }
  59. buf[i] = '\0';
  60. return buf;
  61. }
  62. int
  63. stat(char *n, struct stat *st)
  64. {
  65. int fd;
  66. int r;
  67. fd = open(n, O_RDONLY);
  68. if(fd < 0)
  69. return -1;
  70. r = fstat(fd, st);
  71. close(fd);
  72. return r;
  73. }
  74. int
  75. atoi(const char *s)
  76. {
  77. int n;
  78. n = 0;
  79. while('0' <= *s && *s <= '9')
  80. n = n*10 + *s++ - '0';
  81. return n;
  82. }
  83. void*
  84. memmove(void *vdst, void *vsrc, int n)
  85. {
  86. char *dst, *src;
  87. dst = vdst;
  88. src = vsrc;
  89. while(n-- > 0)
  90. *dst++ = *src++;
  91. return vdst;
  92. }