#include "dkcOSIndependent.h"
#include "dkcSJISFileSystem.h"
#include "dkcStdio.h"
#include "dkcString.h"
#include "dkcThreadLock.h"
#include "dkcSingleList.h"
#include "dkcStream.h"
dkcSJISFileSystem.cのインクルード依存関係図
マクロ定義 | |
#define | DKUTIL_C_SJIS_FILESYSTEM_C |
#define | MAX_PATH_CHECK(dsize) |
関数 | |
DKC_INLINE BOOL | jms1 (int c) |
DKC_INLINE BOOL | jms2 (int c) |
DKC_EXTERN int WINAPI | dkcIsShiftJIS (const char *str, int nPos) |
DKC_INLINE int | isJMS (const char *str, int nPos) |
DKC_INLINE char * | strtail (const char *stringg) |
文字列末尾の文字 '' の位置を返す | |
char *WINAPI | dkcGetFileExtension (const char *PathName) |
パス名から、拡張子の開始位置を取得する ファイル名の末尾からファイル名の最後の '.' までを、拡張子と判断する | |
BOOL WINAPI | dkcIsEffectivePath (const char *path, size_t size) |
BOOL WINAPI | dkcIsRelativityPath (const char *path) |
BOOL WINAPI | dkcIsAbsolutelyPath (const char *path) |
BOOL WINAPI | dkcIsTailPathSep (const char *src, size_t dlen) |
srcの一番後ろににがついていたらTRUE | |
int WINAPI | dkcPushBackPathSep (char *dest, size_t dlen, size_t size) |
path separatorを挿入する必要があり、挿入出来たらTRUE | |
int WINAPI | dkcDirectoryConcatenate (char *dest, size_t dlen, size_t dsize, const char *src) |
int WINAPI | dkcCurrentDirectoryConcatenate (char *dest, size_t dsize, const char *src) |
int | ToAbsolutelyLogic (char *dest, size_t dsize, const char *src) |
int WINAPI | dkcToAbsolutelyPath (char *dest, size_t dsize, const char *src, size_t ssize) |
パスを正規化(相対パスから絶対パス)する関数 | |
DKC_PATHSTRING *WINAPI | dkcAllocPathString (const char *path) |
int WINAPI | dkcFreePathString (DKC_PATHSTRING **ptr) |
size_t WINAPI | dkcPathStringSize (const DKC_PATHSTRING *p) |
const char *WINAPI | dkcPathStringPointer (const DKC_PATHSTRING *p) |
int WINAPI | dkcPathStringDevideBegin (DKC_PATHSTRING *ptr, char *buff, size_t size) |
int WINAPI | dkcPathStringDevideNext (DKC_PATHSTRING *ptr, char *buff, size_t size) |
void WINAPI | dkcPathStringDevideEnd (DKC_PATHSTRING *ptr) |
int WINAPI | dkcPathStringDevideBegin_Logic (DKC_PATHSTRING *ptr, size_t *count, char *buff, size_t size) |
dkcPathStringDevideBegin() | |
int WINAPI | dkcPathStringDevideNext_Logic (DKC_PATHSTRING *ptr, size_t *count, char *buff, size_t size) |
dkcPathStringDevideNext() | |
void WINAPI | dkcPathStringDevideEnd_Logic (size_t *count) |
dkcPathStringDevideEnd() | |
int WINAPI | dkcPathStringElementInsert_Logic (DKC_PATHSTRING *ptr, size_t count, const char *src, size_t len) |
パスの要素を挿入する。(正規化はしない lenは文字数 | |
int WINAPI | dkcPathStringElementErase_Logic (DKC_PATHSTRING *ptr, size_t count) |
int WINAPI | dkcPathStringElementReplace_Logic (DKC_PATHSTRING *ptr, size_t count, const char *src, size_t len) |
パスの要素を置換する。(正規化はしない lenは文字数 | |
int | dkcPathStringNormalizeCopyLogic (DKC_PATHSTRING *ptr, const char *buff, size_t size, int(WINAPI *function__)(DKC_STRING *, const char *, size_t)) |
int WINAPI | dkcPathStringCopy (DKC_PATHSTRING *ptr, const char *buff, size_t size) |
パスを正規化して入れる。 | |
int WINAPI | dkcPathStringNormalizeConcatenateLogic (DKC_PATHSTRING *ptr, const char *buff, size_t size) |
int WINAPI | dkcPathStringConcatenate (DKC_PATHSTRING *ptr, const char *buff, size_t size) |
パスを正規化して繋げる。 | |
int WINAPI | dkcPathStringGetDrive (DKC_PATHSTRING *ptr, char *buff, size_t size) |
int WINAPI | dkcPathStringGetFileExtension (DKC_PATHSTRING *ptr, char *buff, size_t size) |
int WINAPI | dkcPathStringGetFileName (DKC_PATHSTRING *ptr, char *buff, size_t size) |
int WINAPI | dkcPathStringGetDirectory (DKC_PATHSTRING *ptr, char *buff, size_t size) |
BOOL WINAPI | dkcFileExist (const char *filename) |
ULONG WINAPI | dkcFileSize (const char *filename) |
BOOL WINAPI | dkcFileSize64 (const char *str, DWORD *high, DWORD *low) |
BOOL WINAPI | dkcSetCurrentDirectory (const char *filename) |
BOOL WINAPI | dkcGetCurrentDirectory (char *buff, size_t size) |
BOOL WINAPI | dkcCreateDirectoryLogic (const char *dir, const void *ptr) |
int WINAPI | dkcCreateDirectory (const char *pPath) |
BOOL WINAPI | dkcFileCopy (const char *dest, const char *src) |
BOOL WINAPI | dkcFileCopyEx (const char *dest, const char *src, size_t inner_buffer_size, BOOL bThreadLock) |
BOOL WINAPI | dkcFileRemove (const char *filename) |
BOOL WINAPI | dkcFileRename (const char *oldname, const char *newname) |
BOOL WINAPI | dkcCreateZeroByteFile (const char *filename, BOOL rewrite) |
int WINAPI | dkcFileBinaryCompare (const char *filename1, const char *filename2) |
int WINAPI | dkcMemoryToFile (const char *filename, const void *buff, size_t size, UINT flag) |
buffの内容をfilenameファイルに書きこむ | |
int WINAPI | dkcFileToMemory (const char *filename, void *buff, size_t size) |
filenameの内容をbuffに読みこむ | |
DKC_FINDFILE *WINAPI | dkcAllocFindFile () |
int WINAPI | dkcFreeFindFile (DKC_FINDFILE **ptr) |
int WINAPI | dkcFindFirstFile (DKC_FINDFILE *ptr, const char *target) |
int WINAPI | dkcFindNextFile (DKC_FINDFILE *ptr) |
int WINAPI | dkcFindClose (DKC_FINDFILE *ptr) |
int WINAPI | dkcFindFileGetFileName (DKC_FINDFILE *ptr, char *buff, size_t buffsize) |
BOOL WINAPI | dkcFindFileIsFolder (DKC_FINDFILE *ptr) |
BOOL WINAPI | dkcFindFileIsDot (DKC_FINDFILE *ptr) |
BOOL WINAPI | dkcFindFileIsNormalFile (DKC_FINDFILE *ptr) |
BOOL WINAPI | dkcFindFileIsReadOnly (DKC_FINDFILE *ptr) |
void WINAPI | dkcFindFileSize (DKC_FINDFILE *ptr, ULONG *High, ULONG *Low) |
dkcSJISFileSystem.c で定義されています。
|
dkcSJISFileSystem.c の 8 行で定義されています。 |
|
値: {\ dkcmNOT_ASSERT(dsize < dkcdMAXPATH_BUFFER);\ if(dsize < dkcdMAXPATH_BUFFER){\ return edk_BufferOverFlow;\ }\ } dkcSJISFileSystem.c の 181 行で定義されています。 |
|
dkcSJISFileSystem.c の 1620 行で定義されています。 参照先 DKC_FINDFILE, と dkcAllocate().
01621 { 01622 DKC_FINDFILE *p; 01623 p = (DKC_FINDFILE *)dkcAllocate(sizeof(DKC_FINDFILE)); 01624 return p; 01625 } |
|
dkcSJISFileSystem.c の 327 行で定義されています。 参照先 DKC_PATHSTRING, dkcAllocate(), dkcAllocString(), dkcdMAXPATH_BUFFER, dkcFree(), dkcFreeString(), dkcIsNativePathString(), dkcPathStringCopy(), FALSE, dkc_PathString::mIterateCount, dkc_PathString::mString, と NULL.
00328 { 00329 DKC_PATHSTRING *p; 00330 size_t len; 00331 /*if(NULL==path){ 00332 return NULL; 00333 }*/ 00334 00335 p = (DKC_PATHSTRING *)dkcAllocate(sizeof(DKC_PATHSTRING)); 00336 if(NULL==p) return NULL; 00337 00338 p->mString = dkcAllocString(dkcdMAXPATH_BUFFER + 1);//このサイズじゃないとダメ 00339 if(NULL==p->mString) goto Error; 00340 00341 //パス名をコピー 00342 if(path){ 00343 len = strlen(path); 00344 //ネイティブなパスを入れる。 00345 if(FALSE==dkcIsNativePathString(path,len)){ 00346 goto Error; 00347 } 00348 if(DKUTIL_FAILED(dkcPathStringCopy(p,path,len))){ 00349 goto Error; 00350 } 00351 } 00352 p->mIterateCount = 0; 00353 00354 return p; 00355 Error: 00356 if(p){ 00357 dkcFreeString(&p->mString); 00358 } 00359 dkcFree((void **)&p); 00360 return NULL; 00361 } |
|
dkcSJISFileSystem.c の 828 行で定義されています。 参照先 BOOL, dkcCreateDirectoryLogic(), dkcdMAXPATH_BUFFER, dkcdMAXPATH_LEN, dkcdPATH_SEP, dkcmIS_INVALID_FOLDERNAME_CHAR, dkcmIS_PATH_SEP, dkcmIsSJIS1, dkcmIsSJIS2, dkcmNOT_ASSERT, dkcmNOT_ASSERT_MESSAGE, FALSE, と NULL.
00829 { 00830 BOOL result; 00831 char work[dkcdMAXPATH_BUFFER]; 00832 unsigned long n = 0; 00833 unsigned long len = strlen(pPath); 00834 00835 #ifdef WIN32//sjis support 00836 SECURITY_ATTRIBUTES attr; 00837 00838 DKUTIL_STRUCTURE_INIT(attr); 00839 NULL_CHAR_ARRAY(work); 00840 00841 //error check 00842 if(dkcdMAXPATH_LEN < len){ 00843 dkcmNOT_ASSERT_MESSAGE("pathが長すぎる。",pPath); 00844 return edk_FAILED; 00845 } 00846 if(0==len ){ 00847 return edk_ArgumentException; 00848 } 00849 00850 //まずは一つ目を撃破 00851 if ( dkcmIsSJIS1(pPath[n]) || ! dkcmIS_INVALID_FOLDERNAME_CHAR(pPath[n]) ) 00852 {//SJISの1文字目かINVALIDな値では無かったら。 00853 work[n] = pPath[n]; 00854 if(1==len){ 00855 //フォルダ作成 00856 attr.nLength = sizeof(SECURITY_ATTRIBUTES); 00857 attr.lpSecurityDescriptor = NULL; 00858 attr.bInheritHandle = FALSE; 00859 00860 result = dkcCreateDirectoryLogic( work, &attr ); 00861 00862 dkcmNOT_ASSERT(FALSE==result && "directoryを作れなかった" ); 00863 return edk_SUCCEEDED; 00864 } 00865 } 00866 n++; 00867 //二つ目から開始 00868 while ( n < len ) 00869 { 00870 //フォルダ名取得 00871 while ( n < len ) 00872 { 00873 00874 if(! dkcmIsSJIS1(pPath[n - 1]) && ! dkcmIsSJIS2(pPath[n]) ) 00875 {//SJISではない!! 00876 if ( ( dkcmIS_PATH_SEP(pPath[n]) ) /*&& pPath[n] != '\0'*//*(n != '\0')*/ ) 00877 { 00878 if ( work[n-1] != ':' ) 00879 {//driveを読み込ませたくないらしい。 00880 break; 00881 } 00882 } 00883 else if(dkcmIS_INVALID_FOLDERNAME_CHAR(pPath[n])) 00884 {//SJIS問題をクリアしたのに間違いだった 00885 return edk_FAILED; 00886 } 00887 } 00888 00889 work[n] = pPath[n]; 00890 n++; 00891 } 00892 work[n] = '\0'; 00893 00894 //フォルダ作成 00895 attr.nLength = sizeof(SECURITY_ATTRIBUTES); 00896 attr.lpSecurityDescriptor = NULL; 00897 attr.bInheritHandle = FALSE; 00898 00899 result = dkcCreateDirectoryLogic( work, &attr ); 00900 00901 //dkcmNOT_ASSERT("directoryを作れなかった" && FALSE==result); 00902 if(FALSE==result){ 00903 return edk_FAILED; 00904 } 00905 work[n++] = dkcdPATH_SEP; 00906 } 00907 #else //no support sjis 00908 NULL_CHAR_ARRAY(work); 00909 00910 //error check 00911 if(dkcdMAXPATH_LEN < len){ 00912 dkcmNOT_ASSERT_MESSAGE("pathが長すぎる。",pPath); 00913 return edk_FAILED; 00914 } 00915 if(0==len ){ 00916 return edk_ArgumentException; 00917 } 00918 00919 while ( n < len ) 00920 { 00921 //フォルダ名取得 00922 while ( n < len ) 00923 { 00924 if ( ( dkcmIS_PATH_SEP(pPath[n]) ) && (n != '\0') ) 00925 { 00926 if ( work[n-1] != ':' )//Linuxのドライブのパスはコレデいいのかな? 00927 { 00928 break; 00929 } 00930 } 00931 work[n] = pPath[n]; 00932 n++; 00933 } 00934 work[n] = '\0'; 00935 00936 result = dkcCreateDirectoryLogic( work,NULL ); 00937 00938 //dkcmNOT_ASSERT("directoryを作れなかった" && FALSE==result); 00939 if(FALSE==result){ 00940 return edk_FAILED; 00941 } 00942 work[n++] = dkcdPATH_SEP; 00943 } 00944 00945 #endif 00946 00947 return edk_SUCCEEDED; 00948 } |
|
dkcSJISFileSystem.c の 817 行で定義されています。 参照先 BOOL. 参照元 dkcCreateDirectory().
00817 { 00818 #ifdef WIN32 00819 //return (0 == _mkdir( dir )); 00820 return (0 != CreateDirectory(dir,(SECURITY_ATTRIBUTES *)ptr)); 00821 #else 00822 return (0 == mkdir( dir )); 00823 #endif 00824 } |
|
dkcSJISFileSystem.c の 1075 行で定義されています。 参照先 BOOL, dkcFileExist(), FALSE, と TRUE.
01076 { 01077 FILE *fp; 01078 int r = FALSE; 01079 if(FALSE==dkcFileExist(filename) || TRUE==rewrite){ 01080 fp = fopen(filename,"wb"); 01081 if(!fp){ 01082 return r; 01083 } 01084 fclose(fp); 01085 r = TRUE; 01086 } 01087 return r; 01088 } |
|
dkcSJISFileSystem.c の 169 行で定義されています。 参照先 dkcDirectoryConcatenate(), dkcdMAXPATH_LEN, dkcGetCurrentDirectory(), と dkcmNOT_ASSERT.
00170 { 00171 //size_t len; 00172 //int point; 00173 00174 dkcmNOT_ASSERT(dsize <= dkcdMAXPATH_LEN);//<=はNULL文字も含むため。 00175 00176 dkcGetCurrentDirectory(dest,dsize); 00177 00178 00179 return dkcDirectoryConcatenate(dest,strlen(dest),dsize,src); 00180 } |
|
dkcSJISFileSystem.c の 147 行で定義されています。 参照先 dkc_strcat_amap(), dkcmNOT_ASSERT, と dkcPushBackPathSep(). 参照元 dkcCurrentDirectoryConcatenate().
00147 { 00148 //int point; 00149 //error check 00150 dkcmNOT_ASSERT(dlen + 2 > dsize); 00151 if(dlen + 2 > dsize){ 00152 return edk_FAILED; 00153 } 00154 00155 /*point = dkcSJIS_StrChrSearchTail(dest,dlen,dkcdPATH_SEP); 00156 if(point != -1 && (size_t)point != dlen) 00157 {//path separatorが見つかり、それがdestの最期に無い時 00158 if(!dkcmIS_PATH_SEP(src[0]) ) 00159 {//path separatorで無い時 00160 //path 区切り文字を付加してやる。 00161 dest[dlen ] = dkcdPATH_SEP; 00162 dest[dlen + 1] = '\0';//こいつを忘れてはいけない。 00163 } 00164 }*/ 00165 dkcPushBackPathSep(dest,dlen,dsize); 00166 return dkc_strcat_amap(dest,dsize,dlen,src,strlen(src)); 00167 } |
|
dkcSJISFileSystem.c の 1091 行で定義されています。 参照先 BOOL, BYTE, dkc_memcmp(), DKC_STREAM, dkcAllocStreamFileType(), dkcFileExist(), dkcFileSize64(), dkcFreeStream(), dkcmNOT_ASSERT, dkcStreamEOF(), dkcStreamError(), dkcStreamRead(), DWORD, edkcStreamDefaultEndian, edkcStreamProcessAsOrdered, FALSE, と NULL.
01092 { 01093 BOOL r = FALSE; 01094 01095 //ファイルの存在を確かめる 01096 r = dkcFileExist(filename1); 01097 if(r==FALSE){ 01098 return edk_ArgumentException; 01099 } 01100 r = dkcFileExist(filename2); 01101 if(r==FALSE){ 01102 return edk_ArgumentException; 01103 } 01104 01105 //ファイルのサイズを確かめる 01106 { 01107 DWORD high,low,high2,low2; 01108 r = dkcFileSize64(filename1,&high,&low); 01109 if(r==FALSE){ 01110 return edk_ArgumentException; 01111 } 01112 r = dkcFileSize64(filename2,&high2,&low2); 01113 if(r==FALSE){ 01114 return edk_ArgumentException; 01115 } 01116 r = (high==high2 && low==low2); 01117 if(FALSE==r){//ファイルサイズが違った 01118 return edk_FAILED; 01119 } 01120 01121 } 01122 01123 01124 { 01125 DKC_STREAM *s1 = NULL,*s2=NULL; 01126 BYTE *buffer1 = NULL,*buffer2 = NULL; 01127 size_t buffsize = 1024 * 52; 01128 01129 01130 //initialize 01131 01132 //ファイルをオープン 01133 r = edk_LogicError; 01134 01135 s1 = dkcAllocStreamFileType( 01136 edkcStreamDefaultEndian | edkcStreamProcessAsOrdered, 01137 filename1,"rb"); 01138 if(NULL==s1){ 01139 return edk_LogicError; 01140 } 01141 01142 s2 = dkcAllocStreamFileType( 01143 edkcStreamDefaultEndian | edkcStreamProcessAsOrdered, 01144 filename2,"rb"); 01145 01146 if(NULL==s2){ 01147 goto Error; 01148 } 01149 01150 //バッファを用意 01151 r = edk_OutOfMemory; 01152 01153 buffer1 = malloc(buffsize); 01154 if(NULL==buffer1){ 01155 01156 goto Error; 01157 } 01158 buffer2 = malloc(buffsize); 01159 if(NULL==buffer2){ 01160 goto Error; 01161 } 01162 01163 //process 01164 01165 for(;;){ 01166 size_t readsize1,readsize2; 01167 BOOL re1,re2; 01168 01169 dkcStreamRead(s1,buffer1,buffsize,&readsize1); 01170 dkcStreamRead(s2,buffer2,buffsize,&readsize2); 01171 01172 re1 = dkcStreamError(s1); 01173 re2 = dkcStreamError(s2); 01174 if(re1 || re2){ 01175 r = edk_LogicError; 01176 goto Error; 01177 } 01178 01179 01180 dkcmNOT_ASSERT(readsize1 != readsize2); 01181 01182 01183 r = dkc_memcmp(buffer1,buffsize,buffer2,buffsize); 01184 if(DKUTIL_FAILED(r)){ 01185 r = edk_FAILED; 01186 break; 01187 } 01188 re1 = dkcStreamEOF(s1); 01189 re2 = dkcStreamEOF(s2); 01190 if(re1 && re2){ 01191 r = edk_SUCCEEDED; 01192 break; 01193 } 01194 else if(FALSE==re1 && FALSE==re2) 01195 { 01196 continue; 01197 } 01198 else 01199 { 01200 r = edk_LogicError; 01201 goto Error; 01202 } 01203 } 01204 Error: 01205 if(buffer2){ 01206 free(buffer2); 01207 } 01208 if(buffer1){ 01209 free(buffer1); 01210 } 01211 dkcFreeStream(&s2); 01212 dkcFreeStream(&s1); 01213 } 01214 01215 return r; 01216 } |
|
dkcSJISFileSystem.c の 950 行で定義されています。 参照先 BOOL, dkcFileCopyEx(), と FALSE.
00950 { 00951 return dkcFileCopyEx(dest,src,1024 * 64,FALSE); 00952 } |
|
dkcSJISFileSystem.c の 954 行で定義されています。 参照先 BOOL, dkcAllocThreadLock(), dkcCreateEmptyFile(), dkcFClose(), dkcFileSize(), dkcFOpen(), dkcFreeThreadLock(), dkcLoadBinary(), dkcmFORCE_NOT_ASSERT, dkcSaveBinary(), dkcThreadLock_Lock(), dkcThreadLock_Unlock(), FALSE, NULL, ODS, と TRUE. 参照元 dkcFileCopy().
00956 { 00957 void *buff; 00958 FILE *srcf,*destf; 00959 size_t filesize;//ファイルサイズ 00960 size_t readed;//読み込んだデータ 00961 size_t count;//count 00962 size_t i; 00963 size_t rest;//残り 00964 int result = FALSE;//戻り値 00965 DKC_THREAD_LOCK *lock = NULL; 00966 00967 00968 if(NULL==dest || NULL==src){ 00969 return FALSE; 00970 } 00971 if(inner_buffer_size <= 1024){ 00972 inner_buffer_size = 1024; 00973 } 00974 00975 //バッファの準備 00976 buff = malloc(inner_buffer_size); 00977 if(NULL==buff){ 00978 inner_buffer_size = 1024 * 256; 00979 buff = malloc(inner_buffer_size); 00980 if(NULL==buff) 00981 return FALSE; 00982 } 00983 //thread lock 00984 if(bThreadLock){ 00985 lock = dkcAllocThreadLock(); 00986 if(NULL==lock){ 00987 goto Error; 00988 } 00989 dkcThreadLock_Lock(lock); 00990 } 00991 //ちっちゃい場合 00992 filesize = dkcFileSize(src); 00993 for(;;) 00994 {//non loop 00995 if(0 == filesize) 00996 {//ファイルサイズが0の場合 00997 dkcCreateEmptyFile(dest); 00998 break; 00999 } 01000 if(filesize < inner_buffer_size) 01001 {//ファイルサイズがバッファに収まってしまう場合。 01002 if(DKUTIL_FAILED(dkcLoadBinary(buff,filesize,src,&readed))) 01003 { 01004 goto Error; 01005 } 01006 # ifdef DEBUG 01007 if(readed != filesize){ 01008 ODS("readed != filesize why?\n"); 01009 } 01010 # endif 01011 dkcSaveBinary(buff,filesize,dest); 01012 break; 01013 } 01014 //バッファを使わなければコピーできない場合。 01015 01016 srcf = dkcFOpen(src,"rb"); 01017 if(NULL==srcf) goto Error; 01018 destf = dkcFOpen(dest,"wb"); 01019 if(NULL==destf) goto Error; 01020 01021 //ループする回数を計算 01022 count = filesize / inner_buffer_size; 01023 01024 for(i=0;i<count;i++){ 01025 dkcmFORCE_NOT_ASSERT(1 != fread(buff,inner_buffer_size,1,srcf)); 01026 dkcmFORCE_NOT_ASSERT(1 != fwrite(buff,inner_buffer_size,1,destf)); 01027 } 01028 01029 rest = filesize - (count * inner_buffer_size); 01030 01031 //残りを出力 01032 dkcmFORCE_NOT_ASSERT(rest != fread(buff,1,rest,srcf)); 01033 dkcmFORCE_NOT_ASSERT(rest != fwrite(buff,1,rest,destf)); 01034 01035 //close 01036 dkcFClose(&srcf); 01037 dkcFClose(&destf); 01038 01039 break; 01040 }//end of for 01041 01042 01043 result = TRUE; 01044 Error: 01045 if(bThreadLock){ 01046 if(lock){ 01047 dkcThreadLock_Unlock(lock); 01048 dkcFreeThreadLock(&lock); 01049 } 01050 } 01051 if(buff){ 01052 free(buff);buff=NULL; 01053 } 01054 return result; 01055 } |
|
dkcSJISFileSystem.c の 737 行で定義されています。 参照元 dkcCreateZeroByteFile(), dkcFileBinaryCompare(), dkcIsEffectivePath(), と dkcMemoryToFile().
00737 { 00738 struct stat s; 00739 if(!filename) return FALSE; 00740 //return (stat(filename,&s)==0) ? TRUE : FALSE; 00741 return (stat(filename,&s)==0); 00742 } |
|
ファイルを削除する。
dkcSJISFileSystem.c の 1057 行で定義されています。 参照先 BOOL.
01058 { 01059 #ifdef WIN32 01060 return (0 != DeleteFile(filename)); 01061 //return (0==remove(filename)); 01062 #else 01063 return (0==remove(filename)); 01064 #endif 01065 } |
|
dkcSJISFileSystem.c の 1067 行で定義されています。 参照先 BOOL.
01067 { 01068 #ifdef WIN32 01069 return (0==rename(oldname,newname)); 01070 #else 01071 return (0==rename(oldname,newname)); 01072 #endif 01073 } |
|
dkcSJISFileSystem.c の 744 行で定義されています。 参照元 dkcAllocDeserialize(), と dkcFileCopyEx().
00744 { 00745 struct stat s;//s 00746 if(!filename) return 0; 00747 return (stat(filename,&s)==0) ? (ULONG)s.st_size : 0; 00748 } |
|
dkcSJISFileSystem.c の 749 行で定義されています。 参照先 BOOL, FALSE, NULL, と TRUE. 参照元 dkcFileBinaryCompare(), と dkcFileToMemory().
00749 { 00750 #ifdef WIN32 00751 WIN32_FIND_DATA findData; 00752 HANDLE hFind=NULL; 00753 // ファイルサイズ取得 00754 if((hFind = FindFirstFile(str,&findData)) == INVALID_HANDLE_VALUE){ 00755 return FALSE; 00756 } 00757 00758 //ファイルのサイズをヴちこむ 00759 *high = findData.nFileSizeHigh; 00760 *low = findData.nFileSizeLow; 00761 FindClose(hFind); 00762 return TRUE; 00763 #else 00764 00765 #endif 00766 } |
|
filenameの内容をbuffに読みこむ
dkcSJISFileSystem.c の 1251 行で定義されています。 参照先 DKC_STREAM, dkcAllocStreamFileType(), dkcFileSize64(), dkcFreeStream(), dkcStreamRead(), DWORD, edkcStreamDefaultEndian, edkcStreamProcessAsOrdered, FALSE, と NULL.
01252 { 01253 DWORD h,l; 01254 DKC_STREAM *p; 01255 int r = edk_FAILED; 01256 if(FALSE==dkcFileSize64(filename,&h,&l)){ 01257 return edk_FileNotFound; 01258 } 01259 01260 if(h != 0 || ( (size_t)(l) > size )) 01261 {//DWORD_MAX以上のサイズのファイルをメモリには読みこめないですよ^^; 01262 return edk_BufferOverFlow; 01263 } 01264 01265 p = dkcAllocStreamFileType( 01266 edkcStreamDefaultEndian | edkcStreamProcessAsOrdered, 01267 filename,"rb"); 01268 01269 if(NULL==p){ 01270 return edk_FAILED; 01271 } 01272 if(DKUTIL_FAILED(dkcStreamRead(p,buff,l,(size_t *)&h))){ 01273 goto End; 01274 } 01275 if(h != l){ 01276 goto End; 01277 } 01278 r = edk_SUCCEEDED; 01279 End: 01280 dkcFreeStream(&p); 01281 return r; 01282 } |
|
FindClose() dkcSJISFileSystem.c の 1682 行で定義されています。 参照先 DKC_FINDFILE, dkc_FindFile::mDirent, dkc_FindFile::mHandle, と NULL.
01683 { 01684 #ifdef WIN32 01685 if(INVALID_HANDLE_VALUE == ptr->mHandle){ 01686 return edk_FAILED; 01687 } 01688 FindClose(ptr->mHandle); 01689 ptr->mHandle = INVALID_HANDLE_VALUE;//しっかりリセット 01690 #else 01691 if(0 == ptr->mHandle){ 01692 return edk_FAILED; 01693 } 01694 closedir(ptr->mHandle); 01695 ptr->mHandle = 0;//しっかりリセット 01696 ptr->mDirent = NULL; 01697 #endif 01698 01699 return edk_SUCCEEDED; 01700 01701 } |
|
dkcSJISFileSystem.c の 1703 行で定義されています。 参照先 DKC_FINDFILE, dkc_strcpy(), dkc_FindFile::mDirent, と NULL.
01704 { 01705 int r; 01706 size_t len; 01707 #ifdef WIN32 01708 len = strlen(ptr->mFindData.cFileName); 01709 if(0 == len) return edk_FAILED; 01710 r = dkc_strcpy(buff,buffsize,ptr->mFindData.cFileName,len); 01711 #else 01712 if(NULL==ptr->mDirent) 01713 {//呼び出しが間違っているよ^^; 01714 return edk_LogicError; 01715 } 01716 len = strlen(ptr->mDirent.d_name); 01717 if(0 == len) return edk_FAILED; 01718 r = dkc_strcpy(buff,buffsize,ptr->mDirent.d_name,len); 01719 #endif 01720 return r; 01721 } |
|
dkcSJISFileSystem.c の 1739 行で定義されています。 参照先 BOOL, DKC_FINDFILE, と strcmp().
|
|
dkcSJISFileSystem.c の 1723 行で定義されています。 参照先 BOOL, DKC_FINDFILE, と strcmp().
|
|
dkcSJISFileSystem.c の 1751 行で定義されています。 参照先 BOOL, と DKC_FINDFILE.
01752 { 01753 #ifdef WIN32 01754 return (ptr->mFindData.dwFileAttributes & FILE_ATTRIBUTE_NORMAL); 01755 #else 01756 01757 #endif 01758 } |
|
dkcSJISFileSystem.c の 1760 行で定義されています。 参照先 BOOL, と DKC_FINDFILE.
01760 { 01761 #ifdef WIN32 01762 return (ptr->mFindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY); 01763 #else 01764 01765 #endif 01766 } |
|
dkcSJISFileSystem.c の 1767 行で定義されています。 参照先 DKC_FINDFILE.
01767 { 01768 #ifdef WIN32 01769 *High = ptr->mFindData.nFileSizeHigh; 01770 *Low = ptr->mFindData.nFileSizeLow; 01771 #else 01772 01773 #endif 01774 01775 } |
|
Windowsで言うFindFirstFile()のラッパー UNIXやLINUXでも動くかも? dkcSJISFileSystem.c の 1634 行で定義されています。 参照先 DKC_FINDFILE, dkc_FindFile::mHandle, と NULL.
01634 { 01635 #ifdef WIN32 01636 ptr->mHandle = 01637 FindFirstFileA( target, &(ptr->mFindData) ); 01638 if(ptr->mHandle == INVALID_HANDLE_VALUE){ 01639 return edk_FAILED; 01640 } 01641 #else 01642 ptr->mHandle = opendir( target ); 01643 if(NULL==ptr->mHandle){ 01644 return edk_FAILED; 01645 } 01646 01647 #endif 01648 return edk_SUCCEEDED; 01649 } |
|
FindNextFile() dkcSJISFileSystem.c の 1651 行で定義されています。 参照先 DKC_FINDFILE, dkc_FindFile::mDirent, と dkc_FindFile::mHandle.
01651 { 01652 # ifdef WIN32 01653 if ( 0 == FindNextFileA( ptr->mHandle, &(ptr->mFindData) )) 01654 { 01655 if ( GetLastError() == ERROR_NO_MORE_FILES ) 01656 {//なんだ、もう無いじゃん。 01657 return edk_EndProcess; 01658 } 01659 else//最悪のパターン 01660 { 01661 return edk_FAILED; 01662 } 01663 } 01664 # else 01665 errno = 0; 01666 ptr->mDirent = readdir( ptr->mHandle ); 01667 if ( ptr->mDirent == 0 ) 01668 { 01669 if ( errno == 0 ) 01670 {//もう無いよ^^; 01671 return edk_EndProcess; 01672 } 01673 else//最悪のパターン 01674 { 01675 return edk_FAILED; 01676 } 01677 } 01678 # endif 01679 return edk_SUCCEEDED; 01680 } |
|
dkcSJISFileSystem.c の 1626 行で定義されています。 参照先 DKC_FINDFILE, dkcFree(), と NULL.
|
|
dkcSJISFileSystem.c の 363 行で定義されています。 参照先 DKC_PATHSTRING, dkcFree(), dkcFreeString(), と NULL.
00364 { 00365 if(NULL==ptr || NULL==*ptr){ 00366 return edk_ArgumentException; 00367 } 00368 dkcFreeString(&((*ptr)->mString)); 00369 return dkcFree((void **)ptr); 00370 } |
|
dkcSJISFileSystem.c の 783 行で定義されています。 参照先 BOOL, dkc_strcpy(), dkcdMAXPATH_BUFFER, FALSE, NULL, と TRUE. 参照元 dkcCurrentDirectoryConcatenate().
00783 { 00784 # ifdef WIN32 00785 if(0==GetCurrentDirectory(size,buff)){ 00786 return FALSE; 00787 } 00788 /*if(NULL==_getcwd(path,dkcdMAXPATH_BUFFER)){ 00789 return FALSE; 00790 }*/ 00791 #else 00792 if(NULL==getcwd(buff,size)) 00793 return FALSE; 00794 #endif 00795 return TRUE; 00796 00797 #if 0 00798 /* どういう実装になっているか分からないのでとりあえず+1 */ 00799 char path[dkcdMAXPATH_BUFFER + 1]; 00800 size_t len; 00801 # ifdef WIN32 00802 if(0==GetCurrentDirectory(size,path)){ 00803 return FALSE; 00804 } 00805 /*if(NULL==_getcwd(path,dkcdMAXPATH_BUFFER)){ 00806 return FALSE; 00807 }*/ 00808 #else 00809 if(NULL==getcwd(path,dkcdMAXPATH_BUFFER)) 00810 return FALSE; 00811 #endif 00812 len = strlen(path); 00813 return DKUTIL_SUCCEEDED(dkc_strcpy(buff,size,path,len)); 00814 #endif //end of if 0 00815 } |
|
パス名から、拡張子の開始位置を取得する ファイル名の末尾からファイル名の最後の '.' までを、拡張子と判断する
dkcSJISFileSystem.c の 71 行で定義されています。
00072 { 00073 00074 char *p; 00075 char *get_tail; 00076 00077 get_tail = strtail( PathName ); 00078 for( p = get_tail; p >= PathName; p-- ) // 文字列の最後から最初まで 00079 { 00080 if ( ('\\'==*p) && !isJMS(PathName,p-PathName) ) 00081 return get_tail; // ファイル名はここまで 00082 00083 if ( '.' == *p ) 00084 return p+1; // '.' を発見 00085 } 00086 return get_tail; // 拡張子なし 00087 }//GetFileExtension |
|
dkcSJISFileSystem.c の 117 行で定義されています。 参照先 BOOL, と dkcIsRelativityPath().
00118 { 00119 return !dkcIsRelativityPath(path); 00120 } |
|
dkcSJISFileSystem.c の 90 行で定義されています。 参照先 BOOL, dkcdMAXPATH_BUFFER, dkcFileExist(), dkcIsNativePathString(), dkcToAbsolutelyPath(), FALSE, と TRUE.
00090 { 00091 char dest[dkcdMAXPATH_BUFFER]; 00092 const size_t dsize = dkcdMAXPATH_BUFFER; 00093 00094 //相対パス?絶対パス?でもそのファイルが存在するか? 00095 if(FALSE==dkcFileExist(path)){ 00096 return FALSE; 00097 } 00098 //pathを正規化 00099 if(DKUTIL_FAILED(dkcToAbsolutelyPath(dest,dsize,path,size))){ 00100 return FALSE; 00101 } 00102 //正規化して、ファイルに使用して良い文字列を使っているか? 00103 if(FALSE==dkcIsNativePathString(dest,strlen(dest))){ 00104 return FALSE; 00105 } 00106 00107 return TRUE; 00108 } |
|
dkcSJISFileSystem.c の 109 行で定義されています。 参照先 BOOL, dkcmNOT_ASSERT, dkcSJIS_StrChrSearch(), FALSE, NULL, と TRUE. 参照元 dkcIsAbsolutelyPath(), と dkcToAbsolutelyPath().
00110 { 00111 int point; 00112 dkcmNOT_ASSERT(NULL==path); 00113 point = dkcSJIS_StrChrSearch(path,':'); 00114 if(point == -1) return TRUE; 00115 return FALSE; 00116 } |
|
文字列 str の str[nPos] について、
dkcSJISFileSystem.c の 40 行で定義されています。 参照元 isJMS().
00041 { 00042 int i; 00043 int state; // { 0, 1, 2 } = { 1バイト文字, 2バイト文字の第1バイト, 2バイト文字の第2バイト } 00044 00045 state = 0; 00046 for( i = 0; str[i] != '\0'; i++ ) 00047 { 00048 if ( ( state == 0 ) && ( jms1( str[i] ) ) ) state = 1; // 0 -> 1 00049 else if ( ( state == 1 ) && ( jms2( str[i] ) ) ) state = 2; // 1 -> 2 00050 else if ( ( state == 2 ) && ( jms1( str[i] ) ) ) state = 1; // 2 -> 1 00051 else state = 0; // 2 -> 0, その他 00052 00053 // str[nPos] での状態を返す。 00054 if ( i == nPos ) return state; 00055 } 00056 return 0; 00057 } |
|
srcの一番後ろににがついていたらTRUE \ dkcSJISFileSystem.c の 123 行で定義されています。 参照先 BOOL, dkcSJIS_SearchPathSepLast(), FALSE, と TRUE. 参照元 dkcPathStringElementInsert_Logic(), dkcPathStringNormalizeConcatenateLogic(), と dkcPushBackPathSep().
00123 { 00124 int point; 00125 point = dkcSJIS_SearchPathSepLast(src); 00126 //if(point != -1 && (size_t)point == dlen - 1/*&& (size_t)point != dlen*/) 00127 if((size_t)point == dlen - 1) 00128 { //みつかった。 00129 return TRUE; 00130 } 00131 //みつからない。 00132 return FALSE; 00133 } |
|
buffの内容をfilenameファイルに書きこむ
dkcSJISFileSystem.c の 1218 行で定義されています。 参照先 BOOL, DKC_STREAM, dkcAllocStreamFileType(), dkcFileExist(), dkcFreeStream(), dkcStreamWrite(), edkcStreamDefaultEndian, edkcStreamProcessAsOrdered, NULL, と TRUE.
01219 { 01220 BOOL r; 01221 DKC_STREAM *p; 01222 int re = edk_FAILED; 01223 if(!(edkcFileRewrite & flag)) 01224 { 01225 01226 //ファイルの存在を確かめる 01227 r = dkcFileExist(filename); 01228 if(r==TRUE){ 01229 return edk_ArgumentException; 01230 } 01231 } 01232 p = dkcAllocStreamFileType( 01233 edkcStreamDefaultEndian | edkcStreamProcessAsOrdered, 01234 filename,"wb"); 01235 01236 if(NULL==p){ 01237 return edk_FAILED; 01238 } 01239 if(DKUTIL_FAILED(dkcStreamWrite(p,buff,size))){ 01240 goto End; 01241 } 01242 re = edk_SUCCEEDED; 01243 End: 01244 dkcFreeStream(&p); 01245 01246 return re; 01247 01248 } |
|
パスを正規化して繋げる。
dkcSJISFileSystem.c の 643 行で定義されています。 参照先 DKC_PATHSTRING, dkcdMAXPATH, dkcmNOT_ASSERT, dkcPathStringCopy(), dkcPathStringNormalizeConcatenateLogic(), dkc_String::mByteSize, と dkc_PathString::mString.
00644 { 00645 int result; 00646 00647 dkcmNOT_ASSERT(ptr->mString->mByteSize + size >= dkcdMAXPATH); 00648 if(ptr->mString->mByteSize + size >= dkcdMAXPATH) 00649 {//これ以上は入れられない。 00650 return edk_FAILED; 00651 } 00652 00653 if(ptr->mString->mByteSize) 00654 {//すでに入っているものがある。 00655 result = dkcPathStringNormalizeConcatenateLogic(ptr,buff,size); 00656 } 00657 else 00658 {//何も無い時はこちらで 00659 result = dkcPathStringCopy(ptr,buff,size); 00660 } 00661 //return dkcPathStringNormalizeInsertLogic(ptr,buff,size,dkcStringConcatenate); 00662 return result; 00663 } |
|
パスを正規化して入れる。
dkcSJISFileSystem.c の 604 行で定義されています。 参照先 DKC_PATHSTRING, dkcdMAXPATH, dkcmNOT_ASSERT, dkcPathStringNormalizeCopyLogic(), dkcStringCopy(), dkc_String::mByteSize, と dkc_PathString::mString. 参照元 dkcAllocPathString(), dkcPathStringConcatenate(), と dkcPathStringNormalizeConcatenateLogic().
00605 { 00606 00607 dkcmNOT_ASSERT(ptr->mString->mByteSize + size >= dkcdMAXPATH); 00608 if(ptr->mString->mByteSize + size >= dkcdMAXPATH) 00609 {//これ以上は入れられない。 00610 return edk_FAILED; 00611 } 00612 return dkcPathStringNormalizeCopyLogic(ptr,buff,size,dkcStringCopy); 00613 } |
|
dkcSJISFileSystem.c の 386 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringDevideBegin_Logic(), と dkc_PathString::mIterateCount.
00387 { 00388 return dkcPathStringDevideBegin_Logic(ptr,&ptr->mIterateCount,buff,size); 00389 } |
|
dkcSJISFileSystem.c の 402 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcmNOT_ASSERT, dkcPathStringPointer(), dkcSJIS_StrChrSearch(), と NULL. 参照元 dkcPathStringDevideBegin().
00403 { 00404 int i,point; 00405 const char *p; 00406 dkcmNOT_ASSERT(NULL==ptr || NULL==buff || 0==size); 00407 00408 //len = dkcPathStringSize(ptr); 00409 p = dkcPathStringPointer(ptr); 00410 00411 point = dkcSJIS_StrChrSearch(p,'\\'); 00412 if(-1==point){return edk_EndProcess;} 00413 00414 for(i=0;i<point;i++){//drive指定のものがあるかどうか。 00415 if(':'==p[i]){ 00416 if(DKUTIL_FAILED(dkc_strcpy( 00417 buff,size,p,(size_t)i//-1 00418 ))) 00419 { 00420 return edk_BufferOverFlow; 00421 } 00422 point = dkcSJIS_StrChrSearch(&p[i],'\\');//次の物を見つける。 00423 //(まぁ:の次は\\と言う事が決まっているけど、いちおう。 00424 *count = (size_t)i + point + 1;//次に始めるのは 00425 return edk_SUCCEEDED; 00426 } 00427 } 00428 if(DKUTIL_FAILED(dkc_strcpy( 00429 buff,size,p,(size_t)point-1 00430 ))) 00431 { 00432 return edk_FAILED; 00433 } 00434 *count = (size_t)point + 1;//次に始めるのは 00435 return edk_SUCCEEDED; 00436 } |
|
dkcSJISFileSystem.c の 397 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringDevideEnd_Logic(), と dkc_PathString::mIterateCount.
00397 { 00398 dkcPathStringDevideEnd_Logic(&ptr->mIterateCount); 00399 } |
|
dkcSJISFileSystem.c の 475 行で定義されています。
00475 { 00476 *count = 0; 00477 } |
|
dkcSJISFileSystem.c の 391 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringDevideNext_Logic(), と dkc_PathString::mIterateCount.
00392 { 00393 return dkcPathStringDevideNext_Logic(ptr,&ptr->mIterateCount,buff,size); 00394 00395 } |
|
dkcSJISFileSystem.c の 438 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcPathStringPointer(), dkcSJIS_StrChrSearch(), dkcStringSize(), と dkc_PathString::mString. 参照元 dkcPathStringDevideNext().
00439 { 00440 int point; 00441 const char *p; 00442 size_t len; 00443 //len = dkcPathStringSize(ptr); 00444 p = dkcPathStringPointer(ptr); 00445 len = dkcStringSize(ptr->mString); 00446 if(len <= *count) 00447 {//もうこの関数を呼び出すのは終わりだっちゅうに!! 00448 return edk_EndProcess; 00449 } 00450 point = dkcSJIS_StrChrSearch(&p[*count],'\\'); 00451 if(-1==point) 00452 {//最後まで来ちまった。 00453 00454 00455 len -= *count; 00456 if(DKUTIL_FAILED(dkc_strcpy(//残り物を全部コピー 00457 buff,size,&p[*count],len 00458 ))) 00459 { 00460 return edk_FAILED; 00461 } 00462 *count += len; 00463 return edk_SUCCEEDED;//out 00464 } 00465 if(DKUTIL_FAILED(dkc_strcpy( 00466 buff,size,&p[*count],(size_t)point 00467 ))) 00468 { 00469 return edk_FAILED; 00470 } 00471 *count += (size_t)point + 1;//次に始めるのは 00472 return edk_SUCCEEDED;//out 00473 } |
|
dkcSJISFileSystem.c の 506 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringPointer(), dkcPathStringSize(), dkcSJIS_SearchPathSep(), dkcStringErase(), と dkc_PathString::mString.
00508 { 00509 const char *p = dkcPathStringPointer(ptr); 00510 int endlen = dkcSJIS_SearchPathSep(&p[count]); 00511 00512 if(-1==endlen){ 00513 endlen = dkcPathStringSize(ptr); 00514 endlen = endlen - count; 00515 }else{ 00516 //endlen;//マイナスしておく \\をReplaceしないため 00517 } 00518 return dkcStringErase(ptr->mString,count - 1,(size_t)endlen + 1);//count -1は前の\\を消すためendlen + 1は-1した為 00519 } |
|
パスの要素を挿入する。(正規化はしない lenは文字数
dkcSJISFileSystem.c の 479 行で定義されています。 参照先 DKC_PATHSTRING, dkcIsNativePathString(), dkcIsTailPathSep(), dkcPushBackPathSep(), dkcStringInsert(), FALSE, と dkc_PathString::mString.
00481 { 00482 int r; 00483 size_t size = len + 5; 00484 00485 char *p; 00486 if(len==0 || FALSE==dkcIsNativePathString(src,len)) 00487 { 00488 return edk_FAILED; 00489 } 00490 if(FALSE==dkcIsTailPathSep(src,len))//後ろにPathSeparatorが無い!! 00491 { 00492 p = (char *)malloc(size); 00493 00494 if(!p) return edk_OutOfMemory; 00495 strcpy(p,src);//あまり使いたくないけどすでにバッファは保証されているのでstrcpy 00496 dkcPushBackPathSep(p,len,size); 00497 00498 r = dkcStringInsert(ptr->mString,count,p,strlen(p)); 00499 free(p); 00500 }else{ 00501 r = dkcStringInsert(ptr->mString,count,src,len); 00502 } 00503 return r; 00504 } |
|
パスの要素を置換する。(正規化はしない lenは文字数
dkcSJISFileSystem.c の 523 行で定義されています。 参照先 DKC_PATHSTRING, dkcIsNativePathString(), dkcPathStringPointer(), dkcPathStringSize(), dkcSJIS_SearchPathSep(), dkcStringReplace(), FALSE, と dkc_PathString::mString.
00525 { 00526 const char *p = dkcPathStringPointer(ptr); 00527 int endlen; 00528 if(len==0 || FALSE==dkcIsNativePathString(src,len)) 00529 { 00530 return edk_FAILED; 00531 } 00532 endlen = dkcSJIS_SearchPathSep(&p[count]);//countから検索している 00533 if(-1==endlen){ 00534 endlen = dkcPathStringSize(ptr); 00535 endlen = endlen - count; 00536 }else{ 00537 if(0 != endlen) 00538 endlen--;//マイナスしておく \\をReplaceしないため 00539 } 00540 return dkcStringReplace(ptr->mString,count,count + endlen,src,len); 00541 /* 00542 size_t size = len + 5; 00543 int r; 00544 // int point; 00545 const char *pointer; 00546 char *p ; 00547 if(FALSE==dkcIsTailPathSep(src,len))//後ろにPathSeparatorが無い!! 00548 { 00549 //文字列をちと変更 00550 p = malloc(size); 00551 if(!p) return edk_OutOfMemory; 00552 strcpy(p,src); 00553 r = dkcPushBackPathSep(p,len,size); 00554 }else{ 00555 p = (char *)src; 00556 } 00557 pointer = dkcPathStringPointer(ptr); 00558 //countから調べる。 00559 dkcSJIS_SearchPathSep(&pointer[count]); 00560 */ 00561 00562 00563 00564 00565 00566 } |
|
dkcSJISFileSystem.c の 720 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcdPATH_SEP, dkcSJIS_StrChrSearchTail(), dkcStringPointer(), dkcStringSize(), と dkc_PathString::mString.
00721 { 00722 const char *p = dkcStringPointer(ptr->mString); 00723 int point = dkcSJIS_StrChrSearchTail(p,strlen(p),dkcdPATH_SEP); 00724 size_t len = dkcStringSize(ptr->mString); 00725 //if(point - 1 <= 0) return edk_FAILED; 00726 if(point < 0) return edk_FAILED; 00727 if((size_t)(point + 1) > len) return edk_FAILED; 00728 //if((size_t)point == len) return edk_FAILED;//ファイル名が無い。 00729 return dkc_strcpy(buff,size,p,point);//\\も含める。 00730 00731 } |
|
dkcSJISFileSystem.c の 667 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcSJIS_StrChrSearch(), dkcStringPointer(), と dkc_PathString::mString.
00667 { 00668 const char *p = dkcStringPointer(ptr->mString); 00669 int point = dkcSJIS_StrChrSearch(p,':'); 00670 if(-1 == point) return edk_Not_Found;//見つからない。 00671 //return dkc_memcpy(buff,size,p,(size_t)point - 1); 00672 return dkc_strcpy(buff,size,p,(size_t)1);//driveなら1文字で十分だよね^^; 00673 } |
|
dkcSJISFileSystem.c の 675 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcSJIS_SearchPathSep(), dkcSJIS_StrChrSearchLast(), dkcStringPointer(), dkcStringSize(), と dkc_PathString::mString.
00676 { 00677 int point2; 00678 size_t len; 00679 const char *p = dkcStringPointer(ptr->mString); 00680 int point = dkcSJIS_StrChrSearchLast(p,'.'); 00681 00682 if(point < 0) return edk_Not_Found;//見つからない。 00683 00684 point2 = dkcSJIS_SearchPathSep(&p[point]); 00685 if(point < point2){//C:\ok.OK\folderのような状況になっている。 00686 return edk_Not_Found; 00687 } 00688 len = dkcStringSize(ptr->mString); 00689 //if(point - 1 <= 0) return edk_FAILED; 00690 00691 if((size_t)(point + 1) > len) return edk_FAILED;//Logicalなエラー?? 00692 return dkc_strcpy(buff,size,&p[point + 1],(size_t)len - (size_t)point ); 00693 00694 } |
|
dkcSJISFileSystem.c の 696 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcmFORCE_NOT_ASSERT, dkcSJIS_SearchPathSepLast(), dkcStringPointer(), dkcStringSize(), dkc_PathString::mString, と NULL.
00697 { 00698 const char *p = dkcStringPointer(ptr->mString); 00699 //int point = dkcSJIS_StrChrSearchLast(p,dkcdPATH_SEP); 00700 int point = dkcSJIS_SearchPathSepLast(p); 00701 size_t len = dkcStringSize(ptr->mString); 00702 //if(point - 1 <= 0) return edk_FAILED; 00703 #if 0 00704 if(point < 0) return edk_Not_Found;//見つからない。 00705 if((size_t)(point + 1) > len) return edk_FAILED; 00706 if((size_t)point == len) return edk_FAILED;//ファイル名が無い。 00707 00708 #else 00709 printf("%d",point); 00710 00711 dkcmFORCE_NOT_ASSERT(NULL==p); 00712 dkcmFORCE_NOT_ASSERT(point < 0); 00713 dkcmFORCE_NOT_ASSERT((size_t)(point + 1) > len); 00714 dkcmFORCE_NOT_ASSERT((size_t)point == len); 00715 00716 #endif 00717 return dkc_strcpy(buff,size,&p[point + 1],(size_t)len - (size_t)point ); 00718 } |
|
dkcSJISFileSystem.c の 615 行で定義されています。 参照先 DKC_PATHSTRING, dkcdMAXPATH_BUFFER, dkcdPATH_SEP_STR, dkcIsTailPathSep(), dkcPathStringCopy(), dkcPathStringPointer(), dkcPathStringSize(), dkcStringConcatenate(), FALSE, dkc_PathString::mString, と ToAbsolutelyLogic(). 参照元 dkcPathStringConcatenate().
00617 { 00618 char dest[dkcdMAXPATH_BUFFER]; 00619 00620 00621 if(FALSE==dkcIsTailPathSep(dkcPathStringPointer(ptr),dkcPathStringSize(ptr))) 00622 { 00623 dkcStringConcatenate(ptr->mString,dkcdPATH_SEP_STR,1); 00624 } 00625 dkcStringConcatenate(ptr->mString,buff,size); 00626 00627 size = dkcPathStringSize(ptr) + 1; 00628 00629 //p = malloc(dkcPathStringSize(ptr)); 00630 //if(!p) return edk_OutOfMemory; 00631 00632 00633 if(DKUTIL_FAILED( 00634 ToAbsolutelyLogic(dest,sizeof(dest),dkcPathStringPointer(ptr)) 00635 )){ 00636 return edk_FAILED; 00637 } 00638 00639 return dkcPathStringCopy(ptr,dest,strlen(dest)); 00640 } |
|
dkcSJISFileSystem.c の 573 行で定義されています。 参照先 DKC_PATHSTRING, DKC_STRING, dkcdMAXPATH_BUFFER, dkcmNOT_ASSERT, dkcToAbsolutelyPath(), dkc_PathString::mString, と NULL. 参照元 dkcPathStringCopy().
00575 { 00576 //const size_t bsize = dkcdMAXPATH_BUFFER + 1; 00577 size_t len; 00578 int result; 00579 //char *pb = malloc(bsize); 00580 //if(NULL== pb) return edk_OutOfMemory; 00581 char pb[dkcdMAXPATH_BUFFER]; 00582 size_t bsize = sizeof(pb); 00583 00584 result = dkcToAbsolutelyPath(pb,bsize,buff,size); 00585 00586 00587 len = strlen(pb); 00588 00589 # ifdef DEBUG //ありえないよ〜エラーチェック 00590 dkcmNOT_ASSERT(DKUTIL_FAILED(result)); 00591 dkcmNOT_ASSERT(len >= bsize);// >=にするのはNULL文字が潰されているかどうか。 00592 dkcmNOT_ASSERT(NULL==function__); 00593 # endif 00594 if(DKUTIL_FAILED(result)){ 00595 goto Error; 00596 } 00597 result = function__(ptr->mString,pb,len); 00598 00599 Error: 00600 //if(pb){free(pb);pb=NULL;} 00601 return result; 00602 } |
|
dkcSJISFileSystem.c の 378 行で定義されています。 参照先 DKC_PATHSTRING, dkcStringPointer(), と dkc_PathString::mString. 参照元 dkcPathStringDevideBegin_Logic(), dkcPathStringDevideNext_Logic(), dkcPathStringElementErase_Logic(), dkcPathStringElementReplace_Logic(), と dkcPathStringNormalizeConcatenateLogic().
00379 { 00380 return dkcStringPointer(p->mString); 00381 } |
|
dkcSJISFileSystem.c の 373 行で定義されています。 参照先 DKC_PATHSTRING, dkcStringSize(), と dkc_PathString::mString. 参照元 dkcPathStringElementErase_Logic(), dkcPathStringElementReplace_Logic(), と dkcPathStringNormalizeConcatenateLogic().
00374 { 00375 return dkcStringSize(p->mString); 00376 } |
|
path separatorを挿入する必要があり、挿入出来たらTRUE
dkcSJISFileSystem.c の 135 行で定義されています。 参照先 dkcdPATH_SEP, dkcIsTailPathSep(), と FALSE. 参照元 dkcDirectoryConcatenate(), と dkcPathStringElementInsert_Logic().
00135 { 00136 if(FALSE==dkcIsTailPathSep(dest,dlen)){ 00137 if(size < dlen + 2){ 00138 return edk_OutputBufferWasLost;//バッファが足らんよ! 00139 } 00140 dest[dlen ] = dkcdPATH_SEP; 00141 dest[dlen + 1] = '\0';//こいつを忘れてはいけない。 00142 return edk_SUCCEEDED; 00143 } 00144 return edk_EndProcess; 00145 } |
|
dkcSJISFileSystem.c の 769 行で定義されています。 参照先 BOOL, dkcIsEffectivePath(), dkcmNOT_ASSERT, と FALSE.
00769 { 00770 #ifdef DEBUG 00771 size_t len = strlen(filename); 00772 dkcmNOT_ASSERT(0==len || FALSE==dkcIsEffectivePath(filename,len)); 00773 #endif 00774 # ifdef WIN32 00775 return(0 != SetCurrentDirectory(filename)); 00776 //return (_chdir(filename)==0); 00777 # else 00778 return (chdir(filename)==0); 00779 # endif 00780 } |
|
パスを正規化(相対パスから絶対パス)する関数
dkcSJISFileSystem.c の 208 行で定義されています。 参照先 dkcCurrentDirectoryConcatenate(), dkcdMAXPATH_BUFFER, dkcIsRelativityPath(), MAX_PATH_CHECK, NULL, ToAbsolutelyLogic(), と TRUE. 参照元 dkcIsEffectivePath(), と dkcPathStringNormalizeCopyLogic().
00209 { 00210 char *tp = NULL; 00211 int r; 00212 MAX_PATH_CHECK(dsize); 00213 00214 00215 if(NULL==dest) return edk_FAILED; 00216 00217 if(dkcIsRelativityPath(src)==TRUE) 00218 {//カレントディレクトリを付加する。 00219 00220 tp = (char *)malloc(dkcdMAXPATH_BUFFER); 00221 if(NULL==tp) return edk_OutOfMemory; 00222 00223 dkcCurrentDirectoryConcatenate(tp,dkcdMAXPATH_BUFFER,src); 00224 r = ToAbsolutelyLogic(dest,dsize,tp); 00225 free(tp); 00226 return r; 00227 00228 } 00229 return ToAbsolutelyLogic(dest,dsize,src); 00230 00231 00232 00233 /* 00234 状態繊維 00235 PATH_SEP 00236 . 00237 sjis 00238 00240 ..... 00241 ../../ 00242 /././ 00243 00244 */ 00245 /* 00246 size_t i,di; 00247 // size_t j; 00248 int point; 00249 //char prev; 00250 const char *pathsep="\\/"; 00251 DKC_SINGLELIST_OBJECT *plo = NULL; 00252 DKC_SINGLELIST *lit = NULL; 00253 00254 00255 di = 0; 00256 00257 if(dsize < ssize){ 00258 return edk_ArgumentException; 00259 } 00260 //list確保 00261 plo = dkcAllocSingleListObject(NULL,20); 00262 if(NULL==plo) return edk_FAILED; 00263 00264 //directoryをパース 00265 for(i=0;;){ 00266 point = dkcSJIS_StrChrSearchInStr(&src[i],pathsep); 00267 if(point < 0){ 00268 if(i != ssize){ 00269 if(FALSE==plo->push_back(plo,&src[i],size - i)){ 00270 return edk_FAILED; 00271 } 00272 } 00273 break; 00274 } 00275 00276 if(FALSE 00277 ==plo->push_back(plo,&src[i],point - 1)//見つかったところまでだから-1 00278 ) 00279 { 00280 return edk_FAILED; 00281 } 00282 00283 i += point; 00284 } 00285 00286 for(i=0;i<ssize;){ 00287 00288 00289 if(dkcmIsSJIS1(src[i]) && dkcmIsSJIS2(src[i + 1])) 00290 {//SJIS抜かし 00291 i++; 00292 i++; 00293 continue; 00294 } 00295 // src == // 00296 if(prev==dkcdPATH_SEP && src[i] == dkcdPATH_SEP) 00297 { 00298 i++; 00299 continue; 00300 } 00301 // src == .. 00302 if(prev=='.' && src[i] == '.') 00303 { 00304 while(src[i] != '.') i++; 00305 if(dkcdPATH_SEP==src[i]) i++; 00306 point = dkcSJIS_StrChrSearch(&src[i],dkcdPATH_SEP); 00307 00308 if(point == -1){ 00309 break; 00310 } 00311 i += point; 00312 00313 continue; 00314 } 00315 00316 dest[di] = src[i]; 00317 di++; 00318 i++; 00319 prev = src[i]; 00320 } 00321 00322 00323 return edk_SUCCEEDED; */ 00324 } |
|
dkcSJISFileSystem.c の 58 行で定義されています。 参照先 dkcIsShiftJIS().
00058 { 00059 return dkcIsShiftJIS(str,nPos); 00060 } |
|
dkcSJISFileSystem.c の 23 行で定義されています。 参照先 BOOL. 参照元 dkcIsShiftJIS().
00023 { 00024 return (((((unsigned char)(c))>=0x81)&&(((unsigned char)(c))<=0x9F))||((((unsigned char)(c))>=0xE0)&&(((unsigned char)(c))<=0xFC))); 00025 } |
|
dkcSJISFileSystem.c の 26 行で定義されています。 参照先 BOOL. 参照元 dkcIsShiftJIS().
00026 { 00027 return ((((unsigned char)(c))!=0x7F)&&(((unsigned char)(c))>=0x40)&&(((unsigned char)(c))<=0xFC)); 00028 } |
|
文字列末尾の文字 '' の位置を返す
dkcSJISFileSystem.c の 62 行で定義されています。
00063 { 00064 return strchr( stringg, '\0' ); 00065 }//strtail |
|
dkcSJISFileSystem.c の 189 行で定義されています。 参照先 MAX_PATH_CHECK, と NULL. 参照元 dkcPathStringNormalizeConcatenateLogic(), と dkcToAbsolutelyPath().
00190 { 00191 /*if(dsize < dkcdMAXPATH_BUFFER){//こんなバッファじゃどうなるか分からないよ^^; 00192 return edk_BufferOverFlow; 00193 }*/ 00194 MAX_PATH_CHECK(dsize); 00195 # ifdef WIN32 00196 00197 if(NULL==_fullpath(dest,src,dsize)){ 00198 return edk_FAILED; 00199 } 00200 # else//unix or linux ?? 00201 if(NULL==__realpath(src,dest)){ 00202 return edk_FAILED; 00203 } 00204 # endif 00205 return edk_SUCCEEDED; 00206 } |