Mercurial > hg > Members > menikon > CbC_xv6
comparison src/usr/ulib.c @ 0:83c23a36980d
Init
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 26 May 2017 23:11:05 +0900 |
parents | |
children | 2617849843ec |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:83c23a36980d |
---|---|
1 #include "types.h" | |
2 #include "stat.h" | |
3 #include "fcntl.h" | |
4 #include "user.h" | |
5 | |
6 char* | |
7 strcpy(char *s, char *t) | |
8 { | |
9 char *os; | |
10 | |
11 os = s; | |
12 while((*s++ = *t++) != 0) | |
13 ; | |
14 return os; | |
15 } | |
16 | |
17 int | |
18 strcmp(const char *p, const char *q) | |
19 { | |
20 while(*p && *p == *q) | |
21 p++, q++; | |
22 return (uchar)*p - (uchar)*q; | |
23 } | |
24 | |
25 uint | |
26 strlen(char *s) | |
27 { | |
28 int n; | |
29 | |
30 for(n = 0; s[n]; n++) | |
31 ; | |
32 return n; | |
33 } | |
34 | |
35 void* | |
36 memset(void *dst, int v, uint n) | |
37 { | |
38 uint8 *p; | |
39 uint8 c; | |
40 uint32 val; | |
41 uint32 *p4; | |
42 | |
43 p = dst; | |
44 c = v & 0xff; | |
45 val = (c << 24) | (c << 16) | (c << 8) | c; | |
46 | |
47 // set bytes before whole uint32 | |
48 for (; (n > 0) && ((uint)p % 4); n--, p++){ | |
49 *p = c; | |
50 } | |
51 | |
52 // set memory 4 bytes a time | |
53 p4 = (uint*)p; | |
54 | |
55 for (; n >= 4; n -= 4, p4++) { | |
56 *p4 = val; | |
57 } | |
58 | |
59 // set leftover one byte a time | |
60 p = (uint8*)p4; | |
61 | |
62 for (; n > 0; n--, p++) { | |
63 *p = c; | |
64 } | |
65 | |
66 return dst; | |
67 } | |
68 | |
69 char* | |
70 strchr(const char *s, char c) | |
71 { | |
72 for(; *s; s++) | |
73 if(*s == c) | |
74 return (char*)s; | |
75 return 0; | |
76 } | |
77 | |
78 char* | |
79 gets(char *buf, int max) | |
80 { | |
81 int i, cc; | |
82 char c; | |
83 | |
84 for(i=0; i+1 < max; ){ | |
85 cc = read(0, &c, 1); | |
86 if(cc < 1) | |
87 break; | |
88 buf[i++] = c; | |
89 if(c == '\n' || c == '\r') | |
90 break; | |
91 } | |
92 buf[i] = '\0'; | |
93 return buf; | |
94 } | |
95 | |
96 int | |
97 stat(char *n, struct stat *st) | |
98 { | |
99 int fd; | |
100 int r; | |
101 | |
102 fd = open(n, O_RDONLY); | |
103 if(fd < 0) | |
104 return -1; | |
105 r = fstat(fd, st); | |
106 close(fd); | |
107 return r; | |
108 } | |
109 | |
110 int | |
111 atoi(const char *s) | |
112 { | |
113 int n; | |
114 | |
115 n = 0; | |
116 while('0' <= *s && *s <= '9') | |
117 n = n*10 + *s++ - '0'; | |
118 return n; | |
119 } | |
120 | |
121 void* | |
122 memmove(void *vdst, void *vsrc, int n) | |
123 { | |
124 char *dst, *src; | |
125 | |
126 dst = vdst; | |
127 src = vsrc; | |
128 while(n-- > 0) | |
129 *dst++ = *src++; | |
130 return vdst; | |
131 } |