#include "dkcOSIndependent.h"#include "dkcMemoryStream.h"dkcStream.hのインクルード依存関係図

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

構成 | |
| struct | dkc_Stream |
| 汎用型ストリーム [詳細] | |
型定義 | |
| typedef dkc_Stream | DKC_STREAM |
| 汎用型ストリーム | |
| typedef int(WINAPI * | DKC_STREAM_PROCESS_TYPE )(DKC_STREAM *p, void *buffer, size_t size, void *data) |
列挙型 | |
| enum | edkcStream { edkcStreamSeekCurrent = SEEK_CUR, edkcStreamSeekEnd = SEEK_END, edkcStreamSeekSet = SEEK_SET, edkcStreamInitMemory = 1, edkcStreamInitFile = 2, edkcStreamDefaultEndian = 4, edkcStreamBigEndian = 8, edkcStreamLittleEndian = 16, edkcStreamProcessDefault = 32, edkcStreamProcessAsOrdered = 64, edkcStreamWriteErrorWhenEndianChange = 128 } |
関数 | |
| DKC_EXTERN DKC_STREAM *WINAPI | dkcAllocStream (UINT flag, const void *default_data, size_t size, const char *filename, const char *mode) |
| ストリーム領域を得る。 | |
| DKC_EXTERN DKC_STREAM *WINAPI | dkcAllocStreamMemoryType (UINT flag, const void *default_data, size_t size) |
| DKC_EXTERN DKC_STREAM *WINAPI | dkcAllocStreamFileType (UINT flag, const char *filename, const char *mode) |
| DKC_EXTERN DKC_STREAM *WINAPI | dkcAllocStreamEncouragementFileType (const char *filename, const char *mode, BOOL OrderFlag) |
| ファイル用ストリームの領域を得る時の奨励版の関数 | |
| DKC_EXTERN int WINAPI | dkcFreeStream (DKC_STREAM **ptr) |
| dkcAllocNewStream()で確保したストリーム領域を開放する | |
| DKC_EXTERN int WINAPI | dkcStreamSeek (DKC_STREAM *ptr, int offset, int origin) |
| streamをシークする。fseekみたいなもの edk_SUCCEEDEDで成功 それ以外はエラー | |
| DKC_EXTERN long WINAPI | dkcStreamTell (DKC_STREAM *ptr) |
| streamの位置を取得する。 edkcStreamSeekSetからのオフセット値。edk_FAILEDだとエラー | |
| DKC_EXTERN int WINAPI | dkcStreamClear (DKC_STREAM *ptr) |
| stream内をmemset(0)する。(seek位置も最初に戻される。 | |
| DKC_EXTERN int WINAPI | dkcStreamFlush (DKC_STREAM *ptr) |
| ストリーム内をフラッシュ(完全に書きこむ処理)する。 | |
| DKC_EXTERN BOOL WINAPI | dkcStreamEOF (DKC_STREAM *ptr) |
| EOFだとTRUE. | |
| DKC_EXTERN BOOL WINAPI | dkcStreamError (DKC_STREAM *ptr) |
| エラーだとTRUE | |
| DKC_EXTERN int WINAPI | dkcStreamRead (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| streamをリードする。freadみたいなもの | |
| DKC_EXTERN int WINAPI | dkcStreamRead8 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| sizeは1byte単位・・・ ぶっちゃけdkcStreamRead()と同じ動作。 エンディアン問題に積極的に取り組む為に edkcStreamWriteErrorWhenEndianChangeが指定されている場合は明示的にこちらを使用する。 | |
| DKC_EXTERN int WINAPI | dkcStreamRead16 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| DKC_EXTERN int WINAPI | dkcStreamRead32 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| DKC_EXTERN int WINAPI | dkcStreamRead64 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| DKC_EXTERN int WINAPI | dkcStreamRef (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| streamの中身を見る。 | |
| DKC_EXTERN int WINAPI | dkcStreamRef8 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| DKC_EXTERN int WINAPI | dkcStreamRef16 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| DKC_EXTERN int WINAPI | dkcStreamRef32 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| DKC_EXTERN int WINAPI | dkcStreamRef64 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| DKC_EXTERN int WINAPI | dkcStreamWrite (DKC_STREAM *ptr, const void *buffer, size_t size) |
| streamをライトする。fwriteみたいなもの | |
| DKC_EXTERN int WINAPI | dkcStreamWrite8 (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| DKC_EXTERN int WINAPI | dkcStreamWrite16 (DKC_STREAM *ptr, const void *buffer, size_t size) |
| DKC_EXTERN int WINAPI | dkcStreamWrite32 (DKC_STREAM *ptr, const void *buffer, size_t size) |
| DKC_EXTERN int WINAPI | dkcStreamWrite64 (DKC_STREAM *ptr, const void *buffer, size_t size) |
| DKC_EXTERN int WINAPI | dkcStreamProcess (DKC_STREAM *ptr, void *buffer, size_t size, DKC_STREAM_PROCESS_TYPE write_t, void *data) |
| DKC_EXTERN int WINAPI | dkcStreamProcess16 (DKC_STREAM *ptr, void *buffer, size_t size, DKC_STREAM_PROCESS_TYPE write_t, void *data) |
| DKC_EXTERN int WINAPI | dkcStreamProcess32 (DKC_STREAM *ptr, void *buffer, size_t size, DKC_STREAM_PROCESS_TYPE write_t, void *data) |
| DKC_EXTERN int WINAPI | dkcStreamProcess64 (DKC_STREAM *ptr, void *buffer, size_t size, DKC_STREAM_PROCESS_TYPE write_t, void *data) |
|
|
|
dkcStream.h の 225 行で定義されています。 参照元 dkcStreamProcess(), dkcStreamProcess16(), dkcStreamProcess32(), と dkcStreamProcess64(). |
|
|
dkcStream.h の 38 行で定義されています。
00038 {
00040 edkcStreamSeekCurrent = SEEK_CUR,
00042 edkcStreamSeekEnd = SEEK_END,
00044 edkcStreamSeekSet = SEEK_SET,
00046 edkcStreamInitMemory = 1,
00048 edkcStreamInitFile = 2,
00050 edkcStreamDefaultEndian = 4,
00052 edkcStreamBigEndian = 8,
00054 edkcStreamLittleEndian = 16,
00056 edkcStreamProcessDefault = 32,
00058 edkcStreamProcessAsOrdered = 64,
00062 edkcStreamWriteErrorWhenEndianChange = 128,
00063
00064
00065 };
|
|
||||||||||||||||||||||||
|
ストリーム領域を得る。
dkcStream.c の 108 行で定義されています。 参照先 DKC_STREAM, dkcAllocate(), dkcAllocMemoryStream(), dkcFOpen(), dkcFree(), dkcStreamWrite(), DKUTIL_FAILED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, dkc_Stream::mSig, NULL, と SetStreamInfo().
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 行で定義されています。
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 行で定義されています。
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 行で定義されています。
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 }
|
|
||||||||||||||||||||
|
sizeは1byte単位・・・ ぶっちゃけdkcStreamRead()と同じ動作。 エンディアン問題に積極的に取り組む為に edkcStreamWriteErrorWhenEndianChangeが指定されている場合は明示的にこちらを使用する。
|
|
||||||||||||||||||||
|
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みたいなもの edk_SUCCEEDEDで成功 それ以外はエラー
dkcStream.c の 188 行で定義されています。
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 }
|
|
||||||||||||||||
|
streamをライトする。fwriteみたいなもの 書き込み指定がこうなっているので・・・。 dkcStream.c の 538 行で定義されています。
00539 {
00540 int r = edk_FAILED;
00541
00542 UINT proc_flag = ptr->mProcessMode;
00544 if(proc_flag & edkcStreamWriteErrorWhenEndianChange){
00545 if(ptr->mChangeEndian){
00546 return edk_Not_Satisfactory;
00547 }
00548 }
00549
00550 switch(ptr->mMode){
00551 case edkcStreamInitMemory:
00552 r = dkcMemoryStreamWrite((DKC_MEMORYSTREAM *)ptr->mSig,buffer,size);
00553 break;
00554 case edkcStreamInitFile:
00555 r = dkcStreamWriteObayAnOrder(ptr,buffer,size);
00556 break;
00557 }
00558
00559 return r;
00560 }
|
|
||||||||||||||||
|
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 }
|
|
||||||||||||||||||||
|
|
1.3.6