メインページ | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcStdio.c

説明を見る。
00001 
00011 #include "dkcStdio.h"
00012 
00013 
00014 int WINAPI dkc_memcpy(void *dest,size_t size1,const void *src,size_t size2){
00015     if(size1 < size2) return edk_FAILED;
00016     memcpy(dest,src,size2);
00017     return edk_SUCCEEDED;
00018 }
00019 
00020 int WINAPI dkc_memmove( void *dest,size_t size1,const void *src, size_t size2 )
00021 {
00022     if(size1 < size2){
00023         return edk_FAILED;
00024     }
00025     memmove(dest,src,size2);
00026     return edk_SUCCEEDED;
00027 }
00028 
00029 int WINAPI dkc_strcpy(char *dest,size_t size1,const char *src,size_t srclen){
00030     if(size1 <= srclen) return edk_FAILED;
00031     strncpy(dest,src,srclen);
00032     //if(dest[srclen] != '\0') return edk_FAILED;
00033     dest[srclen] = '\0';
00034     return edk_SUCCEEDED;
00035 }
00036 
00037 
00038 int WINAPI dkc_strcpy_amap(char *dest,size_t size1,const char *src,size_t srclen){
00039 #   ifndef NDEBUG
00040     if(!(0 == size1 && 0 == srclen)){
00041         return edk_FAILED;
00042     }
00043 #   endif
00044     if(size1 <= srclen){//ここは<=か!?
00045         strncpy(dest,src,size1);
00046         dest[size1 - 1] = '\0';
00047         return edk_Not_Satisfactory;
00048     }else{
00049         strncpy(dest,src,srclen);
00050         dest[srclen] = '\0';
00051         return edk_SUCCEEDED;
00052     }
00053 }
00054 int WINAPI dkc_strcpy_amap2(char *dest,size_t size1,const char *src){
00055     return dkc_strcpy_amap(dest,size1,src,strlen(src));
00056 }
00057 
00058 int WINAPI dkc_strcat(char *dest,size_t destsize,size_t destlen,
00059     const char *src,size_t srclen)
00060 {
00061     //destlen + srclen + NULL文字
00062     if(destsize < destlen + srclen + 1) return edk_FAILED;
00063     strncat(dest,src,srclen);
00064     return edk_SUCCEEDED;
00065 }
00066 
00067 int WINAPI dkc_strcat2(char *dest,size_t destsize,const char *src){
00068     return dkc_strcat(dest,destsize,strlen(dest),src,strlen(src));
00069 }
00070 
00071 int WINAPI dkc_strcat_amap(char *dest,size_t destsize,size_t destlen,
00072     const char *src,size_t srclen)
00073 {
00074     //destlen + srclen + NULL文字
00075     int result = edk_SUCCEEDED;
00076     size_t lsize = destlen + srclen + 1;
00077     if(destsize < lsize)
00078     {//オーバーしてたら・・・
00079         srclen = lsize - destsize - 1;
00080         result = edk_Not_Satisfactory;
00081     }
00082     strncat(dest,src,srclen);
00083     //dest[destlen + srclen - 1] = '\0';
00084     return result;
00085 }
00086 
00087 int WINAPI dkc_strcat_amap2(char *dest,size_t destsize,const char *src){
00088     return dkc_strcat_amap(dest,destsize,strlen(dest),src,strlen(src));
00089 }
00090 
00091 int WINAPI dkc_memcmp( const void *buf1,size_t buf1PermitSize,
00092     const void *buf2, size_t count )
00093 {
00094     if(buf1PermitSize < count)return edk_LogicError;
00095     if(0 !=memcmp(buf1,buf2,count))return edk_FAILED;
00096     return edk_SUCCEEDED;
00097 }
00098 
00099 int WINAPI dkc_strcmp(const char *b1,size_t b1size,const char *b2,size_t b2size)
00100 {
00101     int result = edk_SUCCEEDED;
00102     size_t i = 0;
00103     //検索する文字列が多いとおかしいのでエラー
00104     if(b1size < b2size) return edk_LogicError;
00105     //if(b1size < b2size) return edk_LogicError;
00106 
00107     //とりあえずマッチするか確かめる。
00108     for(i=0;i<b2size;i++)
00109     {
00110         if(b1[i] != b2[i])
00111         {
00112             result = edk_FAILED;
00113             break;
00114         }
00115     }
00116     return result;
00117 }
00118 
00119 size_t dkc_beam(int num){   
00120     size_t b = 0 ;
00121     int i=0;
00122     for(i = 10 ; num >= i ; i *= 10 ){
00123         b ++ ;
00124     }
00125     return b;
00126 }
00127 
00128 
00129 int dkc_stream_swap(char *memory,size_t size,size_t point)
00130 {
00131     char *p;
00132     size_t big;
00133     size_t small__;
00134     BOOL isLeft = FALSE;//左の方がでかいとTRUE
00135     if(size <= 1){
00136         return edk_FAILED;//スワップのしようが無い
00137     }
00138 
00139     
00140     if(size - point < point){
00141         big = point;//left
00142         small__ = size - point;
00143         isLeft = TRUE;
00144     }else{
00145         big = size - point;//right
00146         small__ = point;
00147     }
00148 
00149     p = (char *)malloc(big);
00150     if(!p) return edk_OutOfMemory;
00151     
00152     if(isLeft)
00153     {
00154         memcpy(p,memory,big);
00155         memcpy(memory,&memory[big],small__);
00156         memcpy(&memory[small__],p,big);
00157     }else{
00158         memcpy(p,&memory[small__],big);
00159         memcpy(&memory[big],memory,small__);
00160         memcpy(memory,p,big);
00161     }
00162     
00163     free(p);
00164     return edk_SUCCEEDED;
00165 }
00166 
00167 
00168 
00170 void dkc_memswap( void *va, void *vb, size_t size )
00171 {
00172     char *ca;
00173     char *cb;
00174     char  cTmp;
00175     for( ca = (char *)va, cb = (char *)vb; size > 0; size--, ca++, cb++ )
00176     {
00177         cTmp = *ca;
00178         *ca  = *cb;
00179         *cb  = cTmp;
00180     }
00181 }//memswap
00182 
00183 
00184 
00187 void dkc_memreverse( void *array, size_t num, size_t size )
00188 {
00189     char *l;
00190     char *r;
00191 
00192     l = (char *)array;
00193     r = (char *)array + ((num-1) * size);
00194     for( ; l < r; l = l+size, r = r-size )
00195         dkc_memswap( l, r, size );
00196 }//memreverse
00197 
00198 
00201 void dkc_memrrotate( void *array, size_t shift, size_t num, size_t size )
00202 {
00203     dkc_memreverse( array,                      num,       size ); // 012345678 -> 876543210
00204     dkc_memreverse( array,                      shift,     size ); // 876543210 -> 678543210
00205     dkc_memreverse( (char *)array+(size*shift), num-shift, size ); // 678543210 -> 678012345
00206 }//memrrotate
00207 
00208 
00211 void dkc_memlrotate( void *array, size_t shift, size_t num, size_t size )
00212 {
00213     dkc_memreverse( array,                      shift,     size ); // 012345678 -> 210345678
00214     dkc_memreverse( (char *)array+(size*shift), num-shift, size ); // 210345678 -> 210876543
00215     dkc_memreverse( array,                      num,       size ); // 210876543 -> 345678012
00216 }//memlrotate
00217 
00218 
00219 #if 0
00220 
00221 int WINAPI strnicmp(
00222     const char *string1, const char *string2, size_t count)
00223 {
00224     int c1, c2;
00225     
00226     --count;
00227     
00228     for (; count ; --count){
00229         c1 = string1[count];
00230         c2 = string2[count];
00231         
00232         // 文字列の終端チェック
00233         if (!c1) return 1;
00234         if (!c2) return 1;
00235         
00236         // 大文字の場合、小文字に変換する
00237         if ('A' <= c1 && c1 <= 'Z') c1 += 'a' - 'A';
00238         if ('A' <= c2 && c2 <= 'Z') c2 += 'a' - 'A';
00239         
00240         // 両方とも小文字になったので、比較する
00241         if (c1 != c2) return 1;
00242     }
00243     
00244     return 0;
00245 }// _strnicmp
00246 
00247 #endif

dkutil_cに対してSun Jul 18 22:45:22 2004に生成されました。 doxygen 1.3.6