EmbeddedUnit
stdImpl.c
Go to the documentation of this file.
1 
34 #include "stdImpl.h"
35 
36 char* stdimpl_strcpy(char *dst, const char *src)
37 {
38  char *start = dst;
39  char c;
40  do {
41  c = *src;
42  *dst = c;
43  src++;
44  dst++;
45  } while (c);
46  return start;
47 }
48 
49 char* stdimpl_strcat(char *dst, const char *src)
50 {
51  char *start = dst;
52  char c;
53  do {
54  c = *dst;
55  dst++;
56  } while (c);
57  dst--;
58  do {
59  c = *src;
60  *dst = c;
61  src++;
62  dst++;
63  } while (c);
64  return start;
65 }
66 
67 char* stdimpl_strncat(char *dst, const char *src,unsigned int count)
68 {
69  char *start = dst;
70  char c;
71  do {
72  c = *dst;
73  dst++;
74  } while (c);
75  dst--;
76  if (count) {
77  do {
78  c = *src;
79  *dst = c;
80  src++;
81  dst++;
82  count--;
83  } while (c && count);
84  *dst = '\0';
85  }
86  return start;
87 }
88 
89 int stdimpl_strlen(const char *str)
90 {
91  const char *estr = str;
92  char c;
93  do {
94  c = *estr;
95  estr++;
96  } while (c);
97  return ((int)(estr - str - 1));
98 }
99 
100 int stdimpl_strcmp(const char *s1, const char *s2)
101 {
102  char c1,c2;
103  do {
104  c1 = *s1++;
105  c2 = *s2++;
106  } while ((c1) && (c2) && (c1==c2));
107  return c1 - c2;
108 }
109 
110 int stdimpl_memcmp(const void *p1, const void *p2, int s)
111 {
112  char *s1 = (char*)p1;
113  char *s2 = (char*)p2;
114  char c1,c2;
115  do {
116  c1 = *s1++;
117  c2 = *s2++;
118  s--;
119  } while ((c1==c2) && s);
120  return c1 - c2;
121 }
122 
123 static char* _xtoa(unsigned long v,char *string, int r, int is_neg)
124 {
125  char *start = string;
126  char buf[33],*p;
127 
128  p = buf;
129 
130  do {
131  *p++ = "0123456789abcdef"[(v % r) & 0xf];
132  } while (v /= r);
133 
134  if (is_neg) {
135  *p++ = '-';
136  }
137 
138  do {
139  *string++ = *--p;
140  } while (buf != p);
141 
142  *string = '\0';
143 
144  return start;
145 }
146 
147 char* stdimpl_itoa(long v,char *string,int r)
148 {
149  if ((r == 10) && (v < 0)) {
150  return _xtoa((unsigned long)(-v), string, r, 1);
151  }
152  return _xtoa((unsigned long)(v), string, r, 0);
153 }
154 
155 char* stdimpl_utoa(unsigned long v,char *string,int r)
156 {
157  return _xtoa((unsigned long)(v), string, r, 0);
158 }
159