#include "dkcOSIndependent.h"
#include "dkcSJISFileSystem.h"
#include "dkcStdio.h"
#include "dkcString.h"
#include "dkcThreadLock.h"
#include "dkcSingleList.h"
dkcSJISFileSystem.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) |
UINT WINAPI | dkcFileSize (const char *filename) |
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) |
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 で定義されています。
|
値: {\ dkcmNOT_ASSERT(dsize < dkcdMAXPATH_BUFFER);\ if(dsize < dkcdMAXPATH_BUFFER){\ return edk_BufferOverFlow;\ }\ } dkcSJISFileSystem.c の 177 行で定義されています。 |
|
dkcSJISFileSystem.c の 1359 行で定義されています。 参照先 DKC_FINDFILE, と dkcAllocate().
01360 { 01361 DKC_FINDFILE *p; 01362 p = dkcAllocate(sizeof(DKC_FINDFILE)); 01363 return p; 01364 } |
|
dkcSJISFileSystem.c の 323 行で定義されています。 参照先 DKC_PATHSTRING, dkcAllocate(), dkcAllocString(), dkcdMAXPATH_BUFFER, dkcFree(), dkcFreeString(), dkcIsNativePathString(), dkcPathStringCopy(), FALSE, dkc_PathString::mIterateCount, dkc_PathString::mString, と NULL.
00324 { 00325 DKC_PATHSTRING *p; 00326 size_t len; 00327 /*if(NULL==path){ 00328 return NULL; 00329 }*/ 00330 00331 p = dkcAllocate(sizeof(DKC_PATHSTRING)); 00332 if(NULL==p) return NULL; 00333 00334 p->mString = dkcAllocString(dkcdMAXPATH_BUFFER + 1);//このサイズじゃないとダメ 00335 if(NULL==p->mString) goto Error; 00336 00337 //パス名をコピー 00338 if(path){ 00339 len = strlen(path); 00340 //ネイティブなパスを入れる。 00341 if(FALSE==dkcIsNativePathString(path,len)){ 00342 goto Error; 00343 } 00344 dkcPathStringCopy(p,path,len); 00345 } 00346 p->mIterateCount = 0; 00347 00348 return p; 00349 Error: 00350 if(p){ 00351 dkcFreeString(&p->mString); 00352 } 00353 dkcFree(&p); 00354 return NULL; 00355 } |
|
dkcSJISFileSystem.c の 791 行で定義されています。 参照先 BOOL, dkcCreateDirectoryLogic(), dkcdMAXPATH_BUFFER, dkcdMAXPATH_LEN, dkcdPATH_SEP, dkcmIS_INVALID_FOLDERNAME_CHAR, dkcmIS_PATH_SEP, dkcmIsSJIS1, dkcmIsSJIS2, dkcmNOT_ASSERT, dkcmNOT_ASSERT_MESSAGE, DKUTIL_STRUCTURE_INIT, edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, FALSE, NULL, と NULL_CHAR_ARRAY.
00792 { 00793 BOOL result; 00794 char work[dkcdMAXPATH_BUFFER]; 00795 unsigned long n = 0; 00796 unsigned long len = strlen(pPath); 00797 00798 #ifdef WIN32//sjis support 00799 SECURITY_ATTRIBUTES attr; 00800 00801 DKUTIL_STRUCTURE_INIT(attr); 00802 NULL_CHAR_ARRAY(work); 00803 00804 //error check 00805 if(dkcdMAXPATH_LEN < len){ 00806 dkcmNOT_ASSERT_MESSAGE("pathが長すぎる。",pPath); 00807 return edk_FAILED; 00808 } 00809 if(0==len ){ 00810 return edk_ArgumentException; 00811 } 00812 00813 //まずは一つ目を撃破 00814 if ( dkcmIsSJIS1(pPath[n]) || ! dkcmIS_INVALID_FOLDERNAME_CHAR(pPath[n]) ) 00815 {//SJISの1文字目かINVALIDな値では無かったら。 00816 work[n] = pPath[n]; 00817 if(1==len){ 00818 //フォルダ作成 00819 attr.nLength = sizeof(SECURITY_ATTRIBUTES); 00820 attr.lpSecurityDescriptor = NULL; 00821 attr.bInheritHandle = FALSE; 00822 00823 result = dkcCreateDirectoryLogic( work, &attr ); 00824 00825 dkcmNOT_ASSERT("directoryを作れなかった" && FALSE==result); 00826 return edk_SUCCEEDED; 00827 } 00828 } 00829 n++; 00830 //二つ目から開始 00831 while ( n < len ) 00832 { 00833 //フォルダ名取得 00834 while ( n < len ) 00835 { 00836 00837 if(! dkcmIsSJIS1(pPath[n - 1]) && ! dkcmIsSJIS2(pPath[n]) ) 00838 {//SJISではない!! 00839 if ( ( dkcmIS_PATH_SEP(pPath[n]) ) /*&& pPath[n] != '\0'*//*(n != '\0')*/ ) 00840 { 00841 if ( work[n-1] != ':' ) 00842 {//driveを読み込ませたくないらしい。 00843 break; 00844 } 00845 } 00846 else if(dkcmIS_INVALID_FOLDERNAME_CHAR(pPath[n])) 00847 {//SJIS問題をクリアしたのに間違いだった 00848 return edk_FAILED; 00849 } 00850 } 00851 00852 work[n] = pPath[n]; 00853 n++; 00854 } 00855 work[n] = '\0'; 00856 00857 //フォルダ作成 00858 attr.nLength = sizeof(SECURITY_ATTRIBUTES); 00859 attr.lpSecurityDescriptor = NULL; 00860 attr.bInheritHandle = FALSE; 00861 00862 result = dkcCreateDirectoryLogic( work, &attr ); 00863 00864 //dkcmNOT_ASSERT("directoryを作れなかった" && FALSE==result); 00865 if(FALSE==result){ 00866 return edk_FAILED; 00867 } 00868 work[n++] = dkcdPATH_SEP; 00869 } 00870 #else //no support sjis 00871 NULL_CHAR_ARRAY(work); 00872 00873 //error check 00874 if(dkcdMAXPATH_LEN < len){ 00875 dkcmNOT_ASSERT_MESSAGE("pathが長すぎる。",pPath); 00876 return edk_FAILED; 00877 } 00878 if(0==len ){ 00879 return edk_ArgumentException; 00880 } 00881 00882 while ( n < len ) 00883 { 00884 //フォルダ名取得 00885 while ( n < len ) 00886 { 00887 if ( ( dkcmIS_PATH_SEP(pPath[n]) ) && (n != '\0') ) 00888 { 00889 if ( work[n-1] != ':' )//Linuxのドライブのパスはコレデいいのかな? 00890 { 00891 break; 00892 } 00893 } 00894 work[n] = pPath[n]; 00895 n++; 00896 } 00897 work[n] = '\0'; 00898 00899 result = dkcCreateDirectoryLogic( work,NULL ); 00900 00901 //dkcmNOT_ASSERT("directoryを作れなかった" && FALSE==result); 00902 if(FALSE==result){ 00903 return edk_FAILED; 00904 } 00905 work[n++] = dkcdPATH_SEP; 00906 } 00907 00908 #endif 00909 00910 return edk_SUCCEEDED; 00911 } |
|
dkcSJISFileSystem.c の 780 行で定義されています。 参照先 BOOL. 参照元 dkcCreateDirectory().
00780 { 00781 #ifdef WIN32 00782 //return (0 == _mkdir( dir )); 00783 return (0 != CreateDirectory(dir,(SECURITY_ATTRIBUTES *)ptr)); 00784 #else 00785 return (0 == mkdir( dir )); 00786 #endif 00787 } |
|
dkcSJISFileSystem.c の 1027 行で定義されています。 参照先 BOOL, dkcFileExist(), FALSE, と TRUE.
01028 { 01029 FILE *fp; 01030 int r = FALSE; 01031 if(FALSE==dkcFileExist(filename) || TRUE==rewrite){ 01032 fp = fopen(filename,"wb"); 01033 if(!fp){ 01034 return r; 01035 } 01036 fclose(fp); 01037 r = TRUE; 01038 } 01039 return r; 01040 } |
|
dkcSJISFileSystem.c の 165 行で定義されています。 参照先 dkcDirectoryConcatenate(), dkcdMAXPATH_LEN, dkcGetCurrentDirectory(), と dkcmNOT_ASSERT.
00166 { 00167 //size_t len; 00168 //int point; 00169 00170 dkcmNOT_ASSERT(dsize <= dkcdMAXPATH_LEN);//<=はNULL文字も含むため。 00171 00172 dkcGetCurrentDirectory(dest,dsize); 00173 00174 00175 return dkcDirectoryConcatenate(dest,strlen(dest),dsize,src); 00176 } |
|
dkcSJISFileSystem.c の 143 行で定義されています。 参照先 dkc_strcat_amap(), dkcmNOT_ASSERT, dkcPushBackPathSep(), と edk_FAILED. 参照元 dkcCurrentDirectoryConcatenate().
00143 { 00144 //int point; 00145 //error check 00146 dkcmNOT_ASSERT(dlen + 2 > dsize); 00147 if(dlen + 2 > dsize){ 00148 return edk_FAILED; 00149 } 00150 00151 /*point = dkcSJIS_StrChrSearchTail(dest,dlen,dkcdPATH_SEP); 00152 if(point != -1 && (size_t)point != dlen) 00153 {//path separatorが見つかり、それがdestの最期に無い時 00154 if(!dkcmIS_PATH_SEP(src[0]) ) 00155 {//path separatorで無い時 00156 //path 区切り文字を付加してやる。 00157 dest[dlen ] = dkcdPATH_SEP; 00158 dest[dlen + 1] = '\0';//こいつを忘れてはいけない。 00159 } 00160 }*/ 00161 dkcPushBackPathSep(dest,dlen,dsize); 00162 return dkc_strcat_amap(dest,dsize,dlen,src,strlen(src)); 00163 } |
|
dkcSJISFileSystem.c の 913 行で定義されています。 参照先 BOOL, dkcFileCopyEx(), と FALSE.
00913 { 00914 return dkcFileCopyEx(dest,src,1024 * 64,FALSE); 00915 } |
|
dkcSJISFileSystem.c の 917 行で定義されています。 参照先 BOOL, dkcCreateEmptyFile(), dkcFClose(), dkcFileSize(), dkcFOpen(), dkcLoadBinary(), dkcmNOT_ASSERT, dkcSaveBinary(), dkcThreadLock_Lock(), dkcThreadLock_Unlock(), DKUTIL_FAILED, FALSE, NULL, ODS, と TRUE. 参照元 dkcFileCopy().
00919 { 00920 void *buff; 00921 FILE *srcf,*destf; 00922 size_t filesize;//ファイルサイズ 00923 size_t readed;//読み込んだデータ 00924 size_t count;//count 00925 size_t i; 00926 size_t rest;//残り 00927 int result = FALSE;//戻り値 00928 00929 if(NULL==dest || NULL==src) return FALSE; 00930 if(inner_buffer_size <= 1024){ 00931 inner_buffer_size = 1024; 00932 } 00933 00934 //バッファの準備 00935 buff = malloc(inner_buffer_size); 00936 if(NULL==buff){ 00937 inner_buffer_size = 1024 * 256; 00938 buff = malloc(inner_buffer_size); 00939 if(NULL==buff) 00940 return FALSE; 00941 } 00942 //thread lock 00943 if(bThreadLock){ 00944 dkcThreadLock_Lock(); 00945 } 00946 //ちっちゃい場合 00947 filesize = dkcFileSize(src); 00948 for(;;) 00949 {//non loop 00950 if(0 == filesize) 00951 {//ファイルサイズが0の場合 00952 dkcCreateEmptyFile(dest); 00953 break; 00954 } 00955 if(filesize < inner_buffer_size) 00956 {//ファイルサイズがバッファに収まってしまう場合。 00957 if(DKUTIL_FAILED(dkcLoadBinary(buff,filesize,src,&readed))) 00958 { 00959 goto Error; 00960 } 00961 # ifdef DEBUG 00962 if(readed != filesize){ 00963 ODS("readed != filesize why?\n"); 00964 } 00965 # endif 00966 dkcSaveBinary(buff,filesize,dest); 00967 break; 00968 } 00969 //バッファを使わなければコピーできない場合。 00970 00971 srcf = dkcFOpen(src,"rb"); 00972 if(NULL==srcf) goto Error; 00973 destf = dkcFOpen(dest,"wb"); 00974 if(NULL==destf) goto Error; 00975 00976 //ループする回数を計算 00977 count = filesize / inner_buffer_size; 00978 00979 for(i=0;i<count;i++){ 00980 dkcmNOT_ASSERT(1 != fread(buff,inner_buffer_size,1,srcf)); 00981 dkcmNOT_ASSERT(1 != fwrite(buff,inner_buffer_size,1,destf)); 00982 } 00983 00984 rest = filesize - (count * inner_buffer_size); 00985 00986 //残りを出力 00987 dkcmNOT_ASSERT(rest != fread(buff,1,rest,srcf)); 00988 dkcmNOT_ASSERT(rest != fwrite(buff,1,rest,destf)); 00989 00990 //close 00991 dkcFClose(&srcf); 00992 dkcFClose(&destf); 00993 00994 break; 00995 }//end of for 00996 00997 00998 result = TRUE; 00999 Error: 01000 if(bThreadLock){ 01001 dkcThreadLock_Unlock(); 01002 } 01003 if(buff){ 01004 free(buff);buff=NULL; 01005 } 01006 return result; 01007 } |
|
dkcSJISFileSystem.c の 719 行で定義されています。 参照元 dkcCreateZeroByteFile(), と dkcIsEffectivePath().
|
|
ファイルを削除する。
dkcSJISFileSystem.c の 1009 行で定義されています。 参照先 BOOL.
01010 { 01011 #ifdef WIN32 01012 return (0 != DeleteFile(filename)); 01013 //return (0==remove(filename)); 01014 #else 01015 return (0==remove(filename)); 01016 #endif 01017 } |
|
dkcSJISFileSystem.c の 1019 行で定義されています。 参照先 BOOL.
01019 { 01020 #ifdef WIN32 01021 return (0==rename(oldname,newname)); 01022 #else 01023 return (0==rename(oldname,newname)); 01024 #endif 01025 } |
|
dkcSJISFileSystem.c の 725 行で定義されています。 参照元 dkcAllocDeserialize(), と dkcFileCopyEx().
00725 { 00726 struct stat s;//s 00727 if(!filename) return 0; 00728 return (stat(filename,&s)==0) ? (UINT)s.st_size : 0; 00729 } |
|
FindClose() dkcSJISFileSystem.c の 1421 行で定義されています。 参照先 DKC_FINDFILE, edk_FAILED, edk_SUCCEEDED, dkc_FindFile::mDirent, dkc_FindFile::mHandle, と NULL.
01422 { 01423 #ifdef WIN32 01424 if(INVALID_HANDLE_VALUE == ptr->mHandle){ 01425 return edk_FAILED; 01426 } 01427 FindClose(ptr->mHandle); 01428 ptr->mHandle = INVALID_HANDLE_VALUE;//しっかりリセット 01429 #else 01430 if(0 == ptr->mHandle){ 01431 return edk_FAILED; 01432 } 01433 closedir(ptr->mHandle); 01434 ptr->mHandle = 0;//しっかりリセット 01435 ptr->mDirent = NULL; 01436 #endif 01437 01438 return edk_SUCCEEDED; 01439 01440 } |
|
dkcSJISFileSystem.c の 1442 行で定義されています。 参照先 DKC_FINDFILE, dkc_strcpy(), edk_FAILED, edk_LogicError, dkc_FindFile::mDirent, と NULL.
01443 { 01444 int r; 01445 size_t len; 01446 #ifdef WIN32 01447 len = strlen(ptr->mFindData.cFileName); 01448 if(0 == len) return edk_FAILED; 01449 r = dkc_strcpy(buff,buffsize,ptr->mFindData.cFileName,len); 01450 #else 01451 if(NULL==ptr->mDirent) 01452 {//呼び出しが間違っているよ^^; 01453 return edk_LogicError; 01454 } 01455 len = strlen(ptr->mDirent.d_name); 01456 if(0 == len) return edk_FAILED; 01457 r = dkc_strcpy(buff,buffsize,ptr->mDirent.d_name,len); 01458 #endif 01459 return r; 01460 } |
|
dkcSJISFileSystem.c の 1478 行で定義されています。 参照先 BOOL, DKC_FINDFILE, と strcmp().
|
|
dkcSJISFileSystem.c の 1462 行で定義されています。 参照先 BOOL, DKC_FINDFILE, と strcmp().
|
|
dkcSJISFileSystem.c の 1490 行で定義されています。 参照先 BOOL, と DKC_FINDFILE.
01491 { 01492 #ifdef WIN32 01493 return (ptr->mFindData.dwFileAttributes & FILE_ATTRIBUTE_NORMAL); 01494 #else 01495 01496 #endif 01497 } |
|
dkcSJISFileSystem.c の 1499 行で定義されています。 参照先 BOOL, と DKC_FINDFILE.
01499 { 01500 #ifdef WIN32 01501 return (ptr->mFindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY); 01502 #else 01503 01504 #endif 01505 } |
|
dkcSJISFileSystem.c の 1506 行で定義されています。 参照先 DKC_FINDFILE.
01506 { 01507 #ifdef WIN32 01508 *High = ptr->mFindData.nFileSizeHigh; 01509 *Low = ptr->mFindData.nFileSizeLow; 01510 #else 01511 01512 #endif 01513 01514 } |
|
Windowsで言うFindFirstFile()のラッパー UNIXやLINUXでも動くかも? dkcSJISFileSystem.c の 1373 行で定義されています。 参照先 DKC_FINDFILE, edk_FAILED, edk_SUCCEEDED, dkc_FindFile::mHandle, と NULL.
01373 { 01374 #ifdef WIN32 01375 ptr->mHandle = 01376 FindFirstFileA( target, &(ptr->mFindData) ); 01377 if(ptr->mHandle == INVALID_HANDLE_VALUE){ 01378 return edk_FAILED; 01379 } 01380 #else 01381 ptr->mHandle = opendir( target ); 01382 if(NULL==ptr->mHandle){ 01383 return edk_FAILED; 01384 } 01385 01386 #endif 01387 return edk_SUCCEEDED; 01388 } |
|
FindNextFile() dkcSJISFileSystem.c の 1390 行で定義されています。 参照先 DKC_FINDFILE, edk_EndProcess, edk_FAILED, edk_SUCCEEDED, dkc_FindFile::mDirent, と dkc_FindFile::mHandle.
01390 { 01391 # ifdef WIN32 01392 if ( 0 == FindNextFileA( ptr->mHandle, &(ptr->mFindData) )) 01393 { 01394 if ( GetLastError() == ERROR_NO_MORE_FILES ) 01395 {//なんだ、もう無いじゃん。 01396 return edk_EndProcess; 01397 } 01398 else//最悪のパターン 01399 { 01400 return edk_FAILED; 01401 } 01402 } 01403 # else 01404 errno = 0; 01405 ptr->mDirent = readdir( ptr->mHandle ); 01406 if ( ptr->mDirent == 0 ) 01407 { 01408 if ( errno == 0 ) 01409 {//もう無いよ^^; 01410 return edk_EndProcess; 01411 } 01412 else//最悪のパターン 01413 { 01414 return edk_FAILED; 01415 } 01416 } 01417 # endif 01418 return edk_SUCCEEDED; 01419 } |
|
dkcSJISFileSystem.c の 1365 行で定義されています。 参照先 DKC_FINDFILE, dkcFree(), edk_FAILED, と NULL.
01365 { 01366 if(NULL==ptr /*|| *ptr==NULL*/){ 01367 return edk_FAILED; 01368 } 01369 return dkcFree(ptr); 01370 } |
|
dkcSJISFileSystem.c の 357 行で定義されています。 参照先 DKC_PATHSTRING, dkcFree(), dkcFreeString(), edk_ArgumentException, と NULL.
00358 { 00359 if(NULL==ptr || NULL==*ptr){ 00360 return edk_ArgumentException; 00361 } 00362 dkcFreeString(&((*ptr)->mString)); 00363 return dkcFree(ptr); 00364 } |
|
dkcSJISFileSystem.c の 746 行で定義されています。 参照先 BOOL, dkc_strcpy(), dkcdMAXPATH_BUFFER, DKUTIL_SUCCEEDED, FALSE, NULL, と TRUE. 参照元 dkcCurrentDirectoryConcatenate().
00746 { 00747 # ifdef WIN32 00748 if(0==GetCurrentDirectory(size,buff)){ 00749 return FALSE; 00750 } 00751 /*if(NULL==_getcwd(path,dkcdMAXPATH_BUFFER)){ 00752 return FALSE; 00753 }*/ 00754 #else 00755 if(NULL==getcwd(buff,size)) 00756 return FALSE; 00757 #endif 00758 return TRUE; 00759 00760 #if 0 00761 /* どういう実装になっているか分からないのでとりあえず+1 */ 00762 char path[dkcdMAXPATH_BUFFER + 1]; 00763 size_t len; 00764 # ifdef WIN32 00765 if(0==GetCurrentDirectory(size,path)){ 00766 return FALSE; 00767 } 00768 /*if(NULL==_getcwd(path,dkcdMAXPATH_BUFFER)){ 00769 return FALSE; 00770 }*/ 00771 #else 00772 if(NULL==getcwd(path,dkcdMAXPATH_BUFFER)) 00773 return FALSE; 00774 #endif 00775 len = strlen(path); 00776 return DKUTIL_SUCCEEDED(dkc_strcpy(buff,size,path,len)); 00777 #endif //end of if 0 00778 } |
|
パス名から、拡張子の開始位置を取得する ファイル名の末尾からファイル名の最後の '.' までを、拡張子と判断する
dkcSJISFileSystem.c の 67 行で定義されています。
00068 { 00069 00070 char *p; 00071 char *get_tail; 00072 00073 get_tail = strtail( PathName ); 00074 for( p = get_tail; p >= PathName; p-- ) // 文字列の最後から最初まで 00075 { 00076 if ( ('\\'==*p) && !isJMS(PathName,p-PathName) ) 00077 return get_tail; // ファイル名はここまで 00078 00079 if ( '.' == *p ) 00080 return p+1; // '.' を発見 00081 } 00082 return get_tail; // 拡張子なし 00083 }//GetFileExtension |
|
dkcSJISFileSystem.c の 113 行で定義されています。 参照先 BOOL, と dkcIsRelativityPath().
00114 { 00115 return !dkcIsRelativityPath(path); 00116 } |
|
dkcSJISFileSystem.c の 86 行で定義されています。 参照先 BOOL, dkcdMAXPATH_BUFFER, dkcFileExist(), dkcIsNativePathString(), dkcToAbsolutelyPath(), DKUTIL_FAILED, FALSE, と TRUE.
00086 { 00087 char dest[dkcdMAXPATH_BUFFER]; 00088 const size_t dsize = dkcdMAXPATH_BUFFER; 00089 00090 //相対パス?絶対パス?でもそのファイルが存在するか? 00091 if(FALSE==dkcFileExist(path)){ 00092 return FALSE; 00093 } 00094 //pathを正規化 00095 if(DKUTIL_FAILED(dkcToAbsolutelyPath(dest,dsize,path,size))){ 00096 return FALSE; 00097 } 00098 //正規化して、ファイルに使用して良い文字列を使っているか? 00099 if(FALSE==dkcIsNativePathString(dest,strlen(dest))){ 00100 return FALSE; 00101 } 00102 00103 return TRUE; 00104 } |
|
dkcSJISFileSystem.c の 105 行で定義されています。 参照先 BOOL, dkcmNOT_ASSERT, dkcSJIS_StrChrSearch(), FALSE, NULL, と TRUE. 参照元 dkcIsAbsolutelyPath(), と dkcToAbsolutelyPath().
00106 { 00107 int point; 00108 dkcmNOT_ASSERT(NULL==path); 00109 point = dkcSJIS_StrChrSearch(path,':'); 00110 if(point == -1) return TRUE; 00111 return FALSE; 00112 } |
|
文字列 str の str[nPos] について、
dkcSJISFileSystem.c の 36 行で定義されています。 参照先 DKC_EXTERN, jms1(), と jms2(). 参照元 isJMS().
00037 { 00038 int i; 00039 int state; // { 0, 1, 2 } = { 1バイト文字, 2バイト文字の第1バイト, 2バイト文字の第2バイト } 00040 00041 state = 0; 00042 for( i = 0; str[i] != '\0'; i++ ) 00043 { 00044 if ( ( state == 0 ) && ( jms1( str[i] ) ) ) state = 1; // 0 -> 1 00045 else if ( ( state == 1 ) && ( jms2( str[i] ) ) ) state = 2; // 1 -> 2 00046 else if ( ( state == 2 ) && ( jms1( str[i] ) ) ) state = 1; // 2 -> 1 00047 else state = 0; // 2 -> 0, その他 00048 00049 // str[nPos] での状態を返す。 00050 if ( i == nPos ) return state; 00051 } 00052 return 0; 00053 } |
|
srcの一番後ろににがついていたらTRUE \ dkcSJISFileSystem.c の 119 行で定義されています。 参照先 BOOL, dkcSJIS_SearchPathSepLast(), FALSE, と TRUE. 参照元 dkcPathStringElementInsert_Logic(), dkcPathStringNormalizeConcatenateLogic(), と dkcPushBackPathSep().
00119 { 00120 int point; 00121 point = dkcSJIS_SearchPathSepLast(src); 00122 //if(point != -1 && (size_t)point == dlen - 1/*&& (size_t)point != dlen*/) 00123 if((size_t)point == dlen - 1) 00124 { //みつかった。 00125 return TRUE; 00126 } 00127 //みつからない。 00128 return FALSE; 00129 } |
|
パスを正規化して繋げる。
dkcSJISFileSystem.c の 637 行で定義されています。 参照先 DKC_PATHSTRING, dkcdMAXPATH, dkcmNOT_ASSERT, dkcPathStringCopy(), dkcPathStringNormalizeConcatenateLogic(), edk_FAILED, dkc_String::mByteSize, と dkc_PathString::mString.
00638 { 00639 int result; 00640 00641 dkcmNOT_ASSERT(ptr->mString->mByteSize + size >= dkcdMAXPATH); 00642 if(ptr->mString->mByteSize + size >= dkcdMAXPATH) 00643 {//これ以上は入れられない。 00644 return edk_FAILED; 00645 } 00646 00647 if(ptr->mString->mByteSize) 00648 {//すでに入っているものがある。 00649 result = dkcPathStringNormalizeConcatenateLogic(ptr,buff,size); 00650 } 00651 else 00652 {//何も無い時はこちらで 00653 result = dkcPathStringCopy(ptr,buff,size); 00654 } 00655 //return dkcPathStringNormalizeInsertLogic(ptr,buff,size,dkcStringConcatenate); 00656 return result; 00657 } |
|
パスを正規化して入れる。
dkcSJISFileSystem.c の 598 行で定義されています。 参照先 DKC_PATHSTRING, dkcdMAXPATH, dkcmNOT_ASSERT, dkcPathStringNormalizeCopyLogic(), dkcStringCopy(), edk_FAILED, dkc_String::mByteSize, と dkc_PathString::mString. 参照元 dkcAllocPathString(), dkcPathStringConcatenate(), と dkcPathStringNormalizeConcatenateLogic().
00599 { 00600 00601 dkcmNOT_ASSERT(ptr->mString->mByteSize + size >= dkcdMAXPATH); 00602 if(ptr->mString->mByteSize + size >= dkcdMAXPATH) 00603 {//これ以上は入れられない。 00604 return edk_FAILED; 00605 } 00606 return dkcPathStringNormalizeCopyLogic(ptr,buff,size,dkcStringCopy); 00607 } |
|
dkcSJISFileSystem.c の 380 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringDevideBegin_Logic(), と dkc_PathString::mIterateCount.
00381 { 00382 return dkcPathStringDevideBegin_Logic(ptr,&ptr->mIterateCount,buff,size); 00383 } |
|
dkcSJISFileSystem.c の 396 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcmNOT_ASSERT, dkcPathStringPointer(), dkcSJIS_StrChrSearch(), DKUTIL_FAILED, edk_BufferOverFlow, edk_EndProcess, edk_FAILED, edk_SUCCEEDED, と NULL. 参照元 dkcPathStringDevideBegin().
00397 { 00398 int i,point; 00399 const char *p; 00400 dkcmNOT_ASSERT(NULL==ptr || NULL==buff || 0==size); 00401 00402 //len = dkcPathStringSize(ptr); 00403 p = dkcPathStringPointer(ptr); 00404 00405 point = dkcSJIS_StrChrSearch(p,'\\'); 00406 if(-1==point){return edk_EndProcess;} 00407 00408 for(i=0;i<point;i++){//drive指定のものがあるかどうか。 00409 if(':'==p[i]){ 00410 if(DKUTIL_FAILED(dkc_strcpy( 00411 buff,size,p,(size_t)i//-1 00412 ))) 00413 { 00414 return edk_BufferOverFlow; 00415 } 00416 point = dkcSJIS_StrChrSearch(&p[i],'\\');//次の物を見つける。 00417 //(まぁ:の次は\\と言う事が決まっているけど、いちおう。 00418 *count = (size_t)i + point + 1;//次に始めるのは 00419 return edk_SUCCEEDED; 00420 } 00421 } 00422 if(DKUTIL_FAILED(dkc_strcpy( 00423 buff,size,p,(size_t)point-1 00424 ))) 00425 { 00426 return edk_FAILED; 00427 } 00428 *count = (size_t)point + 1;//次に始めるのは 00429 return edk_SUCCEEDED; 00430 } |
|
dkcSJISFileSystem.c の 391 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringDevideEnd_Logic(), と dkc_PathString::mIterateCount.
00391 { 00392 dkcPathStringDevideEnd_Logic(&ptr->mIterateCount); 00393 } |
|
dkcSJISFileSystem.c の 469 行で定義されています。
00469 { 00470 *count = 0; 00471 } |
|
dkcSJISFileSystem.c の 385 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringDevideNext_Logic(), と dkc_PathString::mIterateCount.
00386 { 00387 return dkcPathStringDevideNext_Logic(ptr,&ptr->mIterateCount,buff,size); 00388 00389 } |
|
dkcSJISFileSystem.c の 432 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcPathStringPointer(), dkcSJIS_StrChrSearch(), dkcStringSize(), DKUTIL_FAILED, edk_EndProcess, edk_FAILED, edk_SUCCEEDED, と dkc_PathString::mString. 参照元 dkcPathStringDevideNext().
00433 { 00434 int point; 00435 const char *p; 00436 size_t len; 00437 //len = dkcPathStringSize(ptr); 00438 p = dkcPathStringPointer(ptr); 00439 len = dkcStringSize(ptr->mString); 00440 if(len <= *count) 00441 {//もうこの関数を呼び出すのは終わりだっちゅうに!! 00442 return edk_EndProcess; 00443 } 00444 point = dkcSJIS_StrChrSearch(&p[*count],'\\'); 00445 if(-1==point) 00446 {//最後まで来ちまった。 00447 00448 00449 len -= *count; 00450 if(DKUTIL_FAILED(dkc_strcpy(//残り物を全部コピー 00451 buff,size,&p[*count],len 00452 ))) 00453 { 00454 return edk_FAILED; 00455 } 00456 *count += len; 00457 return edk_SUCCEEDED;//out 00458 } 00459 if(DKUTIL_FAILED(dkc_strcpy( 00460 buff,size,&p[*count],(size_t)point 00461 ))) 00462 { 00463 return edk_FAILED; 00464 } 00465 *count += (size_t)point + 1;//次に始めるのは 00466 return edk_SUCCEEDED;//out 00467 } |
|
dkcSJISFileSystem.c の 500 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringPointer(), dkcPathStringSize(), dkcSJIS_SearchPathSep(), dkcStringErase(), と dkc_PathString::mString.
00502 { 00503 const char *p = dkcPathStringPointer(ptr); 00504 int endlen = dkcSJIS_SearchPathSep(&p[count]); 00505 00506 if(-1==endlen){ 00507 endlen = dkcPathStringSize(ptr); 00508 endlen = endlen - count; 00509 }else{ 00510 //endlen;//マイナスしておく \\をReplaceしないため 00511 } 00512 return dkcStringErase(ptr->mString,count - 1,(size_t)endlen + 1);//count -1は前の\\を消すためendlen + 1は-1した為 00513 } |
|
パスの要素を挿入する。(正規化はしない lenは文字数
dkcSJISFileSystem.c の 473 行で定義されています。 参照先 DKC_PATHSTRING, dkcIsNativePathString(), dkcIsTailPathSep(), dkcPushBackPathSep(), dkcStringInsert(), edk_FAILED, edk_OutOfMemory, FALSE, と dkc_PathString::mString.
00475 { 00476 int r; 00477 size_t size = len + 5; 00478 00479 char *p; 00480 if(len==0 || FALSE==dkcIsNativePathString(src,len)) 00481 { 00482 return edk_FAILED; 00483 } 00484 if(FALSE==dkcIsTailPathSep(src,len))//後ろにPathSeparatorが無い!! 00485 { 00486 p = malloc(size); 00487 00488 if(!p) return edk_OutOfMemory; 00489 strcpy(p,src);//あまり使いたくないけどすでにバッファは保証されているのでstrcpy 00490 dkcPushBackPathSep(p,len,size); 00491 00492 r = dkcStringInsert(ptr->mString,count,p,strlen(p)); 00493 free(p); 00494 }else{ 00495 r = dkcStringInsert(ptr->mString,count,src,len); 00496 } 00497 return r; 00498 } |
|
パスの要素を置換する。(正規化はしない lenは文字数
dkcSJISFileSystem.c の 517 行で定義されています。 参照先 DKC_PATHSTRING, dkcIsNativePathString(), dkcPathStringPointer(), dkcPathStringSize(), dkcSJIS_SearchPathSep(), dkcStringReplace(), edk_FAILED, FALSE, と dkc_PathString::mString.
00519 { 00520 const char *p = dkcPathStringPointer(ptr); 00521 int endlen; 00522 if(len==0 || FALSE==dkcIsNativePathString(src,len)) 00523 { 00524 return edk_FAILED; 00525 } 00526 endlen = dkcSJIS_SearchPathSep(&p[count]);//countから検索している 00527 if(-1==endlen){ 00528 endlen = dkcPathStringSize(ptr); 00529 endlen = endlen - count; 00530 }else{ 00531 if(0 != endlen) 00532 endlen--;//マイナスしておく \\をReplaceしないため 00533 } 00534 return dkcStringReplace(ptr->mString,count,count + endlen,src,len); 00535 /* 00536 size_t size = len + 5; 00537 int r; 00538 // int point; 00539 const char *pointer; 00540 char *p ; 00541 if(FALSE==dkcIsTailPathSep(src,len))//後ろにPathSeparatorが無い!! 00542 { 00543 //文字列をちと変更 00544 p = malloc(size); 00545 if(!p) return edk_OutOfMemory; 00546 strcpy(p,src); 00547 r = dkcPushBackPathSep(p,len,size); 00548 }else{ 00549 p = (char *)src; 00550 } 00551 pointer = dkcPathStringPointer(ptr); 00552 //countから調べる。 00553 dkcSJIS_SearchPathSep(&pointer[count]); 00554 */ 00555 00556 00557 00558 00559 00560 } |
|
dkcSJISFileSystem.c の 702 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcdPATH_SEP, dkcSJIS_StrChrSearchTail(), dkcStringPointer(), dkcStringSize(), edk_FAILED, と dkc_PathString::mString.
00703 { 00704 const char *p = dkcStringPointer(ptr->mString); 00705 int point = dkcSJIS_StrChrSearchTail(p,strlen(p),dkcdPATH_SEP); 00706 size_t len = dkcStringSize(ptr->mString); 00707 //if(point - 1 <= 0) return edk_FAILED; 00708 if(point < 0) return edk_FAILED; 00709 if((size_t)(point + 1) > len) return edk_FAILED; 00710 //if((size_t)point == len) return edk_FAILED;//ファイル名が無い。 00711 return dkc_strcpy(buff,size,p,point);//\\も含める。 00712 00713 } |
|
dkcSJISFileSystem.c の 661 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcSJIS_StrChrSearch(), dkcStringPointer(), edk_Not_Found, と dkc_PathString::mString.
00661 { 00662 const char *p = dkcStringPointer(ptr->mString); 00663 int point = dkcSJIS_StrChrSearch(p,':'); 00664 if(-1 == point) return edk_Not_Found;//見つからない。 00665 //return dkc_memcpy(buff,size,p,(size_t)point - 1); 00666 return dkc_strcpy(buff,size,p,(size_t)1);//driveなら1文字で十分だよね^^; 00667 } |
|
dkcSJISFileSystem.c の 669 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcSJIS_SearchPathSep(), dkcSJIS_StrChrSearchLast(), dkcStringPointer(), dkcStringSize(), edk_FAILED, edk_Not_Found, と dkc_PathString::mString.
00670 { 00671 int point2; 00672 size_t len; 00673 const char *p = dkcStringPointer(ptr->mString); 00674 int point = dkcSJIS_StrChrSearchLast(p,'.'); 00675 00676 if(point < 0) return edk_Not_Found;//見つからない。 00677 00678 point2 = dkcSJIS_SearchPathSep(&p[point]); 00679 if(point < point2){//C:\ok.OK\folderのような状況になっている。 00680 return edk_Not_Found; 00681 } 00682 len = dkcStringSize(ptr->mString); 00683 //if(point - 1 <= 0) return edk_FAILED; 00684 00685 if((size_t)(point + 1) > len) return edk_FAILED;//Logicalなエラー?? 00686 return dkc_strcpy(buff,size,&p[point + 1],(size_t)len - (size_t)point ); 00687 00688 } |
|
dkcSJISFileSystem.c の 690 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcdPATH_SEP, dkcSJIS_StrChrSearchLast(), dkcStringPointer(), dkcStringSize(), edk_FAILED, と dkc_PathString::mString.
00691 { 00692 const char *p = dkcStringPointer(ptr->mString); 00693 int point = dkcSJIS_StrChrSearchLast(p,dkcdPATH_SEP); 00694 size_t len = dkcStringSize(ptr->mString); 00695 //if(point - 1 <= 0) return edk_FAILED; 00696 if(point < 0) return edk_FAILED; 00697 if((size_t)(point + 1) > len) return edk_FAILED; 00698 if((size_t)point == len) return edk_FAILED;//ファイル名が無い。 00699 return dkc_strcpy(buff,size,&p[point + 1],(size_t)len - (size_t)point ); 00700 } |
|
dkcSJISFileSystem.c の 609 行で定義されています。 参照先 DKC_PATHSTRING, dkcdMAXPATH_BUFFER, dkcdPATH_SEP_STR, dkcIsTailPathSep(), dkcPathStringCopy(), dkcPathStringPointer(), dkcPathStringSize(), dkcStringConcatenate(), DKUTIL_FAILED, edk_FAILED, FALSE, dkc_PathString::mString, と ToAbsolutelyLogic(). 参照元 dkcPathStringConcatenate().
00611 { 00612 char dest[dkcdMAXPATH_BUFFER]; 00613 00614 00615 if(FALSE==dkcIsTailPathSep(dkcPathStringPointer(ptr),dkcPathStringSize(ptr))) 00616 { 00617 dkcStringConcatenate(ptr->mString,dkcdPATH_SEP_STR,1); 00618 } 00619 dkcStringConcatenate(ptr->mString,buff,size); 00620 00621 size = dkcPathStringSize(ptr) + 1; 00622 00623 //p = malloc(dkcPathStringSize(ptr)); 00624 //if(!p) return edk_OutOfMemory; 00625 00626 00627 if(DKUTIL_FAILED( 00628 ToAbsolutelyLogic(dest,sizeof(dest),dkcPathStringPointer(ptr)) 00629 )){ 00630 return edk_FAILED; 00631 } 00632 00633 return dkcPathStringCopy(ptr,dest,strlen(dest)); 00634 } |
|
dkcSJISFileSystem.c の 567 行で定義されています。 参照先 DKC_PATHSTRING, DKC_STRING, dkcdMAXPATH_BUFFER, dkcmNOT_ASSERT, dkcToAbsolutelyPath(), DKUTIL_FAILED, dkc_PathString::mString, と NULL. 参照元 dkcPathStringCopy().
00569 { 00570 //const size_t bsize = dkcdMAXPATH_BUFFER + 1; 00571 size_t len; 00572 int result; 00573 //char *pb = malloc(bsize); 00574 //if(NULL== pb) return edk_OutOfMemory; 00575 char pb[dkcdMAXPATH_BUFFER]; 00576 size_t bsize = sizeof(pb); 00577 00578 result = dkcToAbsolutelyPath(pb,bsize,buff,size); 00579 00580 00581 len = strlen(pb); 00582 00583 # ifdef DEBUG //ありえないよ~エラーチェック 00584 dkcmNOT_ASSERT(DKUTIL_FAILED(result)); 00585 dkcmNOT_ASSERT(len >= bsize);// >=にするのはNULL文字が潰されているかどうか。 00586 dkcmNOT_ASSERT(NULL==function__); 00587 # endif 00588 if(DKUTIL_FAILED(result)){ 00589 goto Error; 00590 } 00591 result = function__(ptr->mString,pb,len); 00592 00593 Error: 00594 //if(pb){free(pb);pb=NULL;} 00595 return result; 00596 } |
|
dkcSJISFileSystem.c の 372 行で定義されています。 参照先 DKC_PATHSTRING, dkcStringPointer(), と dkc_PathString::mString. 参照元 dkcPathStringDevideBegin_Logic(), dkcPathStringDevideNext_Logic(), dkcPathStringElementErase_Logic(), dkcPathStringElementReplace_Logic(), と dkcPathStringNormalizeConcatenateLogic().
00373 { 00374 return dkcStringPointer(p->mString); 00375 } |
|
dkcSJISFileSystem.c の 367 行で定義されています。 参照先 DKC_PATHSTRING, dkcStringSize(), と dkc_PathString::mString. 参照元 dkcPathStringElementErase_Logic(), dkcPathStringElementReplace_Logic(), と dkcPathStringNormalizeConcatenateLogic().
00368 { 00369 return dkcStringSize(p->mString); 00370 } |
|
path separatorを挿入する必要があり、挿入出来たらTRUE
dkcSJISFileSystem.c の 131 行で定義されています。 参照先 dkcdPATH_SEP, dkcIsTailPathSep(), edk_EndProcess, edk_OutputBufferWasLost, edk_SUCCEEDED, と FALSE. 参照元 dkcDirectoryConcatenate(), と dkcPathStringElementInsert_Logic().
00131 { 00132 if(FALSE==dkcIsTailPathSep(dest,dlen)){ 00133 if(size < dlen + 2){ 00134 return edk_OutputBufferWasLost;//バッファが足らんよ! 00135 } 00136 dest[dlen ] = dkcdPATH_SEP; 00137 dest[dlen + 1] = '\0';//こいつを忘れてはいけない。 00138 return edk_SUCCEEDED; 00139 } 00140 return edk_EndProcess; 00141 } |
|
dkcSJISFileSystem.c の 732 行で定義されています。 参照先 BOOL, dkcIsEffectivePath(), dkcmNOT_ASSERT, と FALSE.
00732 { 00733 #ifdef DEBUG 00734 size_t len = strlen(filename); 00735 dkcmNOT_ASSERT(0==len || FALSE==dkcIsEffectivePath(filename,len)); 00736 #endif 00737 # ifdef WIN32 00738 return(0 != SetCurrentDirectory(filename)); 00739 //return (_chdir(filename)==0); 00740 # else 00741 return (chdir(filename)==0); 00742 # endif 00743 } |
|
パスを正規化(相対パスから絶対パス)する関数
dkcSJISFileSystem.c の 204 行で定義されています。 参照先 dkcCurrentDirectoryConcatenate(), dkcdMAXPATH_BUFFER, dkcIsRelativityPath(), edk_FAILED, edk_OutOfMemory, MAX_PATH_CHECK, NULL, ToAbsolutelyLogic(), と TRUE. 参照元 dkcIsEffectivePath(), と dkcPathStringNormalizeCopyLogic().
00205 { 00206 char *tp = NULL; 00207 int r; 00208 MAX_PATH_CHECK(dsize); 00209 00210 00211 if(NULL==dest) return edk_FAILED; 00212 00213 if(dkcIsRelativityPath(src)==TRUE) 00214 {//カレントディレクトリを付加する。 00215 00216 tp = malloc(dkcdMAXPATH_BUFFER); 00217 if(NULL==tp) return edk_OutOfMemory; 00218 00219 dkcCurrentDirectoryConcatenate(tp,dkcdMAXPATH_BUFFER,src); 00220 r = ToAbsolutelyLogic(dest,dsize,tp); 00221 free(tp); 00222 return r; 00223 00224 } 00225 return ToAbsolutelyLogic(dest,dsize,src); 00226 00227 00228 00229 /* 00230 状態繊維 00231 PATH_SEP 00232 . 00233 sjis 00234 00236 ..... 00237 ../../ 00238 /././ 00239 00240 */ 00241 /* 00242 size_t i,di; 00243 // size_t j; 00244 int point; 00245 //char prev; 00246 const char *pathsep="\\/"; 00247 DKC_SINGLELIST_OBJECT *plo = NULL; 00248 DKC_SINGLELIST *lit = NULL; 00249 00250 00251 di = 0; 00252 00253 if(dsize < ssize){ 00254 return edk_ArgumentException; 00255 } 00256 //list確保 00257 plo = dkcAllocSingleListObject(NULL,20); 00258 if(NULL==plo) return edk_FAILED; 00259 00260 //directoryをパース 00261 for(i=0;;){ 00262 point = dkcSJIS_StrChrSearchInStr(&src[i],pathsep); 00263 if(point < 0){ 00264 if(i != ssize){ 00265 if(FALSE==plo->push_back(plo,&src[i],size - i)){ 00266 return edk_FAILED; 00267 } 00268 } 00269 break; 00270 } 00271 00272 if(FALSE 00273 ==plo->push_back(plo,&src[i],point - 1)//見つかったところまでだから-1 00274 ) 00275 { 00276 return edk_FAILED; 00277 } 00278 00279 i += point; 00280 } 00281 00282 for(i=0;i<ssize;){ 00283 00284 00285 if(dkcmIsSJIS1(src[i]) && dkcmIsSJIS2(src[i + 1])) 00286 {//SJIS抜かし 00287 i++; 00288 i++; 00289 continue; 00290 } 00291 // src == // 00292 if(prev==dkcdPATH_SEP && src[i] == dkcdPATH_SEP) 00293 { 00294 i++; 00295 continue; 00296 } 00297 // src == .. 00298 if(prev=='.' && src[i] == '.') 00299 { 00300 while(src[i] != '.') i++; 00301 if(dkcdPATH_SEP==src[i]) i++; 00302 point = dkcSJIS_StrChrSearch(&src[i],dkcdPATH_SEP); 00303 00304 if(point == -1){ 00305 break; 00306 } 00307 i += point; 00308 00309 continue; 00310 } 00311 00312 dest[di] = src[i]; 00313 di++; 00314 i++; 00315 prev = src[i]; 00316 } 00317 00318 00319 return edk_SUCCEEDED; */ 00320 } |
|
dkcSJISFileSystem.c の 54 行で定義されています。 参照先 DKC_INLINE, と dkcIsShiftJIS().
00054 { 00055 return dkcIsShiftJIS(str,nPos); 00056 } |
|
dkcSJISFileSystem.c の 19 行で定義されています。 参照先 BOOL, と DKC_INLINE. 参照元 dkcIsShiftJIS().
00019 { 00020 return (((((unsigned char)(c))>=0x81)&&(((unsigned char)(c))<=0x9F))||((((unsigned char)(c))>=0xE0)&&(((unsigned char)(c))<=0xFC))); 00021 } |
|
dkcSJISFileSystem.c の 22 行で定義されています。 参照先 BOOL, と DKC_INLINE. 参照元 dkcIsShiftJIS().
00022 { 00023 return ((((unsigned char)(c))!=0x7F)&&(((unsigned char)(c))>=0x40)&&(((unsigned char)(c))<=0xFC)); 00024 } |
|
文字列末尾の文字 '' の位置を返す
dkcSJISFileSystem.c の 58 行で定義されています。 参照先 DKC_INLINE.
00059 { 00060 return strchr( stringg, '\0' ); 00061 }//strtail |
|
dkcSJISFileSystem.c の 185 行で定義されています。 参照先 edk_FAILED, edk_SUCCEEDED, MAX_PATH_CHECK, と NULL. 参照元 dkcPathStringNormalizeConcatenateLogic(), と dkcToAbsolutelyPath().
00186 { 00187 /*if(dsize < dkcdMAXPATH_BUFFER){//こんなバッファじゃどうなるか分からないよ^^; 00188 return edk_BufferOverFlow; 00189 }*/ 00190 MAX_PATH_CHECK(dsize); 00191 # ifdef WIN32 00192 00193 if(NULL==_fullpath(dest,src,dsize)){ 00194 return edk_FAILED; 00195 } 00196 # else//unix or linux ?? 00197 if(NULL==__realpath(src,dest)){ 00198 return edk_FAILED; 00199 } 00200 # endif 00201 return edk_SUCCEEDED; 00202 } |