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

dkcStdio.h

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

#include <stdio.h>
#include <string.h>
#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_memmove (void *dest, size_t size1, const void *src, size_t size2)
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_memcmp (const void *buf1, size_t buf1PermitSize, const void *buf2, size_t count)
 dkutil::dkmemcmp

DKC_EXTERN int WINAPI dkc_strcmp (const char *b1, size_t b1size, const char *b2, size_t b2size)
DKC_EXTERN size_t dkc_beam (int num)
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
覚え書き:
ここを見よ!
http://www-6.ibm.com/jp/developerworks/security/000616/j-buffer-defend.html

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


関数

DKC_EXTERN size_t dkc_beam int  num  ) 
 

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

00119                         {   
00120     size_t b = 0 ;
00121     int i=0;
00122     for(i = 10 ; num >= i ; i *= 10 ){
00123         b ++ ;
00124     }
00125     return b;
00126 }

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

dkutil::dkmemcmp

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

参照先 edk_FAILED, edk_LogicError, と edk_SUCCEEDED.

参照元 dkcFileWithSignatureCheckCheat().

00093 {
00094     if(buf1PermitSize < count)return edk_LogicError;
00095     if(0 !=memcmp(buf1,buf2,count))return edk_FAILED;
00096     return edk_SUCCEEDED;
00097 }

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

覚え書き:
dkcStdio.hのC++版の方をCに移植したもの・・・。 あ~、なんか虚しい・・・。なんかバグあったらどうかご報告ください。m(_ _)m
個人メモ: フィックス方法:間違い個所だけ直す・・・。

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

参照先 edk_FAILED, と edk_SUCCEEDED.

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

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

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

dkutil::memlrotate

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

参照先 dkc_memreverse().

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

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

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

参照先 edk_FAILED, と edk_SUCCEEDED.

00021 {
00022     if(size1 < size2){
00023         return edk_FAILED;
00024     }
00025     memmove(dest,src,size2);
00026     return edk_SUCCEEDED;
00027 }

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

dkutil::memreverse

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

参照先 dkc_memswap().

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

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

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

dkutil::memrrotate

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

参照先 dkc_memreverse().

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

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

dkutil::memswap

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

参照元 dkc_memreverse().

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

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

dkutil::dkstrcat

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

参照先 edk_FAILED, と edk_SUCCEEDED.

参照元 dkc_strcat2().

00060 {
00061     //destlen + srclen + NULL文字
00062     if(destsize < destlen + srclen + 1) return edk_FAILED;
00063     strncat(dest,src,srclen);
00064     return edk_SUCCEEDED;
00065 }

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

dkutil::dkstrcat2

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

参照先 dkc_strcat().

00067                                                                   {
00068     return dkc_strcat(dest,destsize,strlen(dest),src,strlen(src));
00069 }

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.c71 行で定義されています。

参照先 edk_Not_Satisfactory, と edk_SUCCEEDED.

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

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 }

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

dkutil::dkstrcat_amap2

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

参照先 dkc_strcat_amap().

00087                                                                        {
00088     return dkc_strcat_amap(dest,destsize,strlen(dest),src,strlen(src));
00089 }

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

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

参照先 edk_FAILED, edk_LogicError, と edk_SUCCEEDED.

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 }

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

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

参照先 edk_FAILED, と edk_SUCCEEDED.

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

00029                                                                             {
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 }

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

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

参照先 edk_FAILED, edk_Not_Satisfactory, と edk_SUCCEEDED.

参照元 dkc_strcpy_amap2().

00038                                                                                  {
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 }

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

dkutil::dkstrcpy_amap2

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

参照先 dkc_strcpy_amap().

00054                                                                     {
00055     return dkc_strcpy_amap(dest,size1,src,strlen(src));
00056 }

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.c129 行で定義されています。

参照先 BOOL, edk_FAILED, edk_OutOfMemory, edk_SUCCEEDED, FALSE, と TRUE.

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

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 }


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