00001 #include "types.h"
00002 #include "x86.h"
00003
00004 void*
00005 memset(void *dst, int c, uint n)
00006 {
00007 stosb(dst, c, n);
00008 return dst;
00009 }
00010
00011 int
00012 memcmp(const void *v1, const void *v2, uint n)
00013 {
00014 const uchar *s1, *s2;
00015
00016 s1 = v1;
00017 s2 = v2;
00018 while(n-- > 0){
00019 if(*s1 != *s2)
00020 return *s1 - *s2;
00021 s1++, s2++;
00022 }
00023
00024 return 0;
00025 }
00026
00027 void*
00028 memmove(void *dst, const void *src, uint n)
00029 {
00030 const char *s;
00031 char *d;
00032
00033 s = src;
00034 d = dst;
00035 if(s < d && s + n > d){
00036 s += n;
00037 d += n;
00038 while(n-- > 0)
00039 *--d = *--s;
00040 } else
00041 while(n-- > 0)
00042 *d++ = *s++;
00043
00044 return dst;
00045 }
00046
00047 void *
00048 memcpy(void *dst, const void *src, uint n)
00049 {
00050 return memmove(dst, src, n);
00051 }
00052
00053 int
00054 strncmp(const char *p, const char *q, uint n)
00055 {
00056 while(n > 0 && *p && *p == *q)
00057 n--, p++, q++;
00058 if(n == 0)
00059 return 0;
00060 return (uchar)*p - (uchar)*q;
00061 }
00062
00063 char*
00064 strncpy(char *s, const char *t, int n)
00065 {
00066 char *os;
00067
00068 os = s;
00069 while(n-- > 0 && (*s++ = *t++) != 0)
00070 ;
00071 while(n-- > 0)
00072 *s++ = 0;
00073 return os;
00074 }
00075
00076
00077 char*
00078 safestrcpy(char *s, const char *t, int n)
00079 {
00080 char *os;
00081
00082 os = s;
00083 if(n <= 0)
00084 return os;
00085 while(--n > 0 && (*s++ = *t++) != 0)
00086 ;
00087 *s = 0;
00088 return os;
00089 }
00090
00091 int
00092 strlen(const char *s)
00093 {
00094 int n;
00095
00096 for(n = 0; s[n]; n++)
00097 ;
00098 return n;
00099 }
00100