#include "dkcOSIndependent.h"
#include "dkcStream.h"
#include "dkcStdio.h"
#include <limits.h>
dkcStream.cのインクルード依存関係図
マクロ定義 | |
#define | DKUTIL_C_STREAM_C |
関数 | |
DKC_INLINE int | SetStreamInfo (DKC_STREAM *p, UINT flag) |
DKC_STREAM *WINAPI | dkcAllocStreamMemoryType (UINT flag, const void *default_data, size_t size) |
DKC_STREAM *WINAPI | dkcAllocStreamFileType (UINT flag, const char *filename, const char *mode) |
DKC_STREAM *WINAPI | dkcAllocStreamEncouragementFileType (const char *filename, const char *mode, BOOL OrderFlag) |
ファイル用ストリームの領域を得る時の奨励版の関数 | |
DKC_STREAM *WINAPI | dkcAllocStream (UINT flag, const void *default_data, size_t size, const char *filename, const char *mode) |
ストリーム領域を得る。 | |
int WINAPI | dkcFreeStream (DKC_STREAM **p) |
dkcAllocNewStream()で確保したストリーム領域を開放する | |
int WINAPI | dkcStreamSeek (DKC_STREAM *ptr, int offset, int origin) |
streamをシークする。fseekみたいなもの | |
long WINAPI | dkcStreamTell (DKC_STREAM *ptr) |
streamの位置を取得する。 edkcStreamSeekSetからのオフセット値。edk_FAILEDだとエラー | |
int WINAPI | dkcStreamFlush (DKC_STREAM *ptr) |
ストリーム内をフラッシュ(完全に書きこむ処理)する。 | |
BOOL WINAPI | dkcStreamEOF (DKC_STREAM *ptr) |
EOFだとTRUE. | |
BOOL WINAPI | dkcStreamError (DKC_STREAM *ptr) |
エラーだとTRUE | |
DKC_INLINE int | dkcStreamReadObayAnOrder (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
DKC_INLINE int WINAPI | dkcStreamRead (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
streamをリードする。freadみたいなもの | |
int WINAPI | StreamRead (DKC_STREAM *ptr, void *buffer, size_t size, void *hoge) |
int WINAPI | dkcStreamRead16 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
int WINAPI | dkcStreamRead32 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
int WINAPI | dkcStreamRead64 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
int WINAPI | dkcStreamRef (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
streamの中身を見る。 | |
int WINAPI | dkcStreamRef16 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
int WINAPI | dkcStreamRef32 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
int WINAPI | dkcStreamRef64 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
DKC_INLINE int | dkcStreamWriteObayAnOrder (DKC_STREAM *ptr, const void *buffer, size_t size) |
DKC_INLINE int WINAPI | dkcStreamWrite (DKC_STREAM *ptr, const void *buffer, size_t size) |
streamをライトする。fwriteみたいなもの | |
int WINAPI | StreamWrite (DKC_STREAM *ptr, void *buffer, size_t size, void *hoge) |
int WINAPI | dkcStreamWrite16 (DKC_STREAM *ptr, const void *buffer, size_t size) |
int WINAPI | dkcStreamWrite32 (DKC_STREAM *ptr, const void *buffer, size_t size) |
int WINAPI | dkcStreamWrite64 (DKC_STREAM *ptr, const void *buffer, size_t size) |
int WINAPI | dkcStreamProcess (DKC_STREAM *ptr, void *buffer, size_t size, DKC_STREAM_PROCESS_TYPE write_t, void *data) |
int WINAPI | dkcStreamProcess16 (DKC_STREAM *ptr, void *buffer, size_t size, DKC_STREAM_PROCESS_TYPE write_t, void *data) |
int WINAPI | dkcStreamProcess32 (DKC_STREAM *ptr, void *buffer, size_t size, DKC_STREAM_PROCESS_TYPE write_t, void *data) |
int WINAPI | dkcStreamProcess64 (DKC_STREAM *ptr, void *buffer, size_t size, DKC_STREAM_PROCESS_TYPE write_t, void *data) |
int WINAPI | dkcStreamClear (DKC_STREAM *ptr) |
stream内をmemset(0)する。(seek位置も最初に戻される。 |
|
d金魚
dkcStream.c の 7 行で定義されています。 |
|
ストリーム領域を得る。
dkcStream.c の 108 行で定義されています。
00111 { 00112 00113 DKC_STREAM *p; 00114 void *psig; 00115 00116 00117 p = (DKC_STREAM *)dkcAllocate(sizeof(DKC_STREAM)); 00118 if(NULL==p){ 00119 return NULL; 00120 } 00121 00122 if(DKUTIL_FAILED(SetStreamInfo(p,flag))){ 00123 goto Error; 00124 } 00125 00126 switch(p->mMode){ 00127 case edkcStreamInitMemory: 00128 psig = (void *)dkcAllocMemoryStream(size); 00129 if(NULL==psig){ 00130 goto Error; 00131 } 00132 //update 00133 p->mSig = psig; 00134 //write default data 00135 dkcStreamWrite(p,default_data,size); 00136 break; 00137 case edkcStreamInitFile: 00138 psig = (void *)dkcFOpen(filename,mode); 00139 if(NULL==psig){ 00140 goto Error; 00141 } 00142 //update 00143 p->mSig = psig; 00144 00145 break; 00146 default: 00147 goto Error; 00148 } 00149 00150 00151 //p->mEndianMode = endianmode 00152 00153 return p; 00154 Error: 00155 dkcFree((void **)&p); 00156 return NULL; 00157 } |
|
ファイル用ストリームの領域を得る時の奨励版の関数
dkcStream.c の 93 行で定義されています。 参照先 BOOL, DKC_STREAM, dkcAllocStream(), DKUTIL_FLAG_DOWN, DKUTIL_FLAG_UP, edkcStreamBigEndian, edkcStreamInitFile, edkcStreamLittleEndian, edkcStreamProcessAsOrdered, edkcStreamProcessDefault, と NULL.
00094 { 00095 UINT flag = 0; 00096 DKUTIL_FLAG_UP(flag,edkcStreamInitFile); 00097 DKUTIL_FLAG_UP(flag,edkcStreamLittleEndian); 00098 DKUTIL_FLAG_DOWN(flag,edkcStreamBigEndian); 00099 if(OrderFlag){ 00100 DKUTIL_FLAG_UP(flag,edkcStreamProcessAsOrdered ); 00101 }else{ 00102 DKUTIL_FLAG_UP(flag,edkcStreamProcessDefault); 00103 } 00104 return dkcAllocStream(flag,NULL,0,filename,mode); 00105 } |
|
dkcStream.c の 87 行で定義されています。 参照先 DKC_STREAM, dkcAllocStream(), DKUTIL_FLAG_DOWN, DKUTIL_FLAG_UP, edkcStreamInitFile, edkcStreamInitMemory, と NULL. 参照元 dkcOpenFileWithSignature().
00087 { 00088 DKUTIL_FLAG_DOWN(flag,edkcStreamInitMemory); 00089 DKUTIL_FLAG_UP(flag,edkcStreamInitFile); 00090 return dkcAllocStream(flag,NULL,0,filename,mode); 00091 } |
|
dkcStream.c の 80 行で定義されています。 参照先 DKC_STREAM, dkcAllocStream(), DKUTIL_FLAG_DOWN, DKUTIL_FLAG_UP, edkcStreamInitFile, edkcStreamInitMemory, と NULL.
00080 { 00081 DKUTIL_FLAG_DOWN(flag,edkcStreamInitFile); 00082 DKUTIL_FLAG_UP(flag,edkcStreamInitMemory); 00083 return dkcAllocStream(flag,default_data,size,NULL,NULL); 00084 00085 } |
|
dkcAllocNewStream()で確保したストリーム領域を開放する
dkcStream.c の 160 行で定義されています。 参照先 DKC_MEMORYSTREAM, DKC_STREAM, dkcFClose(), dkcFree(), dkcFreeMemoryStream(), dkcmNOT_ASSERT, edk_FAILED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, dkc_Stream::mSig, と NULL. 参照元 dkcAllocReplace(), dkcCloseFileWithSignature(), dkcFreeReplace(), と dkcOpenFileWithSignature().
00160 { 00161 DKC_STREAM *t; 00162 if(NULL==p){ 00163 return edk_FAILED; 00164 } 00165 t = *p; 00166 if(NULL==t){ 00167 return edk_FAILED; 00168 } 00169 00170 switch(t->mMode){ 00171 case edkcStreamInitMemory: 00172 dkcFreeMemoryStream((DKC_MEMORYSTREAM **)&(t->mSig)); 00173 break; 00174 case edkcStreamInitFile: 00175 dkcFClose((FILE **)&(t->mSig)); 00176 break; 00177 #ifdef DEBUG 00178 default: 00179 dkcmNOT_ASSERT("dkcFreeStream FAILED"); 00180 #endif 00181 } 00182 return dkcFree((void **)p); 00183 } |
|
stream内をmemset(0)する。(seek位置も最初に戻される。
dkcStream.c の 738 行で定義されています。 参照先 DKC_MEMORYSTREAM, DKC_STREAM, dkcMemoryStreamClear(), dkcStreamWrite(), DKUTIL_FAILED, edk_FAILED, edk_SUCCEEDED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, と dkc_Stream::mSig.
00738 { 00739 //file size 00740 size_t fsize; 00741 //temp size 00742 size_t tsize; 00743 size_t write_size; 00744 FILE *fp; 00745 int r = edk_FAILED; 00746 char null_array[1024]; 00747 00748 00749 switch(ptr->mMode){ 00750 case edkcStreamInitMemory: 00751 r = dkcMemoryStreamClear( (DKC_MEMORYSTREAM *)ptr->mSig ); 00752 break; 00753 case edkcStreamInitFile: 00754 00755 memset(null_array,0,sizeof(null_array)); 00756 fp =(FILE *) ptr->mSig; 00757 00758 00759 fseek( fp, 0, SEEK_END ) ; 00760 fsize = ftell( fp ) ; 00761 fseek( fp, 0, SEEK_SET ) ; 00762 00763 if(fsize > sizeof(null_array)) 00764 {//ファイルのサイズがNULL配列より大きい場合 00765 00766 tsize = 0; 00767 write_size = sizeof(null_array); 00768 for(;;){ 00769 00770 r = dkcStreamWrite(ptr,null_array,write_size); 00771 00772 if(DKUTIL_FAILED(r)){ 00773 return r; 00774 } 00775 if(tsize >= fsize){ 00776 r = edk_SUCCEEDED; 00777 break; 00778 } 00779 00780 if(tsize + write_size > fsize){ 00781 write_size = fsize - tsize; 00782 }else{ 00783 tsize += write_size; 00784 00785 //こいつはいらないけど一応・・・ 00786 write_size = sizeof(null_array); 00787 } 00788 } 00789 }else{//ちっこいなら上書き上書き・・・ 00790 r = dkcStreamWrite(ptr,null_array,fsize); 00791 } 00792 00793 break; 00794 } 00795 return r; 00796 } |
|
EOFだとTRUE.
dkcStream.c の 234 行で定義されています。 参照先 BOOL, DKC_STREAM, edkcStreamInitFile, FALSE, dkc_Stream::mMode, dkc_Stream::mSig, と TRUE.
00234 { 00235 if(edkcStreamInitFile != ptr->mMode){ 00236 goto Exit; 00237 } 00238 if(0 != feof((FILE *)ptr->mSig)){ 00239 return TRUE; 00240 } 00241 Exit: 00242 return FALSE; 00243 } |
|
エラーだとTRUE
dkcStream.c の 245 行で定義されています。 参照先 BOOL, DKC_STREAM, edkcStreamInitFile, FALSE, dkc_Stream::mMode, dkc_Stream::mSig, と TRUE.
00245 { 00246 if(edkcStreamInitFile != ptr->mMode){ 00247 goto Exit; 00248 } 00249 if(0 != ferror((FILE *)ptr->mSig)){ 00250 return TRUE; 00251 } 00252 Exit: 00253 return FALSE; 00254 } |
|
ストリーム内をフラッシュ(完全に書きこむ処理)する。
dkcStream.c の 219 行で定義されています。 参照先 DKC_STREAM, edk_FAILED, edk_SUCCEEDED, edkcStreamInitFile, dkc_Stream::mMode, と dkc_Stream::mSig.
00219 { 00220 int r = edk_SUCCEEDED; 00221 //filter 00222 if(edkcStreamInitFile!=ptr->mMode){ 00223 return edk_FAILED; 00224 } 00225 00226 r = fflush((FILE *)ptr->mSig); 00227 00228 if(r==EOF){ 00229 return edk_FAILED; 00230 } 00231 return edk_SUCCEEDED; 00232 } |
|
dkcStream.c の 610 行で定義されています。 参照先 DKC_STREAM, と DKC_STREAM_PROCESS_TYPE. 参照元 dkcFileWithSignatureWrite(), dkcFileWithSignatureWrite16(), dkcFileWithSignatureWrite32(), dkcFileWithSignatureWrite64(), と FileWithSignatureReadLogic().
00612 {
00613 return write_t(ptr,buffer,size,data);
00614 }
|
|
dkcStream.c の 618 行で定義されています。 参照先 DKC_STREAM, DKC_STREAM_PROCESS_TYPE, dkcReverseEndian16(), edk_ArgumentException, edk_OutOfMemory, dkc_Stream::mChangeEndian, と NULL. 参照元 dkcStreamRead16(), と dkcStreamWrite16().
00619 { 00620 int r; 00621 USHORT *pb; 00622 size_t elem_num,pause = 16; 00623 size_t i; 00624 00625 if(size % pause != 0){ 00626 return edk_ArgumentException; 00627 } 00628 if(ptr->mChangeEndian) 00629 {//エンディアンチェンジが必要 00630 pb = (USHORT *)malloc(size); 00631 if(NULL==pb){ 00632 //return edk_FAILED; 00633 return edk_OutOfMemory; 00634 } 00635 00636 //メモリコピー 00637 memcpy(pb,buffer,size); 00638 elem_num = size / pause; 00639 00640 //エンディアンをチェンジさせる。 00641 for(i=0;i<elem_num;i++){ 00642 pb[i] = dkcReverseEndian16(pb[i]); 00643 } 00644 //書き込む 00645 r = write_t(ptr,pb,size,data); 00646 00647 free(pb); 00648 }else{ 00649 r = write_t(ptr,buffer,size,data); 00650 } 00651 return r; 00652 } |
|
dkcStream.c の 655 行で定義されています。 参照先 DKC_STREAM, DKC_STREAM_PROCESS_TYPE, dkcReverseEndian32(), edk_ArgumentException, edk_OutOfMemory, dkc_Stream::mChangeEndian, と NULL. 参照元 dkcStreamRead32(), と dkcStreamWrite32().
00656 { 00657 int r; 00658 ULONG *pb; 00659 size_t elem_num,pause = 32; 00660 size_t i; 00661 00662 if(size % pause != 0){ 00663 return edk_ArgumentException; 00664 } 00665 if(ptr->mChangeEndian) 00666 {//エンディアンチェンジが必要 00667 pb = (ULONG *)malloc(size); 00668 if(NULL==pb){ 00669 return edk_OutOfMemory; 00670 } 00671 00672 //メモリコピー 00673 memcpy(pb,buffer,size); 00674 elem_num = size / pause; 00675 00676 //エンディアンをチェンジさせる。 00677 for(i=0;i<elem_num;i++){ 00678 pb[i] = dkcReverseEndian32(pb[i]); 00679 } 00680 //書き込む 00681 r = write_t(ptr,pb,size,data); 00682 00683 free(pb); 00684 }else{ 00685 r = write_t(ptr,buffer,size,data); 00686 } 00687 return r; 00688 00689 } |
|
dkcStream.c の 700 行で定義されています。 参照先 DKC_STREAM, DKC_STREAM_PROCESS_TYPE, dkcReverseEndian64(), edk_ArgumentException, edk_OutOfMemory, dkc_Stream::mChangeEndian, NULL, と ULONGLONG. 参照元 dkcStreamRead64(), と dkcStreamWrite64().
00701 { 00702 int r; 00703 ULONGLONG *pb; 00704 size_t elem_num,pause = 64; 00705 size_t i; 00706 00707 if(size % pause != 0){ 00708 return edk_ArgumentException; 00709 } 00710 if(ptr->mChangeEndian) 00711 {//エンディアンチェンジが必要 00712 pb = (ULONGLONG *)malloc(size); 00713 if(NULL==pb){ 00714 return edk_OutOfMemory; 00715 } 00716 00717 //メモリコピー 00718 memcpy(pb,buffer,size); 00719 elem_num = size / pause; 00720 00721 //エンディアンをチェンジさせる。 00722 for(i=0;i<elem_num;i++){ 00723 pb[i] = dkcReverseEndian64(pb[i]); 00724 } 00725 //書き込む 00726 r = write_t(ptr,pb,size,data); 00727 00728 free(pb); 00729 }else{ 00730 r = write_t(ptr,buffer,size,data); 00731 } 00732 return r; 00733 } |
|
streamをリードする。freadみたいなもの
dkcStream.c の 318 行で定義されています。 参照先 DKC_INLINE, DKC_MEMORYSTREAM, DKC_STREAM, dkcMemoryStreamRead(), dkcStreamReadObayAnOrder(), edk_BufferOverFlow, edk_FAILED, edk_SUCCEEDED, edkcStreamInitFile, edkcStreamInitMemory, edkcStreamProcessDefault, dkc_Stream::mMode, dkc_Stream::mProcessMode, dkc_Stream::mSig, と NULL. 参照元 dkcStreamRef(), ReadCallback(), と StreamRead().
00318 { 00319 int r = edk_FAILED; 00320 FILE *fp = (FILE *)ptr->mSig; 00321 size_t redsize = 0; 00322 00323 //readsize filter 00324 if(NULL==readsize){ 00325 readsize = &redsize; 00326 } 00327 00328 //エンディアンチェンジ指定されているよ〜〜。 00329 /*if(flag & edkcStreamReadErrorWhenEndianChange){ 00330 if(ptr->mChangeEndian){ 00331 return edk_Not_Satisfactory; 00332 } 00333 }*/ 00334 00335 switch(ptr->mMode){ 00336 case edkcStreamInitMemory: 00337 r = dkcMemoryStreamRead((DKC_MEMORYSTREAM *)ptr->mSig, 00338 buffer,size,readsize); 00339 break; 00340 case edkcStreamInitFile: 00341 00342 if(ptr->mProcessMode & edkcStreamProcessDefault){ 00343 00344 *readsize = fread(buffer,1,size,fp); 00345 00346 //set result 00347 if(feof(fp)){ 00348 r = edk_BufferOverFlow; 00349 }else if(!ferror(fp)){ 00350 r = edk_SUCCEEDED; 00351 } 00352 00353 }else{ 00354 r = dkcStreamReadObayAnOrder(ptr,buffer,size,readsize); 00355 } 00356 00357 00358 break; 00359 } 00360 return r; 00361 } |
|
dkcStream.c の 367 行で定義されています。 参照先 DKC_STREAM, dkcStreamProcess16(), と StreamRead(). 参照元 dkcStreamRef16().
00368 { 00369 return dkcStreamProcess16(ptr,buffer,size,StreamRead,(void *)readsize); 00370 /* 00371 size_t sentinel = size / 2; 00372 size_t i = 0; 00373 size_t t_rs = 0; 00374 00375 USHORT *pus; 00376 00377 size_t real_readsize = 0; 00378 int result; 00379 00380 //filter 00381 if(size_t % 2 != 0){ 00382 return edk_ArgumentException; 00383 } 00384 00385 pus = (USHORT *)buffer; 00386 00387 for(;i<sentinel;i++){ 00388 //process 00389 result = dkcStreamRead(ptr,&pus[i],2,&t_rs); 00390 00391 00392 //update data 00393 real_readsize += t_rs; 00394 00395 00396 //process state update check 00397 switch(result){ 00398 case edkSUCCEEDED: 00399 continue; 00400 case edk_FAILED: 00401 case edk_BufferOverFlow: 00402 goto End; 00403 default: 00404 dkcmNOT_ASSERT("dkcStreamSwapRead16 Error"); 00405 goto End; 00406 } 00407 }//end of for 00408 End: 00409 if(readsize){//set readsize 00410 *readsize = real_readsize; 00411 } 00412 //process result 00413 return result; 00414 */ 00415 } |
|
dkcStream.c の 417 行で定義されています。 参照先 DKC_STREAM, dkcStreamProcess32(), と StreamRead(). 参照元 dkcStreamRef32().
00417 { 00418 return dkcStreamProcess32(ptr,buffer,size,StreamRead,(void *)readsize); 00419 } |
|
dkcStream.c の 421 行で定義されています。 参照先 DKC_STREAM, dkcStreamProcess64(), と StreamRead(). 参照元 dkcStreamRef64().
00421 { 00422 return dkcStreamProcess64(ptr,buffer,size,StreamRead,(void *)readsize); 00423 } |
|
dkcStream.c の 257 行で定義されています。 参照先 BYTE, DKC_INLINE, DKC_STREAM, dkcmNOT_ASSERT, edk_BufferOverFlow, edk_FAILED, edk_SUCCEEDED, dkc_Stream::mSig, と NULL. 参照元 dkcStreamRead().
00259 { 00260 int r = edk_FAILED; 00261 size_t readsize_ = 0; 00262 size_t count; 00263 size_t tc,tsize; 00264 BYTE *tbuffer; 00265 FILE *fp = (FILE *)ptr->mSig; 00266 00267 if(NULL==readsize){ 00268 readsize = &readsize_; 00269 } 00270 00271 //1,sizeの引数を入れ替えるとどうか? 00272 //1 = fread(buffer,size,1,ptr->mfp); 00273 //read size 00274 tsize = size; 00275 //temp variable 00276 tc = 0; 00277 //offset counter 00278 count = 0; 00279 //byte type pointer 00280 tbuffer = (BYTE *)buffer; 00281 for(;;) 00282 { 00283 //error check 00284 if(ferror(fp) ){ 00285 //*readsize = count; 00286 r = edk_FAILED; 00287 break; 00288 } 00289 if(feof(fp)){ 00290 //*readsize = count; 00291 r = edk_BufferOverFlow; 00292 break; 00293 } 00294 //read 00295 tc = fread(&tbuffer[count],1,tsize,fp); 00296 //update 00297 tsize -= tc; 00298 count += tc; 00299 00300 if(count == size){ 00301 r = edk_SUCCEEDED; 00302 break; 00303 } 00304 # ifdef DEBUG 00305 //ありえないエラーチェック 00306 dkcmNOT_ASSERT(count > size); 00307 # else 00308 if(count > size){ 00309 break; 00310 } 00311 # endif 00312 } 00313 *readsize = count; 00314 return r; 00315 00316 } |
|
streamの中身を見る。 tとして保存していた物を指定して 元の位置に戻す dkcStream.c の 426 行で定義されています。 参照先 DKC_STREAM, dkcStreamRead(), dkcStreamSeek(), dkcStreamTell(), と edkcStreamSeekSet.
00427 { 00428 //位置を記憶 00429 long t = dkcStreamTell(ptr); 00430 //読みこむ(内部で位置がsize分(readsize分)ずらされる) 00431 int r = dkcStreamRead(ptr,buffer,size,readsize); 00432 00433 00434 /* 00435 if(readsize > INT_MAX){ 00436 dkcmNOT_ASSEERT("INT_MAX byteも一気に読みこむな!ヽ(`Д´)ノムキィ"); 00437 return edk_FAILED; 00438 } 00439 t = (*readsize) - t; 00440 00441 //この条件はありえない。 00442 dkcmNOT_ASSERT(t < 0);*/ 00443 00444 00446 dkcStreamSeek(ptr,t,edkcStreamSeekSet); 00447 return r; 00448 } |
|
dkcStream.c の 450 行で定義されています。 参照先 DKC_STREAM, dkcStreamRead16(), dkcStreamSeek(), dkcStreamTell(), と edkcStreamSeekSet.
00450 { 00451 long t = dkcStreamTell(ptr); 00452 int r = dkcStreamRead16(ptr,buffer,size,readsize); 00453 dkcStreamSeek(ptr,t,edkcStreamSeekSet); 00454 return r; 00455 } |
|
dkcStream.c の 461 行で定義されています。 参照先 DKC_STREAM, dkcStreamRead32(), dkcStreamSeek(), dkcStreamTell(), と edkcStreamSeekSet.
00461 { 00462 long t = dkcStreamTell(ptr); 00463 int r = dkcStreamRead32(ptr,buffer,size,readsize); 00464 dkcStreamSeek(ptr,t,edkcStreamSeekSet); 00465 return r; 00466 } |
|
dkcStream.c の 471 行で定義されています。 参照先 DKC_STREAM, dkcStreamRead64(), dkcStreamSeek(), dkcStreamTell(), と edkcStreamSeekSet.
00471 { 00472 long t = dkcStreamTell(ptr); 00473 int r = dkcStreamRead64(ptr,buffer,size,readsize); 00474 dkcStreamSeek(ptr,t,edkcStreamSeekSet); 00475 return r; 00476 00477 } |
|
streamをシークする。fseekみたいなもの
dkcStream.c の 188 行で定義されています。 参照先 DKC_MEMORYSTREAM, DKC_STREAM, dkcMemoryStreamSeek(), edk_FAILED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, と dkc_Stream::mSig. 参照元 dkcCircularStreamWrite(), dkcCloseFileWithSignature(), dkcOpenFileWithSignature(), dkcStreamRef(), dkcStreamRef16(), dkcStreamRef32(), と dkcStreamRef64().
00188 { 00189 int r = edk_FAILED; 00190 switch(ptr->mMode){ 00191 case edkcStreamInitMemory: 00192 r = dkcMemoryStreamSeek((DKC_MEMORYSTREAM *)ptr->mSig,offset,origin); 00193 break; 00194 case edkcStreamInitFile: 00195 //成功したら0 == edk_SUCCEEDED; 00196 r = fseek((FILE *)ptr->mSig,offset,origin); 00197 break; 00198 } 00199 return r; 00200 00201 } |
|
streamの位置を取得する。 edkcStreamSeekSetからのオフセット値。edk_FAILEDだとエラー
dkcStream.c の 204 行で定義されています。 参照先 DKC_MEMORYSTREAM, DKC_STREAM, dkcMemoryStreamTell, edk_FAILED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, と dkc_Stream::mSig. 参照元 dkcCloseFileWithSignature(), dkcFileWithSignatureCheckCheat(), dkcFileWithSignatureRead(), dkcStreamRef(), dkcStreamRef16(), dkcStreamRef32(), dkcStreamRef64(), と ReadEOFCheck().
00204 { 00205 int r = edk_FAILED; 00206 switch(ptr->mMode){ 00207 case edkcStreamInitMemory: 00208 r = dkcMemoryStreamTell((DKC_MEMORYSTREAM *)ptr->mSig); 00209 case edkcStreamInitFile: 00210 r = ftell((FILE *)ptr->mSig); 00211 if(r==-1){ 00212 return edk_FAILED; 00213 } 00214 } 00215 return r; 00216 //dkcmNOT_ASSERT("dkcStreamTell failed"); 00217 } |
|
|
dkcStream.c の 592 行で定義されています。 参照先 DKC_STREAM, dkcStreamProcess16(), NULL, と StreamWrite(). 参照元 dkcFileWithSignatureWrite16().
00592 { 00593 return dkcStreamProcess16(ptr,(void *)buffer,size,StreamWrite,NULL); 00594 } |
|
dkcStream.c の 596 行で定義されています。 参照先 DKC_STREAM, dkcStreamProcess32(), NULL, と StreamWrite(). 参照元 dkcFileWithSignatureWrite32().
00596 { 00597 return dkcStreamProcess32(ptr,(void *)buffer,size,StreamWrite,NULL); 00598 00599 } |
|
dkcStream.c の 603 行で定義されています。 参照先 DKC_STREAM, dkcStreamProcess64(), NULL, と StreamWrite(). 参照元 dkcFileWithSignatureWrite64().
00603 { 00604 return dkcStreamProcess64(ptr,(void *)buffer,size,StreamWrite,NULL); 00605 } |
|
dkcStream.c の 492 行で定義されています。 参照先 BYTE, DKC_INLINE, DKC_STREAM, dkcmNOT_ASSERT, edk_BufferOverFlow, edk_FAILED, edk_SUCCEEDED, と dkc_Stream::mSig. 参照元 dkcStreamWrite().
00492 { 00493 int r = edk_FAILED; 00494 size_t tc,tsize; 00495 size_t count; 00496 const BYTE *tbuffer = (const BYTE *)buffer; 00497 FILE *fp; 00498 00499 tc = 0; 00500 count = 0; 00501 tsize = size; 00502 fp = (FILE *)ptr->mSig; 00503 00504 for(;;){ 00505 //error check 00506 if(ferror(fp)){ 00507 return edk_FAILED; 00508 } 00509 if(feof(fp)){ 00510 return edk_BufferOverFlow; 00511 } 00512 //write 00513 tc = fwrite(&tbuffer[count],1,tsize,fp); 00514 //update 00515 tsize -= tc; 00516 count += tc; 00517 00518 if(count == size){ 00519 r = edk_SUCCEEDED; 00520 break; 00521 } 00522 # ifdef DEBUG 00523 //ありえないエラーチェック 00524 dkcmNOT_ASSERT(count > size); 00525 # else 00526 if(count > size){ 00527 00528 break; 00529 } 00530 # endif 00531 00532 } 00533 00534 00535 return r; 00536 } |
|
ストリームの種類をきめる エンディアンをきめる dkcStream.c の 14 行で定義されています。 参照先 BOOL, BYTE, DKC_INLINE, DKC_STREAM, dkcIsLittleEndian(), dkcmNOT_ASSERT, edk_FAILED, edk_SUCCEEDED, edkcStreamBigEndian, edkcStreamInitFile, edkcStreamInitMemory, edkcStreamLittleEndian, edkcStreamProcessAsOrdered, edkcStreamProcessDefault, edkcStreamWriteErrorWhenEndianChange, FALSE, dkc_Stream::mChangeEndian, dkc_Stream::mMode, dkc_Stream::mProcessMode, と TRUE. 参照元 dkcAllocStream().
00014 { 00015 UINT stream_mode = 0; 00016 BYTE endian_mode = 0; 00017 UINT proc_mode = 0; 00018 00019 BOOL isLittle = dkcIsLittleEndian(); 00020 00021 00023 if(flag & edkcStreamInitMemory){ 00024 stream_mode = edkcStreamInitMemory; 00025 }else if(flag & edkcStreamInitFile){ 00026 stream_mode = edkcStreamInitFile; 00027 }else{ 00028 goto Error; 00029 } 00030 00031 00032 endian_mode = FALSE; 00034 if(flag & edkcStreamBigEndian){ 00035 //endianmode = edkcStreamBigEndian; 00036 if(isLittle){ 00037 endian_mode = TRUE; 00038 } 00039 }else if(flag & edkcStreamLittleEndian){ 00040 //endianmode = edkcStreamLittleEndian; 00041 if(!isLittle){ 00042 endian_mode = TRUE; 00043 } 00044 }else /*if(flag & edkcStreamInitDefaultEndian)*/{ 00045 if(isLittle){ 00046 //endianmode = edkcStreamLittleEndian; 00047 }else{ 00048 //endianmode = edkcStreamBigEndian; 00049 } 00050 } 00051 00052 //プロセスの詳細 設定 00053 proc_mode |= (flag & edkcStreamProcessDefault); 00054 if(0==proc_mode){ 00055 proc_mode |= (flag & edkcStreamProcessAsOrdered); 00056 00057 if(0==proc_mode){ 00058 proc_mode |= edkcStreamProcessAsOrdered; 00059 } 00060 } 00061 proc_mode |= (flag & edkcStreamWriteErrorWhenEndianChange ); 00062 00063 //update 00064 p->mMode = stream_mode; 00065 00066 dkcmNOT_ASSERT(proc_mode > UCHAR_MAX); 00067 p->mProcessMode = (BYTE)proc_mode; 00068 00069 p->mChangeEndian = endian_mode; 00070 00071 return edk_SUCCEEDED; 00072 Error: 00073 return edk_FAILED; 00074 00075 } |
|
dkcStream.c の 363 行で定義されています。 参照先 DKC_STREAM, と dkcStreamRead(). 参照元 dkcStreamRead16(), dkcStreamRead32(), と dkcStreamRead64().
00363 { 00364 return dkcStreamRead(ptr,buffer,size,(size_t *)hoge); 00365 } |
|
dkcStream.c の 562 行で定義されています。 参照先 DKC_STREAM, と dkcStreamWrite(). 参照元 dkcStreamWrite16(), dkcStreamWrite32(), と dkcStreamWrite64().
00562 { 00563 return dkcStreamWrite(ptr,buffer,size); 00564 } |