from waterloo university
00002
00003
00004
00005
00006 #ifdef _KERNEL
00007 #include <types.h>
00008 #include <lib.h>
00009 #else
00010 #include <string.h>
00011 #endif
00012
00013
00014
00015
00016
00017 void *
00018 memcpy(void *dst, const void *src, size_t len)
00019 {
00020 size_t i;
00021
00022
0002300024000250002600027
0002800029
00030
00031
0003200033
00034
00035 if ((uintptr_t)dst % sizeof(long) == 0 &&
00036 (uintptr_t)src % sizeof(long) == 0 &&
00037 len % sizeof(long) == 0) {
00038
00039 long *d = dst;
00040 const long *s = src;
00041
00042 for (i=0; i<len/sizeof(long); i++) {
00043 d[i] = s[i];
00044 }
00045 }
00046 else {
00047 char *d = dst;
00048 const char *s = src;
00049
00050 for (i=0; i<len; i++) {
00051 d[i] = s[i];
00052 }
00053 }
00054
00055 return dst;
00056 }
00014 00015
00016
00017
00018 void *
00019 memmove(void *dst, const void *src, size_t len)
00020 {
00021 size_t i;
00022
00023
00024
000250002600027000280002900030
0003100032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 if ((uintptr_t)dst < (uintptr_t)src) {
00049
00050
00051
00052
00053 return memcpy(dst, src, len);
00054 }
00055
00056
00057
00058
00059
00060
00061 if ((uintptr_t)dst % sizeof(long) == 0 &&
00062 (uintptr_t)src % sizeof(long) == 0 &&
00063 len % sizeof(long) == 0) {
00064
00065 long *d = dst;
00066 const long *s = src;
00067
00068
00069
00070
00071
00072
00073 for (i=len/sizeof(long); i>0; i--) {
00074 d[i-1] = s[i-1];
00075 }
00076 }
00077 else {
00078 char *d = dst;
00079 const char *s = src;
00080
00081 for (i=len; i>0; i--) {
00082 d[i-1] = s[i-1];
00083 }
00084 }
00085
00086 return dst;
00087}
posted on 2009-03-25 15:05
chatler 阅读(189)
评论(0) 编辑 收藏 引用 所属分类:
C++_BASIS