• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 297,  comments - 15,  trackbacks - 0
            from waterloo university

            /*
            00002  * This file is shared between libc and the kernel, 
            so don't put anything
            00003 * in here that won't work in both contexts. 00004 */ 00005 00006 #ifdef _KERNEL 00007 #include <types.h> 00008 #include <lib.h> 00009 #else 00010 #include <string.h> 00011 #endif 00012 00013 /* 00014 * C standard function - copy a block of memory. 00015 */ 00016 00017 void * 00018 memcpy(void *dst, const void *src, size_t len) 00019 { 00020 size_t i; 00021 00022 /* 00023 * memcpy does not support overlapping buffers,
            00024 * so always do it forwards.
            00025 * (Don't change this without adjusting memmove.) 00026 * For speedy copying, optimize the common case
            00027 * where both pointers and the length are word-aligned, 00028 * and copy word-at-a-time insteadof byte-at-a-time.
            00029 *Otherwise, copy by bytes. 00030 * The alignment logic below should be portable. 00031 * We rely onthe compiler to be reasonably intelligent 00032 * about optimizing the divides and modulos out.
            00033 * Fortunately, it is.*/ 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  * C standard function - copy a block of memory, 
            00015 * handling overlapping * regions correctly. 00016 */ 00017 00018 void * 00019 memmove(void *dst, const void *src, size_t len) 00020 { 00021 size_t i; 00022 00023 /* 00024 * If the buffers don't overlap, it doesn't matter 00025 * what direction we copy in. If they do, it does,
            00026 * so just assume they always do.We don't concern
            00027 * ourselves with the possibility that the region
            00028 * to copy might roll over across the top of memory,
            00029 * because it's not going to happen. 00030 * If the destination is above the source, we have 00031 * to copy back to front to avoid overwriting the
            00032 * data we want to copy. 00033 * 00034 * dest: dddddddd 00035 * src: ssssssss ^ 00036 * | ^ |___| 00037 * |___| 00038 * 00039 * If the destination is below the source, we have to 00040 * copy front to back. 00041 * 00042 * dest: dddddddd 00043 * src: ^ ssssssss 00044 * |___| ^ | 00045 * |___| 00046 */ 00047 00048 if ((uintptr_t)dst < (uintptr_t)src) { 00049 /* 00050 * As author/maintainer of libc, take advantage of the 00051 * fact that we know memcpy copies forwards. 00052 */ 00053    return memcpy(dst, src, len); 00054 } 00055 00056 /* 00057 * Copy by words in the common case. Look in 00058 * memcpy.c for more information. 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 * The reason we copy index i-1 and test i>0 is that 00070 * i is unsigned - so testing i>=0 doesn't work. 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 閱讀(223) 評論(0)  編輯 收藏 引用 所屬分類: C++_BASIS
            <2009年6月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個博客還是不錯,雖然做的東西和我不大相關(guān),覺得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            97视频久久久| 婷婷久久久亚洲欧洲日产国码AV | 久久免费视频6| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久夜色精品国产| 久久精品中文闷骚内射| 国内精品久久久久国产盗摄| 亚洲精品无码久久毛片| 精品久久久久久成人AV| 亚洲精品NV久久久久久久久久| 久久国产精品无码HDAV| 精品久久久久久无码中文野结衣 | 久久国产综合精品五月天| 思思久久好好热精品国产| 青青草原综合久久大伊人精品| 性做久久久久久免费观看| 久久久国产精品网站| 亚洲国产精品无码久久98| 久久久久18| 久久精品成人免费国产片小草| 久久w5ww成w人免费| 亚洲国产精品无码久久98| 日产精品久久久久久久| 久久久WWW成人免费毛片| 久久精品国产69国产精品亚洲| yy6080久久| 久久人人爽人人爽人人av东京热| 国产精品女同一区二区久久| 东京热TOKYO综合久久精品| 亚洲精品白浆高清久久久久久| 思思久久99热免费精品6| 久久国产香蕉一区精品| 韩国三级中文字幕hd久久精品| 精品久久777| 久久精品嫩草影院| 久久综合久久综合九色| 久久精品国产亚洲沈樵| 久久播电影网| 中文字幕久久亚洲一区| 久久精品无码一区二区WWW| 亚洲色欲久久久综合网|