• <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
            <2010年1月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(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

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久国产V一级毛多内射| 亚洲国产成人久久一区WWW| 久久九九兔免费精品6| 亚洲国产精品成人AV无码久久综合影院 | 女人香蕉久久**毛片精品| 久久精品嫩草影院| 亚洲国产一成久久精品国产成人综合 | 久久久噜噜噜久久熟女AA片 | 色综合久久中文色婷婷| 亚洲精品无码久久毛片| 久久久老熟女一区二区三区| 狠狠色丁香婷婷综合久久来来去 | 91久久精品国产成人久久| 香蕉99久久国产综合精品宅男自 | 人妻无码αv中文字幕久久 | 久久人人爽人人人人片av| 日本精品久久久久中文字幕| 久久久久波多野结衣高潮| 久久综合久久久| 久久精品国产亚洲AV香蕉| 精品久久久久久无码中文野结衣 | 久久久久99精品成人片| 久久久无码一区二区三区| 中文字幕无码av激情不卡久久| 97久久天天综合色天天综合色hd | 精品久久久久久无码免费| 久久精品国产精品亚洲毛片| 亚洲精品久久久www| 久久人人超碰精品CAOPOREN | 久久人妻少妇嫩草AV蜜桃| 青草久久久国产线免观| 国产福利电影一区二区三区久久久久成人精品综合 | 久久久亚洲欧洲日产国码是AV| 久久亚洲精品无码观看不卡| 日本精品久久久久中文字幕| 久久99精品国产99久久| 97久久精品无码一区二区天美| 久久亚洲AV成人无码电影| 色婷婷久久综合中文久久蜜桃av| 久久精品桃花综合| 大香伊人久久精品一区二区|