メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcStdio.h

buffer over flowしないよ 関数^^; [詳細]

#include "dkcOSIndependent.h"

dkcStdio.hのインクルード依存関係図

Include dependency graph

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

Included by dependency graph

ソースコードを見る。

関数

DKC_EXTERN int WINAPI dkc_memcpy (void *dest, size_t size1, const void *src, size_t size2)
DKC_EXTERN int WINAPI dkc_memcpy_zc (void *dest, size_t size1, const void *src, size_t size2)
 zero checked memcpy

DKC_EXTERN int WINAPI dkc_memmove (void *dest, size_t size1, const void *src, size_t size2)
DKC_EXTERN int WINAPI dkc_memcmp (const void *buf1, size_t buf1PermitSize, const void *buf2, size_t count)
 dkutil::dkmemcmp

DKC_EXTERN int WINAPI dkc_strcpy (char *dest, size_t size1, const char *src, size_t srclen)
DKC_EXTERN int WINAPI dkc_strcpy_amap (char *dest, size_t size1, const char *src, size_t srclen)
DKC_EXTERN int WINAPI dkc_strcpy_amap2 (char *dest, size_t size1, const char *src)
 dkutil::dkstrcpy_amap2

DKC_EXTERN int WINAPI dkc_strcat (char *dest, size_t destsize, size_t destlen, const char *src, size_t srclen)
 dkutil::dkstrcat

DKC_EXTERN int WINAPI dkc_strcat2 (char *dest, size_t destsize, const char *src)
 dkutil::dkstrcat2

DKC_EXTERN int WINAPI dkc_strcat_amap (char *dest, size_t destsize, size_t destlen, const char *src, size_t srclen)
 dkutil::dkstrcat_amap

DKC_EXTERN int WINAPI dkc_strcat_amap2 (char *dest, size_t destsize, const char *src)
 dkutil::dkstrcat_amap2

DKC_EXTERN int WINAPI dkc_strcmp (const char *b1, size_t b1size, const char *b2, size_t b2size)
DKC_EXTERN int WINAPI dkc_wcscat2 (wchar_t *dest, size_t destsize, const wchar_t *src)
 destsizeはバイト単位・・・

DKC_EXTERN size_t dkc_beam (int num)
 10進法での桁数を返す

DKC_EXTERN void dkc_memswap (void *va, void *vb, size_t size)
 dkutil::memswap

DKC_EXTERN void dkc_memreverse (void *array, size_t num, size_t size)
 dkutil::memreverse

DKC_EXTERN void dkc_memrrotate (void *array, size_t shift, size_t num, size_t size)
 dkutil::memrrotate

DKC_EXTERN void dkc_memlrotate (void *array, size_t shift, size_t num, size_t size)
 dkutil::memlrotate

DKC_EXTERN int dkc_stream_swap (char *memory, size_t size, size_t point)
 一つのメモリ領域をpointを基準に入れ替える。


説明

buffer over flowしないよ 関数^^;

作者:
d金魚
から:
transplanted from dkutilStdio.h:2004/2/28

TODO:
前までstdioというのはC言語で標準的な意味を持つのか?と思ってきたが、 最近STanDard Input Outputの略と言うことが分かった。 なのでこのファイル名はSTanDard LIBraryの方がイイと思ったので dkcStdlibにしようかと考えて見た。 が、面倒なのでいちおうこのままにしておこう^^;
覚え書き:
ここを見よ!
http://www-6.ibm.com/jp/developerworks/security/000616/j-buffer-defend.html

dkcStdio.h で定義されています。


関数

DKC_EXTERN size_t dkc_beam int  num  ) 
 

10進法での桁数を返す

dkcStdio.c153 行で定義されています。

00153                                    {    
00154     size_t b = 0 ;
00155     int i=0;
00156     for(i = 10 ; num >= i ; i *= 10 ){
00157         b ++ ;
00158     }
00159     return b;
00160 }

DKC_EXTERN int WINAPI dkc_memcmp const void *  buf1,
size_t  buf1PermitSize,
const void *  buf2,
size_t  count
 

dkutil::dkmemcmp

dkcStdio.c99 行で定義されています。

参照元 dkcFileBinaryCompare(), と dkcFileWithSignatureCheckCheat().

00101 {
00102     if(buf1PermitSize < count)return edk_LogicError;
00103     if(0 !=memcmp(buf1,buf2,count))return edk_FAILED;
00104     return edk_SUCCEEDED;
00105 }

DKC_EXTERN int WINAPI dkc_memcpy void *  dest,
size_t  size1,
const void *  src,
size_t  size2
 

dkcStdio.c15 行で定義されています。

参照元 dkc_memcpy_zc(), dkcAllocCircularMemoryStreamCopy(), dkcBufferGet(), dkcBufferGetOffset(), dkcBufferSet(), dkcBufferSetOffset(), dkcGetSingleListBuffer(), dkcMemoryStreamRead(), dkcMemoryStreamWrite(), dkcNewSingleList(), dkcSingleListGetBuffer(), dkcSingleListSetBuffer(), と dkcStringGetBuffer().

00015                                                                            {
00016     if(size1 < size2) return edk_FAILED;
00017     memcpy(dest,src,size2);
00018     return edk_SUCCEEDED;
00019 }

DKC_EXTERN int WINAPI dkc_memcpy_zc void *  dest,
size_t  size1,
const void *  src,
size_t  size2
 

zero checked memcpy

dkcStdio.c21 行で定義されています。

参照先 dkc_memcpy(), と NULL.

参照元 dkc2TreeGetBuffer(), と dkc2TreeSetBuffer().

00021                                                                               {
00022     if(size1 == 0 || size2 == 0) return edk_FAILED;
00023     if(NULL==dest || NULL==src) return edk_FAILED;
00024     return dkc_memcpy(dest,size1,src,size2);
00025 }

DKC_EXTERN void dkc_memlrotate void *  array,
size_t  shift,
size_t  num,
size_t  size
 

dkutil::memlrotate

dkcStdio.c245 行で定義されています。

参照先 dkc_memreverse().

00246 {
00247     dkc_memreverse( array,                      shift,     size ); // 012345678 -> 210345678
00248     dkc_memreverse( (char *)array+(size*shift), num-shift, size ); // 210345678 -> 210876543
00249     dkc_memreverse( array,                      num,       size ); // 210876543 -> 345678012
00250 }//memlrotate

DKC_EXTERN int WINAPI dkc_memmove void *  dest,
size_t  size1,
const void *  src,
size_t  size2
 

dkcStdio.c28 行で定義されています。

00029 {
00030     if(size1 < size2){
00031         return edk_FAILED;
00032     }
00033     memmove(dest,src,size2);
00034     return edk_SUCCEEDED;
00035 }

DKC_EXTERN void dkc_memreverse void *  array,
size_t  num,
size_t  size
 

dkutil::memreverse

dkcStdio.c221 行で定義されています。

参照先 dkc_memswap().

参照元 dkc_memlrotate(), と dkc_memrrotate().

00222 {
00223     char *l;
00224     char *r;
00225 
00226     l = (char *)array;
00227     r = (char *)array + ((num-1) * size);
00228     for( ; l < r; l = l+size, r = r-size )
00229         dkc_memswap( l, r, size );
00230 }//memreverse

DKC_EXTERN void dkc_memrrotate void *  array,
size_t  shift,
size_t  num,
size_t  size
 

dkutil::memrrotate

dkcStdio.c235 行で定義されています。

参照先 dkc_memreverse().

00236 {
00237     dkc_memreverse( array,                      num,       size ); // 012345678 -> 876543210
00238     dkc_memreverse( array,                      shift,     size ); // 876543210 -> 678543210
00239     dkc_memreverse( (char *)array+(size*shift), num-shift, size ); // 678543210 -> 678012345
00240 }//memrrotate

DKC_EXTERN void dkc_memswap void *  va,
void *  vb,
size_t  size
 

dkutil::memswap

dkcStdio.c204 行で定義されています。

参照元 dkc_memreverse().

00205 {
00206     char *ca;
00207     char *cb;
00208     char  cTmp;
00209     for( ca = (char *)va, cb = (char *)vb; size > 0; size--, ca++, cb++ )
00210     {
00211         cTmp = *ca;
00212         *ca  = *cb;
00213         *cb  = cTmp;
00214     }
00215 }//memswap

DKC_EXTERN int WINAPI dkc_strcat char *  dest,
size_t  destsize,
size_t  destlen,
const char *  src,
size_t  srclen
 

dkutil::dkstrcat

dkcStdio.c66 行で定義されています。

参照元 dkc_strcat2().

00068 {
00069     //destlen + srclen + NULL文字
00070     if(destsize < destlen + srclen + 1) return edk_FAILED;
00071     strncat(dest,src,srclen);
00072     return edk_SUCCEEDED;
00073 }

DKC_EXTERN int WINAPI dkc_strcat2 char *  dest,
size_t  destsize,
const char *  src
 

dkutil::dkstrcat2

dkcStdio.c75 行で定義されています。

参照先 dkc_strcat().

参照元 dkcSemiRealRandomInit().

00075                                                                   {
00076     return dkc_strcat(dest,destsize,strlen(dest),src,strlen(src));
00077 }

DKC_EXTERN int WINAPI dkc_strcat_amap char *  dest,
size_t  destsize,
size_t  destlen,
const char *  src,
size_t  srclen
 

dkutil::dkstrcat_amap

dkcStdio.c79 行で定義されています。

参照元 dkc_strcat_amap2(), と dkcDirectoryConcatenate().

00081 {
00082     //destlen + srclen + NULL文字
00083     int result = edk_SUCCEEDED;
00084     size_t lsize = destlen + srclen + 1;
00085     if(destsize < lsize)
00086     {//オーバーしてたら・・・
00087         srclen = lsize - destsize - 1;
00088         result = edk_Not_Satisfactory;
00089     }
00090     strncat(dest,src,srclen);
00091     //dest[destlen + srclen - 1] = '\0';
00092     return result;
00093 }

DKC_EXTERN int WINAPI dkc_strcat_amap2 char *  dest,
size_t  destsize,
const char *  src
 

dkutil::dkstrcat_amap2

dkcStdio.c95 行で定義されています。

参照先 dkc_strcat_amap().

00095                                                                        {
00096     return dkc_strcat_amap(dest,destsize,strlen(dest),src,strlen(src));
00097 }

DKC_EXTERN int WINAPI dkc_strcmp const char *  b1,
size_t  b1size,
const char *  b2,
size_t  b2size
 

dkcStdio.c107 行で定義されています。

00108 {
00109     int result = edk_SUCCEEDED;
00110     size_t i = 0;
00111     //検索する文字列が多いとおかしいのでエラー
00112     if(b1size < b2size) return edk_LogicError;
00113     //if(b1size < b2size) return edk_LogicError;
00114 
00115     //とりあえずマッチするか確かめる。
00116     for(i=0;i<b2size;i++)
00117     {
00118         if(b1[i] != b2[i])
00119         {
00120             result = edk_FAILED;
00121             break;
00122         }
00123     }
00124     return result;
00125 }

DKC_EXTERN int WINAPI dkc_strcpy char *  dest,
size_t  size1,
const char *  src,
size_t  srclen
 

dkcStdio.c37 行で定義されています。

参照元 dkcFindFileGetFileName(), dkcGetCurrentDirectory(), dkcPathStringDevideBegin_Logic(), dkcPathStringDevideNext_Logic(), dkcPathStringGetDirectory(), dkcPathStringGetDrive(), dkcPathStringGetFileExtension(), dkcPathStringGetFileName(), dkcSHA1DigestStr(), dkcSHA256DigestStr(), dkcSHA384DigestStr(), と dkcSHA512DigestStr().

00037                                                                             {
00038     if(size1 <= srclen) return edk_FAILED;
00039     strncpy(dest,src,srclen);
00040     //if(dest[srclen] != '\0') return edk_FAILED;
00041     dest[srclen] = '\0';
00042     return edk_SUCCEEDED;
00043 }

DKC_EXTERN int WINAPI dkc_strcpy_amap char *  dest,
size_t  size1,
const char *  src,
size_t  srclen
 

dkcStdio.c46 行で定義されています。

参照元 dkc_strcpy_amap2().

00046                                                                                  {
00047 #   ifndef NDEBUG
00048     if(!(0 == size1 && 0 == srclen)){
00049         return edk_FAILED;
00050     }
00051 #   endif
00052     if(size1 <= srclen){//ここは<=か!?
00053         strncpy(dest,src,size1);
00054         dest[size1 - 1] = '\0';
00055         return edk_Not_Satisfactory;
00056     }else{
00057         strncpy(dest,src,srclen);
00058         dest[srclen] = '\0';
00059         return edk_SUCCEEDED;
00060     }
00061 }

DKC_EXTERN int WINAPI dkc_strcpy_amap2 char *  dest,
size_t  size1,
const char *  src
 

dkutil::dkstrcpy_amap2

dkcStdio.c62 行で定義されています。

参照先 dkc_strcpy_amap().

00062                                                                     {
00063     return dkc_strcpy_amap(dest,size1,src,strlen(src));
00064 }

DKC_EXTERN int dkc_stream_swap char *  memory,
size_t  size,
size_t  point
 

一つのメモリ領域をpointを基準に入れ替える。

引数:
memory[in][out] バッファへのポインタ
size[in] memoryのサイズ
point[in] 何処を基点(何バイト目から)にSwapするか?
戻り値:
edk_SUCCEEDED以外ならエラー
覚え書き:
char *buff="buffer";みたいに初期化したバッファをSwapさせるとエラーする。

dkcStdio.c163 行で定義されています。

参照先 BOOL, FALSE, と TRUE.

参照元 dkcStringErase(), と dkcStringInsert().

00164 {
00165     char *p;
00166     size_t big;
00167     size_t small__;
00168     BOOL isLeft = FALSE;//左の方がでかいとTRUE
00169     if(size <= 1){
00170         return edk_FAILED;//スワップのしようが無い
00171     }
00172 
00173     
00174     if(size - point < point){
00175         big = point;//left
00176         small__ = size - point;
00177         isLeft = TRUE;
00178     }else{
00179         big = size - point;//right
00180         small__ = point;
00181     }
00182 
00183     p = (char *)malloc(big);
00184     if(!p) return edk_OutOfMemory;
00185     
00186     if(isLeft)
00187     {
00188         memcpy(p,memory,big);
00189         memcpy(memory,&memory[big],small__);
00190         memcpy(&memory[small__],p,big);
00191     }else{
00192         memcpy(p,&memory[small__],big);
00193         memcpy(&memory[big],memory,small__);
00194         memcpy(memory,p,big);
00195     }
00196     
00197     free(p);
00198     return edk_SUCCEEDED;
00199 }

DKC_EXTERN int WINAPI dkc_wcscat2 wchar_t *  dest,
size_t  destsize,
const wchar_t *  src
 

destsizeはバイト単位・・・

dkcStdio.c141 行で定義されています。

参照元 dkcSemiRealRandomInit().

00143 {
00144     size_t dlen = wcslen(dest);
00145     size_t slen = wcslen(src);
00146 
00147     if(destsize / sizeof(wchar_t) < dlen + slen + 1)    return edk_FAILED;
00148     
00149     wcsncpy(&dest[dlen],src,slen);
00150     return edk_SUCCEEDED;
00151 }


dkutil_cに対してTue Feb 22 02:03:15 2005に生成されました。 doxygen 1.3.6