• <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

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久久国产99久久国产一| 国产精品对白刺激久久久| 久久久久久毛片免费播放| 亚洲人成电影网站久久| 99精品国产在热久久无毒不卡| 色综合久久久久久久久五月| 新狼窝色AV性久久久久久| 亚洲va久久久噜噜噜久久| 无码人妻精品一区二区三区久久久| 久久久久国产精品人妻| 亚洲女久久久噜噜噜熟女| 色综合久久久久综合体桃花网| 久久综合给合久久狠狠狠97色 | 久久se精品一区二区影院| 国内精品久久久久久不卡影院| 久久毛片免费看一区二区三区| 亚洲精品第一综合99久久| 亚洲精品乱码久久久久久中文字幕 | 丁香五月综合久久激情| 国内精品伊人久久久久网站| 日本久久中文字幕| 日韩精品久久久久久久电影蜜臀 | 久久综合国产乱子伦精品免费| 久久91精品国产91久久小草| 久久亚洲欧洲国产综合| 色婷婷综合久久久中文字幕 | 伊人色综合久久天天| 伊人久久大香线蕉av不变影院| 99久久免费国产特黄| 久久这里的只有是精品23| 久久AV高清无码| 亚洲国产精品综合久久一线| AV色综合久久天堂AV色综合在| 久久一区二区三区免费| 久久亚洲中文字幕精品有坂深雪 | 久久99精品久久久久久动态图| 久久久久人妻一区精品| 国产精品视频久久| 欧美久久久久久午夜精品| 久久久久久国产精品无码超碰| 久久精品视频91|