4 int strlen(const char *str
)
14 return (c
== ' ' || c
== '\t');
19 return (c
== ' ' || c
== '\t' || c
== '\f' || c
== '\n' || c
== '\r'
25 return (c
>= '0' && c
<= '9');
30 if (c
>= 'A' && c
<= 'Z')
36 int strncasecmp(const char *s1
, const char *s2
, int max
)
39 for (; max
&& !(diff
= tolower(*s2
) - tolower(*s1
)) && *s1
;
44 int strcasecmp(const char *s1
, const char *s2
)
47 for (; !(diff
= tolower(*s2
) - tolower(*s1
)) && *s1
; s1
++, s2
++) ;
51 int strncmp(const char *s1
, const char *s2
, int max
)
54 for (; max
&& !(diff
= *s2
- *s1
) && *s1
; max
--, s1
++, s2
++) ;
58 int strcmp(const char *s1
, const char *s2
)
61 for (; !(diff
= *s2
- *s1
) && *s1
; s1
++, s2
++) ;
65 void bzero(void *dest
, int length
)
73 char *strcpy(char *dest
, const char *src
)
75 return (char *)memmove(dest
, src
, strlen(src
) + 1);
79 char *strncpy(char *dest
, const char *src
, int n
)
81 return (char *)memmove(dest
, src
, n
);
84 int StackSwap(struct StackSwapStruct
*sss
)
86 register uint32_t real_sp
asm("r1");
91 asm volatile ("wrteei 0");
93 /* Get the real stack pointer */
94 asm volatile ("mr %0,%1":"=r" (sp
):"r"(real_sp
));
96 /* Go one stack frame upper - now src points to the stackframe of caller */
97 src
= (uint32_t *) * sp
;
99 /* Go one more stack frame up. Now you may copy from src to dst (src - sp) IPTR's */
100 src
= (uint32_t *) * src
;
102 /* If no StackSwapStruct is given, return the "reserved" area behind the stk_Pointer */
104 return (src
- sp
) * sizeof(uint32_t);
106 dst
= sss
->stk_Pointer
;
108 /* Rewind the dst pointer too. */
111 /* Copy the two stack frames */
116 sss
->stk_Pointer
= sp
;
118 asm volatile ("mr %0,%1"::"r" (real_sp
), "r"(dst
));
120 asm volatile ("wrteei 1");
125 void *calloc(int size
, int n
)
127 return malloc(size
* n
);
130 void *memcpy(void *dest
, const void *src
, int n
)
132 return memmove(dest
, src
, n
);
135 void *memset(void *dest
, int c
, int n
)
137 char *ptr
= (char *)dest
;
144 char *strchr(char *s
, int c
)
147 for (sptr
= s
; *sptr
!= 0 && *sptr
!= c
; sptr
++) ;
153 char *strdup(const char *s
)
156 dup
= malloc(strlen(s
) + 1);
161 int strtol(const char *s
)
165 for (i
= strlen(s
) - 1, m
= 1; i
>= 0; i
--, m
*= 10) {
166 l
+= (s
[i
] - 48) * m
;
171 list_t
*list_new(void)
175 self
= malloc(sizeof(list_t
));
177 self
->l_head
= (node_t
*) & self
->l_tail
;
179 self
->l_tailpred
= (node_t
*) & self
->l_head
;
184 void list_append(list_t
* self
, node_t
* node
)
186 node
->n_succ
= (node_t
*) & self
->l_tail
;
187 node
->n_pred
= self
->l_tailpred
;
188 node
->n_pred
->n_succ
= node
;
189 self
->l_tailpred
= node
;