#include "dkcOSIndependent.h"
#include "dkcSJISFileSystem.h"
#include "dkcStdio.h"
#include "dkcString.h"
#include "dkcThreadLock.h"
#include "dkcSingleList.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) |
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 の 180 行で定義されています。 |
|
dkcSJISFileSystem.c の 1391 行で定義されています。 参照先 DKC_FINDFILE, と dkcAllocate().
01392 { 01393 DKC_FINDFILE *p; 01394 p = (DKC_FINDFILE *)dkcAllocate(sizeof(DKC_FINDFILE)); 01395 return p; 01396 } |
|
dkcSJISFileSystem.c の 326 行で定義されています。 参照先 DKC_PATHSTRING, dkcAllocate(), dkcAllocString(), dkcdMAXPATH_BUFFER, dkcFree(), dkcFreeString(), dkcIsNativePathString(), dkcPathStringCopy(), FALSE, dkc_PathString::mIterateCount, dkc_PathString::mString, と NULL.
00327 { 00328 DKC_PATHSTRING *p; 00329 size_t len; 00330 /*if(NULL==path){ 00331 return NULL; 00332 }*/ 00333 00334 p = (DKC_PATHSTRING *)dkcAllocate(sizeof(DKC_PATHSTRING)); 00335 if(NULL==p) return NULL; 00336 00337 p->mString = dkcAllocString(dkcdMAXPATH_BUFFER + 1);//このサイズじゃないとダメ 00338 if(NULL==p->mString) goto Error; 00339 00340 //パス名をコピー 00341 if(path){ 00342 len = strlen(path); 00343 //ネイティブなパスを入れる。 00344 if(FALSE==dkcIsNativePathString(path,len)){ 00345 goto Error; 00346 } 00347 dkcPathStringCopy(p,path,len); 00348 } 00349 p->mIterateCount = 0; 00350 00351 return p; 00352 Error: 00353 if(p){ 00354 dkcFreeString(&p->mString); 00355 } 00356 dkcFree((void **)&p); 00357 return NULL; 00358 } |
|
dkcSJISFileSystem.c の 812 行で定義されています。 参照先 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.
00813 { 00814 BOOL result; 00815 char work[dkcdMAXPATH_BUFFER]; 00816 unsigned long n = 0; 00817 unsigned long len = strlen(pPath); 00818 00819 #ifdef WIN32//sjis support 00820 SECURITY_ATTRIBUTES attr; 00821 00822 DKUTIL_STRUCTURE_INIT(attr); 00823 NULL_CHAR_ARRAY(work); 00824 00825 //error check 00826 if(dkcdMAXPATH_LEN < len){ 00827 dkcmNOT_ASSERT_MESSAGE("pathが長すぎる。",pPath); 00828 return edk_FAILED; 00829 } 00830 if(0==len ){ 00831 return edk_ArgumentException; 00832 } 00833 00834 //まずは一つ目を撃破 00835 if ( dkcmIsSJIS1(pPath[n]) || ! dkcmIS_INVALID_FOLDERNAME_CHAR(pPath[n]) ) 00836 {//SJISの1文字目かINVALIDな値では無かったら。 00837 work[n] = pPath[n]; 00838 if(1==len){ 00839 //フォルダ作成 00840 attr.nLength = sizeof(SECURITY_ATTRIBUTES); 00841 attr.lpSecurityDescriptor = NULL; 00842 attr.bInheritHandle = FALSE; 00843 00844 result = dkcCreateDirectoryLogic( work, &attr ); 00845 00846 dkcmNOT_ASSERT(FALSE==result && "directoryを作れなかった" ); 00847 return edk_SUCCEEDED; 00848 } 00849 } 00850 n++; 00851 //二つ目から開始 00852 while ( n < len ) 00853 { 00854 //フォルダ名取得 00855 while ( n < len ) 00856 { 00857 00858 if(! dkcmIsSJIS1(pPath[n - 1]) && ! dkcmIsSJIS2(pPath[n]) ) 00859 {//SJISではない!! 00860 if ( ( dkcmIS_PATH_SEP(pPath[n]) ) /*&& pPath[n] != '\0'*//*(n != '\0')*/ ) 00861 { 00862 if ( work[n-1] != ':' ) 00863 {//driveを読み込ませたくないらしい。 00864 break; 00865 } 00866 } 00867 else if(dkcmIS_INVALID_FOLDERNAME_CHAR(pPath[n])) 00868 {//SJIS問題をクリアしたのに間違いだった 00869 return edk_FAILED; 00870 } 00871 } 00872 00873 work[n] = pPath[n]; 00874 n++; 00875 } 00876 work[n] = '\0'; 00877 00878 //フォルダ作成 00879 attr.nLength = sizeof(SECURITY_ATTRIBUTES); 00880 attr.lpSecurityDescriptor = NULL; 00881 attr.bInheritHandle = FALSE; 00882 00883 result = dkcCreateDirectoryLogic( work, &attr ); 00884 00885 //dkcmNOT_ASSERT("directoryを作れなかった" && FALSE==result); 00886 if(FALSE==result){ 00887 return edk_FAILED; 00888 } 00889 work[n++] = dkcdPATH_SEP; 00890 } 00891 #else //no support sjis 00892 NULL_CHAR_ARRAY(work); 00893 00894 //error check 00895 if(dkcdMAXPATH_LEN < len){ 00896 dkcmNOT_ASSERT_MESSAGE("pathが長すぎる。",pPath); 00897 return edk_FAILED; 00898 } 00899 if(0==len ){ 00900 return edk_ArgumentException; 00901 } 00902 00903 while ( n < len ) 00904 { 00905 //フォルダ名取得 00906 while ( n < len ) 00907 { 00908 if ( ( dkcmIS_PATH_SEP(pPath[n]) ) && (n != '\0') ) 00909 { 00910 if ( work[n-1] != ':' )//Linuxのドライブのパスはコレデいいのかな? 00911 { 00912 break; 00913 } 00914 } 00915 work[n] = pPath[n]; 00916 n++; 00917 } 00918 work[n] = '\0'; 00919 00920 result = dkcCreateDirectoryLogic( work,NULL ); 00921 00922 //dkcmNOT_ASSERT("directoryを作れなかった" && FALSE==result); 00923 if(FALSE==result){ 00924 return edk_FAILED; 00925 } 00926 work[n++] = dkcdPATH_SEP; 00927 } 00928 00929 #endif 00930 00931 return edk_SUCCEEDED; 00932 } |
|
dkcSJISFileSystem.c の 801 行で定義されています。 参照先 BOOL. 参照元 dkcCreateDirectory().
00801 { 00802 #ifdef WIN32 00803 //return (0 == _mkdir( dir )); 00804 return (0 != CreateDirectory(dir,(SECURITY_ATTRIBUTES *)ptr)); 00805 #else 00806 return (0 == mkdir( dir )); 00807 #endif 00808 } |
|
dkcSJISFileSystem.c の 1059 行で定義されています。 参照先 BOOL, dkcFileExist(), FALSE, と TRUE.
01060 { 01061 FILE *fp; 01062 int r = FALSE; 01063 if(FALSE==dkcFileExist(filename) || TRUE==rewrite){ 01064 fp = fopen(filename,"wb"); 01065 if(!fp){ 01066 return r; 01067 } 01068 fclose(fp); 01069 r = TRUE; 01070 } 01071 return r; 01072 } |
|
dkcSJISFileSystem.c の 168 行で定義されています。 参照先 dkcDirectoryConcatenate(), dkcdMAXPATH_LEN, dkcGetCurrentDirectory(), と dkcmNOT_ASSERT.
00169 { 00170 //size_t len; 00171 //int point; 00172 00173 dkcmNOT_ASSERT(dsize <= dkcdMAXPATH_LEN);//<=はNULL文字も含むため。 00174 00175 dkcGetCurrentDirectory(dest,dsize); 00176 00177 00178 return dkcDirectoryConcatenate(dest,strlen(dest),dsize,src); 00179 } |
|
dkcSJISFileSystem.c の 146 行で定義されています。 参照先 dkc_strcat_amap(), dkcmNOT_ASSERT, dkcPushBackPathSep(), と edk_FAILED. 参照元 dkcCurrentDirectoryConcatenate().
00146 { 00147 //int point; 00148 //error check 00149 dkcmNOT_ASSERT(dlen + 2 > dsize); 00150 if(dlen + 2 > dsize){ 00151 return edk_FAILED; 00152 } 00153 00154 /*point = dkcSJIS_StrChrSearchTail(dest,dlen,dkcdPATH_SEP); 00155 if(point != -1 && (size_t)point != dlen) 00156 {//path separatorが見つかり、それがdestの最期に無い時 00157 if(!dkcmIS_PATH_SEP(src[0]) ) 00158 {//path separatorで無い時 00159 //path 区切り文字を付加してやる。 00160 dest[dlen ] = dkcdPATH_SEP; 00161 dest[dlen + 1] = '\0';//こいつを忘れてはいけない。 00162 } 00163 }*/ 00164 dkcPushBackPathSep(dest,dlen,dsize); 00165 return dkc_strcat_amap(dest,dsize,dlen,src,strlen(src)); 00166 } |
|
dkcSJISFileSystem.c の 934 行で定義されています。 参照先 BOOL, dkcFileCopyEx(), と FALSE.
00934 { 00935 return dkcFileCopyEx(dest,src,1024 * 64,FALSE); 00936 } |
|
dkcSJISFileSystem.c の 938 行で定義されています。 参照先 BOOL, dkcAllocThreadLock(), dkcCreateEmptyFile(), dkcFClose(), dkcFileSize(), dkcFOpen(), dkcFreeThreadLock(), dkcLoadBinary(), dkcmFORCE_NOT_ASSERT, dkcSaveBinary(), dkcThreadLock_Lock(), dkcThreadLock_Unlock(), DKUTIL_FAILED, FALSE, NULL, ODS, と TRUE. 参照元 dkcFileCopy().
00940 { 00941 void *buff; 00942 FILE *srcf,*destf; 00943 size_t filesize;//ファイルサイズ 00944 size_t readed;//読み込んだデータ 00945 size_t count;//count 00946 size_t i; 00947 size_t rest;//残り 00948 int result = FALSE;//戻り値 00949 DKC_THREAD_LOCK *lock = NULL; 00950 00951 00952 if(NULL==dest || NULL==src){ 00953 return FALSE; 00954 } 00955 if(inner_buffer_size <= 1024){ 00956 inner_buffer_size = 1024; 00957 } 00958 00959 //バッファの準備 00960 buff = malloc(inner_buffer_size); 00961 if(NULL==buff){ 00962 inner_buffer_size = 1024 * 256; 00963 buff = malloc(inner_buffer_size); 00964 if(NULL==buff) 00965 return FALSE; 00966 } 00967 //thread lock 00968 if(bThreadLock){ 00969 lock = dkcAllocThreadLock(); 00970 if(NULL==lock){ 00971 goto Error; 00972 } 00973 dkcThreadLock_Lock(lock); 00974 } 00975 //ちっちゃい場合 00976 filesize = dkcFileSize(src); 00977 for(;;) 00978 {//non loop 00979 if(0 == filesize) 00980 {//ファイルサイズが0の場合 00981 dkcCreateEmptyFile(dest); 00982 break; 00983 } 00984 if(filesize < inner_buffer_size) 00985 {//ファイルサイズがバッファに収まってしまう場合。 00986 if(DKUTIL_FAILED(dkcLoadBinary(buff,filesize,src,&readed))) 00987 { 00988 goto Error; 00989 } 00990 # ifdef DEBUG 00991 if(readed != filesize){ 00992 ODS("readed != filesize why?\n"); 00993 } 00994 # endif 00995 dkcSaveBinary(buff,filesize,dest); 00996 break; 00997 } 00998 //バッファを使わなければコピーできない場合。 00999 01000 srcf = dkcFOpen(src,"rb"); 01001 if(NULL==srcf) goto Error; 01002 destf = dkcFOpen(dest,"wb"); 01003 if(NULL==destf) goto Error; 01004 01005 //ループする回数を計算 01006 count = filesize / inner_buffer_size; 01007 01008 for(i=0;i<count;i++){ 01009 dkcmFORCE_NOT_ASSERT(1 != fread(buff,inner_buffer_size,1,srcf)); 01010 dkcmFORCE_NOT_ASSERT(1 != fwrite(buff,inner_buffer_size,1,destf)); 01011 } 01012 01013 rest = filesize - (count * inner_buffer_size); 01014 01015 //残りを出力 01016 dkcmFORCE_NOT_ASSERT(rest != fread(buff,1,rest,srcf)); 01017 dkcmFORCE_NOT_ASSERT(rest != fwrite(buff,1,rest,destf)); 01018 01019 //close 01020 dkcFClose(&srcf); 01021 dkcFClose(&destf); 01022 01023 break; 01024 }//end of for 01025 01026 01027 result = TRUE; 01028 Error: 01029 if(bThreadLock){ 01030 if(lock){ 01031 dkcThreadLock_Unlock(lock); 01032 dkcFreeThreadLock(&lock); 01033 } 01034 } 01035 if(buff){ 01036 free(buff);buff=NULL; 01037 } 01038 return result; 01039 } |
|
dkcSJISFileSystem.c の 722 行で定義されています。 参照元 dkcCreateZeroByteFile(), と dkcIsEffectivePath().
|
|
ファイルを削除する。
dkcSJISFileSystem.c の 1041 行で定義されています。 参照先 BOOL.
01042 { 01043 #ifdef WIN32 01044 return (0 != DeleteFile(filename)); 01045 //return (0==remove(filename)); 01046 #else 01047 return (0==remove(filename)); 01048 #endif 01049 } |
|
dkcSJISFileSystem.c の 1051 行で定義されています。 参照先 BOOL.
01051 { 01052 #ifdef WIN32 01053 return (0==rename(oldname,newname)); 01054 #else 01055 return (0==rename(oldname,newname)); 01056 #endif 01057 } |
|
dkcSJISFileSystem.c の 728 行で定義されています。 参照元 dkcAllocDeserialize(), と dkcFileCopyEx().
00728 { 00729 struct stat s;//s 00730 if(!filename) return 0; 00731 return (stat(filename,&s)==0) ? (ULONG)s.st_size : 0; 00732 } |
|
dkcSJISFileSystem.c の 733 行で定義されています。 参照先 BOOL, FALSE, NULL, と TRUE.
00733 { 00734 #ifdef WIN32 00735 WIN32_FIND_DATA findData; 00736 HANDLE hFind=NULL; 00737 // ファイルサイズ取得 00738 if((hFind = FindFirstFile(str,&findData)) == INVALID_HANDLE_VALUE){ 00739 return FALSE; 00740 } 00741 00742 //ファイルのサイズをヴちこむ 00743 *high = findData.nFileSizeHigh; 00744 *low = findData.nFileSizeLow; 00745 FindClose(hFind); 00746 return TRUE; 00747 #else 00748 00749 #endif 00750 } |
|
FindClose() dkcSJISFileSystem.c の 1453 行で定義されています。 参照先 DKC_FINDFILE, edk_FAILED, edk_SUCCEEDED, dkc_FindFile::mDirent, dkc_FindFile::mHandle, と NULL.
01454 { 01455 #ifdef WIN32 01456 if(INVALID_HANDLE_VALUE == ptr->mHandle){ 01457 return edk_FAILED; 01458 } 01459 FindClose(ptr->mHandle); 01460 ptr->mHandle = INVALID_HANDLE_VALUE;//しっかりリセット 01461 #else 01462 if(0 == ptr->mHandle){ 01463 return edk_FAILED; 01464 } 01465 closedir(ptr->mHandle); 01466 ptr->mHandle = 0;//しっかりリセット 01467 ptr->mDirent = NULL; 01468 #endif 01469 01470 return edk_SUCCEEDED; 01471 01472 } |
|
dkcSJISFileSystem.c の 1474 行で定義されています。 参照先 DKC_FINDFILE, dkc_strcpy(), edk_FAILED, edk_LogicError, dkc_FindFile::mDirent, と NULL.
01475 { 01476 int r; 01477 size_t len; 01478 #ifdef WIN32 01479 len = strlen(ptr->mFindData.cFileName); 01480 if(0 == len) return edk_FAILED; 01481 r = dkc_strcpy(buff,buffsize,ptr->mFindData.cFileName,len); 01482 #else 01483 if(NULL==ptr->mDirent) 01484 {//呼び出しが間違っているよ^^; 01485 return edk_LogicError; 01486 } 01487 len = strlen(ptr->mDirent.d_name); 01488 if(0 == len) return edk_FAILED; 01489 r = dkc_strcpy(buff,buffsize,ptr->mDirent.d_name,len); 01490 #endif 01491 return r; 01492 } |
|
dkcSJISFileSystem.c の 1510 行で定義されています。 参照先 BOOL, DKC_FINDFILE, と strcmp().
|
|
dkcSJISFileSystem.c の 1494 行で定義されています。 参照先 BOOL, DKC_FINDFILE, と strcmp().
|
|
dkcSJISFileSystem.c の 1522 行で定義されています。 参照先 BOOL, と DKC_FINDFILE.
01523 { 01524 #ifdef WIN32 01525 return (ptr->mFindData.dwFileAttributes & FILE_ATTRIBUTE_NORMAL); 01526 #else 01527 01528 #endif 01529 } |
|
dkcSJISFileSystem.c の 1531 行で定義されています。 参照先 BOOL, と DKC_FINDFILE.
01531 { 01532 #ifdef WIN32 01533 return (ptr->mFindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY); 01534 #else 01535 01536 #endif 01537 } |
|
dkcSJISFileSystem.c の 1538 行で定義されています。 参照先 DKC_FINDFILE.
01538 { 01539 #ifdef WIN32 01540 *High = ptr->mFindData.nFileSizeHigh; 01541 *Low = ptr->mFindData.nFileSizeLow; 01542 #else 01543 01544 #endif 01545 01546 } |
|
Windowsで言うFindFirstFile()のラッパー UNIXやLINUXでも動くかも? dkcSJISFileSystem.c の 1405 行で定義されています。 参照先 DKC_FINDFILE, edk_FAILED, edk_SUCCEEDED, dkc_FindFile::mHandle, と NULL.
01405 { 01406 #ifdef WIN32 01407 ptr->mHandle = 01408 FindFirstFileA( target, &(ptr->mFindData) ); 01409 if(ptr->mHandle == INVALID_HANDLE_VALUE){ 01410 return edk_FAILED; 01411 } 01412 #else 01413 ptr->mHandle = opendir( target ); 01414 if(NULL==ptr->mHandle){ 01415 return edk_FAILED; 01416 } 01417 01418 #endif 01419 return edk_SUCCEEDED; 01420 } |
|
FindNextFile() dkcSJISFileSystem.c の 1422 行で定義されています。 参照先 DKC_FINDFILE, edk_EndProcess, edk_FAILED, edk_SUCCEEDED, dkc_FindFile::mDirent, と dkc_FindFile::mHandle.
01422 { 01423 # ifdef WIN32 01424 if ( 0 == FindNextFileA( ptr->mHandle, &(ptr->mFindData) )) 01425 { 01426 if ( GetLastError() == ERROR_NO_MORE_FILES ) 01427 {//なんだ、もう無いじゃん。 01428 return edk_EndProcess; 01429 } 01430 else//最悪のパターン 01431 { 01432 return edk_FAILED; 01433 } 01434 } 01435 # else 01436 errno = 0; 01437 ptr->mDirent = readdir( ptr->mHandle ); 01438 if ( ptr->mDirent == 0 ) 01439 { 01440 if ( errno == 0 ) 01441 {//もう無いよ^^; 01442 return edk_EndProcess; 01443 } 01444 else//最悪のパターン 01445 { 01446 return edk_FAILED; 01447 } 01448 } 01449 # endif 01450 return edk_SUCCEEDED; 01451 } |
|
dkcSJISFileSystem.c の 1397 行で定義されています。 参照先 DKC_FINDFILE, dkcFree(), edk_FAILED, と NULL.
01397 { 01398 if(NULL==ptr /*|| *ptr==NULL*/){ 01399 return edk_FAILED; 01400 } 01401 return dkcFree((void **)ptr); 01402 } |
|
dkcSJISFileSystem.c の 360 行で定義されています。 参照先 DKC_PATHSTRING, dkcFree(), dkcFreeString(), edk_ArgumentException, と NULL.
00361 { 00362 if(NULL==ptr || NULL==*ptr){ 00363 return edk_ArgumentException; 00364 } 00365 dkcFreeString(&((*ptr)->mString)); 00366 return dkcFree((void **)ptr); 00367 } |
|
dkcSJISFileSystem.c の 767 行で定義されています。 参照先 BOOL, dkc_strcpy(), dkcdMAXPATH_BUFFER, DKUTIL_SUCCEEDED, FALSE, NULL, と TRUE. 参照元 dkcCurrentDirectoryConcatenate().
00767 { 00768 # ifdef WIN32 00769 if(0==GetCurrentDirectory(size,buff)){ 00770 return FALSE; 00771 } 00772 /*if(NULL==_getcwd(path,dkcdMAXPATH_BUFFER)){ 00773 return FALSE; 00774 }*/ 00775 #else 00776 if(NULL==getcwd(buff,size)) 00777 return FALSE; 00778 #endif 00779 return TRUE; 00780 00781 #if 0 00782 /* どういう実装になっているか分からないのでとりあえず+1 */ 00783 char path[dkcdMAXPATH_BUFFER + 1]; 00784 size_t len; 00785 # ifdef WIN32 00786 if(0==GetCurrentDirectory(size,path)){ 00787 return FALSE; 00788 } 00789 /*if(NULL==_getcwd(path,dkcdMAXPATH_BUFFER)){ 00790 return FALSE; 00791 }*/ 00792 #else 00793 if(NULL==getcwd(path,dkcdMAXPATH_BUFFER)) 00794 return FALSE; 00795 #endif 00796 len = strlen(path); 00797 return DKUTIL_SUCCEEDED(dkc_strcpy(buff,size,path,len)); 00798 #endif //end of if 0 00799 } |
|
パス名から、拡張子の開始位置を取得する ファイル名の末尾からファイル名の最後の '.' までを、拡張子と判断する
dkcSJISFileSystem.c の 70 行で定義されています。
00071 { 00072 00073 char *p; 00074 char *get_tail; 00075 00076 get_tail = strtail( PathName ); 00077 for( p = get_tail; p >= PathName; p-- ) // 文字列の最後から最初まで 00078 { 00079 if ( ('\\'==*p) && !isJMS(PathName,p-PathName) ) 00080 return get_tail; // ファイル名はここまで 00081 00082 if ( '.' == *p ) 00083 return p+1; // '.' を発見 00084 } 00085 return get_tail; // 拡張子なし 00086 }//GetFileExtension |
|
dkcSJISFileSystem.c の 116 行で定義されています。 参照先 BOOL, と dkcIsRelativityPath().
00117 { 00118 return !dkcIsRelativityPath(path); 00119 } |
|
dkcSJISFileSystem.c の 89 行で定義されています。 参照先 BOOL, dkcdMAXPATH_BUFFER, dkcFileExist(), dkcIsNativePathString(), dkcToAbsolutelyPath(), DKUTIL_FAILED, FALSE, と TRUE.
00089 { 00090 char dest[dkcdMAXPATH_BUFFER]; 00091 const size_t dsize = dkcdMAXPATH_BUFFER; 00092 00093 //相対パス?絶対パス?でもそのファイルが存在するか? 00094 if(FALSE==dkcFileExist(path)){ 00095 return FALSE; 00096 } 00097 //pathを正規化 00098 if(DKUTIL_FAILED(dkcToAbsolutelyPath(dest,dsize,path,size))){ 00099 return FALSE; 00100 } 00101 //正規化して、ファイルに使用して良い文字列を使っているか? 00102 if(FALSE==dkcIsNativePathString(dest,strlen(dest))){ 00103 return FALSE; 00104 } 00105 00106 return TRUE; 00107 } |
|
dkcSJISFileSystem.c の 108 行で定義されています。 参照先 BOOL, dkcmNOT_ASSERT, dkcSJIS_StrChrSearch(), FALSE, NULL, と TRUE. 参照元 dkcIsAbsolutelyPath(), と dkcToAbsolutelyPath().
00109 { 00110 int point; 00111 dkcmNOT_ASSERT(NULL==path); 00112 point = dkcSJIS_StrChrSearch(path,':'); 00113 if(point == -1) return TRUE; 00114 return FALSE; 00115 } |
|
文字列 str の str[nPos] について、
dkcSJISFileSystem.c の 39 行で定義されています。 参照先 DKC_EXTERN, jms1(), と jms2(). 参照元 isJMS().
00040 { 00041 int i; 00042 int state; // { 0, 1, 2 } = { 1バイト文字, 2バイト文字の第1バイト, 2バイト文字の第2バイト } 00043 00044 state = 0; 00045 for( i = 0; str[i] != '\0'; i++ ) 00046 { 00047 if ( ( state == 0 ) && ( jms1( str[i] ) ) ) state = 1; // 0 -> 1 00048 else if ( ( state == 1 ) && ( jms2( str[i] ) ) ) state = 2; // 1 -> 2 00049 else if ( ( state == 2 ) && ( jms1( str[i] ) ) ) state = 1; // 2 -> 1 00050 else state = 0; // 2 -> 0, その他 00051 00052 // str[nPos] での状態を返す。 00053 if ( i == nPos ) return state; 00054 } 00055 return 0; 00056 } |
|
srcの一番後ろににがついていたらTRUE \ dkcSJISFileSystem.c の 122 行で定義されています。 参照先 BOOL, dkcSJIS_SearchPathSepLast(), FALSE, と TRUE. 参照元 dkcPathStringElementInsert_Logic(), dkcPathStringNormalizeConcatenateLogic(), と dkcPushBackPathSep().
00122 { 00123 int point; 00124 point = dkcSJIS_SearchPathSepLast(src); 00125 //if(point != -1 && (size_t)point == dlen - 1/*&& (size_t)point != dlen*/) 00126 if((size_t)point == dlen - 1) 00127 { //みつかった。 00128 return TRUE; 00129 } 00130 //みつからない。 00131 return FALSE; 00132 } |
|
パスを正規化して繋げる。
dkcSJISFileSystem.c の 640 行で定義されています。 参照先 DKC_PATHSTRING, dkcdMAXPATH, dkcmNOT_ASSERT, dkcPathStringCopy(), dkcPathStringNormalizeConcatenateLogic(), edk_FAILED, dkc_String::mByteSize, と dkc_PathString::mString.
00641 { 00642 int result; 00643 00644 dkcmNOT_ASSERT(ptr->mString->mByteSize + size >= dkcdMAXPATH); 00645 if(ptr->mString->mByteSize + size >= dkcdMAXPATH) 00646 {//これ以上は入れられない。 00647 return edk_FAILED; 00648 } 00649 00650 if(ptr->mString->mByteSize) 00651 {//すでに入っているものがある。 00652 result = dkcPathStringNormalizeConcatenateLogic(ptr,buff,size); 00653 } 00654 else 00655 {//何も無い時はこちらで 00656 result = dkcPathStringCopy(ptr,buff,size); 00657 } 00658 //return dkcPathStringNormalizeInsertLogic(ptr,buff,size,dkcStringConcatenate); 00659 return result; 00660 } |
|
パスを正規化して入れる。
dkcSJISFileSystem.c の 601 行で定義されています。 参照先 DKC_PATHSTRING, dkcdMAXPATH, dkcmNOT_ASSERT, dkcPathStringNormalizeCopyLogic(), dkcStringCopy(), edk_FAILED, dkc_String::mByteSize, と dkc_PathString::mString. 参照元 dkcAllocPathString(), dkcPathStringConcatenate(), と dkcPathStringNormalizeConcatenateLogic().
00602 { 00603 00604 dkcmNOT_ASSERT(ptr->mString->mByteSize + size >= dkcdMAXPATH); 00605 if(ptr->mString->mByteSize + size >= dkcdMAXPATH) 00606 {//これ以上は入れられない。 00607 return edk_FAILED; 00608 } 00609 return dkcPathStringNormalizeCopyLogic(ptr,buff,size,dkcStringCopy); 00610 } |
|
dkcSJISFileSystem.c の 383 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringDevideBegin_Logic(), と dkc_PathString::mIterateCount.
00384 { 00385 return dkcPathStringDevideBegin_Logic(ptr,&ptr->mIterateCount,buff,size); 00386 } |
|
dkcSJISFileSystem.c の 399 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcmNOT_ASSERT, dkcPathStringPointer(), dkcSJIS_StrChrSearch(), DKUTIL_FAILED, edk_BufferOverFlow, edk_EndProcess, edk_FAILED, edk_SUCCEEDED, と NULL. 参照元 dkcPathStringDevideBegin().
00400 { 00401 int i,point; 00402 const char *p; 00403 dkcmNOT_ASSERT(NULL==ptr || NULL==buff || 0==size); 00404 00405 //len = dkcPathStringSize(ptr); 00406 p = dkcPathStringPointer(ptr); 00407 00408 point = dkcSJIS_StrChrSearch(p,'\\'); 00409 if(-1==point){return edk_EndProcess;} 00410 00411 for(i=0;i<point;i++){//drive指定のものがあるかどうか。 00412 if(':'==p[i]){ 00413 if(DKUTIL_FAILED(dkc_strcpy( 00414 buff,size,p,(size_t)i//-1 00415 ))) 00416 { 00417 return edk_BufferOverFlow; 00418 } 00419 point = dkcSJIS_StrChrSearch(&p[i],'\\');//次の物を見つける。 00420 //(まぁ:の次は\\と言う事が決まっているけど、いちおう。 00421 *count = (size_t)i + point + 1;//次に始めるのは 00422 return edk_SUCCEEDED; 00423 } 00424 } 00425 if(DKUTIL_FAILED(dkc_strcpy( 00426 buff,size,p,(size_t)point-1 00427 ))) 00428 { 00429 return edk_FAILED; 00430 } 00431 *count = (size_t)point + 1;//次に始めるのは 00432 return edk_SUCCEEDED; 00433 } |
|
dkcSJISFileSystem.c の 394 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringDevideEnd_Logic(), と dkc_PathString::mIterateCount.
00394 { 00395 dkcPathStringDevideEnd_Logic(&ptr->mIterateCount); 00396 } |
|
dkcSJISFileSystem.c の 472 行で定義されています。
00472 { 00473 *count = 0; 00474 } |
|
dkcSJISFileSystem.c の 388 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringDevideNext_Logic(), と dkc_PathString::mIterateCount.
00389 { 00390 return dkcPathStringDevideNext_Logic(ptr,&ptr->mIterateCount,buff,size); 00391 00392 } |
|
dkcSJISFileSystem.c の 435 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcPathStringPointer(), dkcSJIS_StrChrSearch(), dkcStringSize(), DKUTIL_FAILED, edk_EndProcess, edk_FAILED, edk_SUCCEEDED, と dkc_PathString::mString. 参照元 dkcPathStringDevideNext().
00436 { 00437 int point; 00438 const char *p; 00439 size_t len; 00440 //len = dkcPathStringSize(ptr); 00441 p = dkcPathStringPointer(ptr); 00442 len = dkcStringSize(ptr->mString); 00443 if(len <= *count) 00444 {//もうこの関数を呼び出すのは終わりだっちゅうに!! 00445 return edk_EndProcess; 00446 } 00447 point = dkcSJIS_StrChrSearch(&p[*count],'\\'); 00448 if(-1==point) 00449 {//最後まで来ちまった。 00450 00451 00452 len -= *count; 00453 if(DKUTIL_FAILED(dkc_strcpy(//残り物を全部コピー 00454 buff,size,&p[*count],len 00455 ))) 00456 { 00457 return edk_FAILED; 00458 } 00459 *count += len; 00460 return edk_SUCCEEDED;//out 00461 } 00462 if(DKUTIL_FAILED(dkc_strcpy( 00463 buff,size,&p[*count],(size_t)point 00464 ))) 00465 { 00466 return edk_FAILED; 00467 } 00468 *count += (size_t)point + 1;//次に始めるのは 00469 return edk_SUCCEEDED;//out 00470 } |
|
dkcSJISFileSystem.c の 503 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringPointer(), dkcPathStringSize(), dkcSJIS_SearchPathSep(), dkcStringErase(), と dkc_PathString::mString.
00505 { 00506 const char *p = dkcPathStringPointer(ptr); 00507 int endlen = dkcSJIS_SearchPathSep(&p[count]); 00508 00509 if(-1==endlen){ 00510 endlen = dkcPathStringSize(ptr); 00511 endlen = endlen - count; 00512 }else{ 00513 //endlen;//マイナスしておく \\をReplaceしないため 00514 } 00515 return dkcStringErase(ptr->mString,count - 1,(size_t)endlen + 1);//count -1は前の\\を消すためendlen + 1は-1した為 00516 } |
|
パスの要素を挿入する。(正規化はしない lenは文字数
dkcSJISFileSystem.c の 476 行で定義されています。 参照先 DKC_PATHSTRING, dkcIsNativePathString(), dkcIsTailPathSep(), dkcPushBackPathSep(), dkcStringInsert(), edk_FAILED, edk_OutOfMemory, FALSE, と dkc_PathString::mString.
00478 { 00479 int r; 00480 size_t size = len + 5; 00481 00482 char *p; 00483 if(len==0 || FALSE==dkcIsNativePathString(src,len)) 00484 { 00485 return edk_FAILED; 00486 } 00487 if(FALSE==dkcIsTailPathSep(src,len))//後ろにPathSeparatorが無い!! 00488 { 00489 p = (char *)malloc(size); 00490 00491 if(!p) return edk_OutOfMemory; 00492 strcpy(p,src);//あまり使いたくないけどすでにバッファは保証されているのでstrcpy 00493 dkcPushBackPathSep(p,len,size); 00494 00495 r = dkcStringInsert(ptr->mString,count,p,strlen(p)); 00496 free(p); 00497 }else{ 00498 r = dkcStringInsert(ptr->mString,count,src,len); 00499 } 00500 return r; 00501 } |
|
パスの要素を置換する。(正規化はしない lenは文字数
dkcSJISFileSystem.c の 520 行で定義されています。 参照先 DKC_PATHSTRING, dkcIsNativePathString(), dkcPathStringPointer(), dkcPathStringSize(), dkcSJIS_SearchPathSep(), dkcStringReplace(), edk_FAILED, FALSE, と dkc_PathString::mString.
00522 { 00523 const char *p = dkcPathStringPointer(ptr); 00524 int endlen; 00525 if(len==0 || FALSE==dkcIsNativePathString(src,len)) 00526 { 00527 return edk_FAILED; 00528 } 00529 endlen = dkcSJIS_SearchPathSep(&p[count]);//countから検索している 00530 if(-1==endlen){ 00531 endlen = dkcPathStringSize(ptr); 00532 endlen = endlen - count; 00533 }else{ 00534 if(0 != endlen) 00535 endlen--;//マイナスしておく \\をReplaceしないため 00536 } 00537 return dkcStringReplace(ptr->mString,count,count + endlen,src,len); 00538 /* 00539 size_t size = len + 5; 00540 int r; 00541 // int point; 00542 const char *pointer; 00543 char *p ; 00544 if(FALSE==dkcIsTailPathSep(src,len))//後ろにPathSeparatorが無い!! 00545 { 00546 //文字列をちと変更 00547 p = malloc(size); 00548 if(!p) return edk_OutOfMemory; 00549 strcpy(p,src); 00550 r = dkcPushBackPathSep(p,len,size); 00551 }else{ 00552 p = (char *)src; 00553 } 00554 pointer = dkcPathStringPointer(ptr); 00555 //countから調べる。 00556 dkcSJIS_SearchPathSep(&pointer[count]); 00557 */ 00558 00559 00560 00561 00562 00563 } |
|
dkcSJISFileSystem.c の 705 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcdPATH_SEP, dkcSJIS_StrChrSearchTail(), dkcStringPointer(), dkcStringSize(), edk_FAILED, と dkc_PathString::mString.
00706 { 00707 const char *p = dkcStringPointer(ptr->mString); 00708 int point = dkcSJIS_StrChrSearchTail(p,strlen(p),dkcdPATH_SEP); 00709 size_t len = dkcStringSize(ptr->mString); 00710 //if(point - 1 <= 0) return edk_FAILED; 00711 if(point < 0) return edk_FAILED; 00712 if((size_t)(point + 1) > len) return edk_FAILED; 00713 //if((size_t)point == len) return edk_FAILED;//ファイル名が無い。 00714 return dkc_strcpy(buff,size,p,point);//\\も含める。 00715 00716 } |
|
dkcSJISFileSystem.c の 664 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcSJIS_StrChrSearch(), dkcStringPointer(), edk_Not_Found, と dkc_PathString::mString.
00664 { 00665 const char *p = dkcStringPointer(ptr->mString); 00666 int point = dkcSJIS_StrChrSearch(p,':'); 00667 if(-1 == point) return edk_Not_Found;//見つからない。 00668 //return dkc_memcpy(buff,size,p,(size_t)point - 1); 00669 return dkc_strcpy(buff,size,p,(size_t)1);//driveなら1文字で十分だよね^^; 00670 } |
|
dkcSJISFileSystem.c の 672 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcSJIS_SearchPathSep(), dkcSJIS_StrChrSearchLast(), dkcStringPointer(), dkcStringSize(), edk_FAILED, edk_Not_Found, と dkc_PathString::mString.
00673 { 00674 int point2; 00675 size_t len; 00676 const char *p = dkcStringPointer(ptr->mString); 00677 int point = dkcSJIS_StrChrSearchLast(p,'.'); 00678 00679 if(point < 0) return edk_Not_Found;//見つからない。 00680 00681 point2 = dkcSJIS_SearchPathSep(&p[point]); 00682 if(point < point2){//C:\ok.OK\folderのような状況になっている。 00683 return edk_Not_Found; 00684 } 00685 len = dkcStringSize(ptr->mString); 00686 //if(point - 1 <= 0) return edk_FAILED; 00687 00688 if((size_t)(point + 1) > len) return edk_FAILED;//Logicalなエラー?? 00689 return dkc_strcpy(buff,size,&p[point + 1],(size_t)len - (size_t)point ); 00690 00691 } |
|
dkcSJISFileSystem.c の 693 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcdPATH_SEP, dkcSJIS_StrChrSearchLast(), dkcStringPointer(), dkcStringSize(), edk_FAILED, と dkc_PathString::mString.
00694 { 00695 const char *p = dkcStringPointer(ptr->mString); 00696 int point = dkcSJIS_StrChrSearchLast(p,dkcdPATH_SEP); 00697 size_t len = dkcStringSize(ptr->mString); 00698 //if(point - 1 <= 0) return edk_FAILED; 00699 if(point < 0) return edk_FAILED; 00700 if((size_t)(point + 1) > len) return edk_FAILED; 00701 if((size_t)point == len) return edk_FAILED;//ファイル名が無い。 00702 return dkc_strcpy(buff,size,&p[point + 1],(size_t)len - (size_t)point ); 00703 } |
|
dkcSJISFileSystem.c の 612 行で定義されています。 参照先 DKC_PATHSTRING, dkcdMAXPATH_BUFFER, dkcdPATH_SEP_STR, dkcIsTailPathSep(), dkcPathStringCopy(), dkcPathStringPointer(), dkcPathStringSize(), dkcStringConcatenate(), DKUTIL_FAILED, edk_FAILED, FALSE, dkc_PathString::mString, と ToAbsolutelyLogic(). 参照元 dkcPathStringConcatenate().
00614 { 00615 char dest[dkcdMAXPATH_BUFFER]; 00616 00617 00618 if(FALSE==dkcIsTailPathSep(dkcPathStringPointer(ptr),dkcPathStringSize(ptr))) 00619 { 00620 dkcStringConcatenate(ptr->mString,dkcdPATH_SEP_STR,1); 00621 } 00622 dkcStringConcatenate(ptr->mString,buff,size); 00623 00624 size = dkcPathStringSize(ptr) + 1; 00625 00626 //p = malloc(dkcPathStringSize(ptr)); 00627 //if(!p) return edk_OutOfMemory; 00628 00629 00630 if(DKUTIL_FAILED( 00631 ToAbsolutelyLogic(dest,sizeof(dest),dkcPathStringPointer(ptr)) 00632 )){ 00633 return edk_FAILED; 00634 } 00635 00636 return dkcPathStringCopy(ptr,dest,strlen(dest)); 00637 } |
|
dkcSJISFileSystem.c の 570 行で定義されています。 参照先 DKC_PATHSTRING, DKC_STRING, dkcdMAXPATH_BUFFER, dkcmNOT_ASSERT, dkcToAbsolutelyPath(), DKUTIL_FAILED, dkc_PathString::mString, と NULL. 参照元 dkcPathStringCopy().
00572 { 00573 //const size_t bsize = dkcdMAXPATH_BUFFER + 1; 00574 size_t len; 00575 int result; 00576 //char *pb = malloc(bsize); 00577 //if(NULL== pb) return edk_OutOfMemory; 00578 char pb[dkcdMAXPATH_BUFFER]; 00579 size_t bsize = sizeof(pb); 00580 00581 result = dkcToAbsolutelyPath(pb,bsize,buff,size); 00582 00583 00584 len = strlen(pb); 00585 00586 # ifdef DEBUG //ありえないよ〜エラーチェック 00587 dkcmNOT_ASSERT(DKUTIL_FAILED(result)); 00588 dkcmNOT_ASSERT(len >= bsize);// >=にするのはNULL文字が潰されているかどうか。 00589 dkcmNOT_ASSERT(NULL==function__); 00590 # endif 00591 if(DKUTIL_FAILED(result)){ 00592 goto Error; 00593 } 00594 result = function__(ptr->mString,pb,len); 00595 00596 Error: 00597 //if(pb){free(pb);pb=NULL;} 00598 return result; 00599 } |
|
dkcSJISFileSystem.c の 375 行で定義されています。 参照先 DKC_PATHSTRING, dkcStringPointer(), と dkc_PathString::mString. 参照元 dkcPathStringDevideBegin_Logic(), dkcPathStringDevideNext_Logic(), dkcPathStringElementErase_Logic(), dkcPathStringElementReplace_Logic(), と dkcPathStringNormalizeConcatenateLogic().
00376 { 00377 return dkcStringPointer(p->mString); 00378 } |
|
dkcSJISFileSystem.c の 370 行で定義されています。 参照先 DKC_PATHSTRING, dkcStringSize(), と dkc_PathString::mString. 参照元 dkcPathStringElementErase_Logic(), dkcPathStringElementReplace_Logic(), と dkcPathStringNormalizeConcatenateLogic().
00371 { 00372 return dkcStringSize(p->mString); 00373 } |
|
path separatorを挿入する必要があり、挿入出来たらTRUE
dkcSJISFileSystem.c の 134 行で定義されています。 参照先 dkcdPATH_SEP, dkcIsTailPathSep(), edk_EndProcess, edk_OutputBufferWasLost, edk_SUCCEEDED, と FALSE. 参照元 dkcDirectoryConcatenate(), と dkcPathStringElementInsert_Logic().
00134 { 00135 if(FALSE==dkcIsTailPathSep(dest,dlen)){ 00136 if(size < dlen + 2){ 00137 return edk_OutputBufferWasLost;//バッファが足らんよ! 00138 } 00139 dest[dlen ] = dkcdPATH_SEP; 00140 dest[dlen + 1] = '\0';//こいつを忘れてはいけない。 00141 return edk_SUCCEEDED; 00142 } 00143 return edk_EndProcess; 00144 } |
|
dkcSJISFileSystem.c の 753 行で定義されています。 参照先 BOOL, dkcIsEffectivePath(), dkcmNOT_ASSERT, と FALSE.
00753 { 00754 #ifdef DEBUG 00755 size_t len = strlen(filename); 00756 dkcmNOT_ASSERT(0==len || FALSE==dkcIsEffectivePath(filename,len)); 00757 #endif 00758 # ifdef WIN32 00759 return(0 != SetCurrentDirectory(filename)); 00760 //return (_chdir(filename)==0); 00761 # else 00762 return (chdir(filename)==0); 00763 # endif 00764 } |
|
パスを正規化(相対パスから絶対パス)する関数
dkcSJISFileSystem.c の 207 行で定義されています。 参照先 dkcCurrentDirectoryConcatenate(), dkcdMAXPATH_BUFFER, dkcIsRelativityPath(), edk_FAILED, edk_OutOfMemory, MAX_PATH_CHECK, NULL, ToAbsolutelyLogic(), と TRUE. 参照元 dkcIsEffectivePath(), と dkcPathStringNormalizeCopyLogic().
00208 { 00209 char *tp = NULL; 00210 int r; 00211 MAX_PATH_CHECK(dsize); 00212 00213 00214 if(NULL==dest) return edk_FAILED; 00215 00216 if(dkcIsRelativityPath(src)==TRUE) 00217 {//カレントディレクトリを付加する。 00218 00219 tp = (char *)malloc(dkcdMAXPATH_BUFFER); 00220 if(NULL==tp) return edk_OutOfMemory; 00221 00222 dkcCurrentDirectoryConcatenate(tp,dkcdMAXPATH_BUFFER,src); 00223 r = ToAbsolutelyLogic(dest,dsize,tp); 00224 free(tp); 00225 return r; 00226 00227 } 00228 return ToAbsolutelyLogic(dest,dsize,src); 00229 00230 00231 00232 /* 00233 状態繊維 00234 PATH_SEP 00235 . 00236 sjis 00237 00239 ..... 00240 ../../ 00241 /././ 00242 00243 */ 00244 /* 00245 size_t i,di; 00246 // size_t j; 00247 int point; 00248 //char prev; 00249 const char *pathsep="\\/"; 00250 DKC_SINGLELIST_OBJECT *plo = NULL; 00251 DKC_SINGLELIST *lit = NULL; 00252 00253 00254 di = 0; 00255 00256 if(dsize < ssize){ 00257 return edk_ArgumentException; 00258 } 00259 //list確保 00260 plo = dkcAllocSingleListObject(NULL,20); 00261 if(NULL==plo) return edk_FAILED; 00262 00263 //directoryをパース 00264 for(i=0;;){ 00265 point = dkcSJIS_StrChrSearchInStr(&src[i],pathsep); 00266 if(point < 0){ 00267 if(i != ssize){ 00268 if(FALSE==plo->push_back(plo,&src[i],size - i)){ 00269 return edk_FAILED; 00270 } 00271 } 00272 break; 00273 } 00274 00275 if(FALSE 00276 ==plo->push_back(plo,&src[i],point - 1)//見つかったところまでだから-1 00277 ) 00278 { 00279 return edk_FAILED; 00280 } 00281 00282 i += point; 00283 } 00284 00285 for(i=0;i<ssize;){ 00286 00287 00288 if(dkcmIsSJIS1(src[i]) && dkcmIsSJIS2(src[i + 1])) 00289 {//SJIS抜かし 00290 i++; 00291 i++; 00292 continue; 00293 } 00294 // src == // 00295 if(prev==dkcdPATH_SEP && src[i] == dkcdPATH_SEP) 00296 { 00297 i++; 00298 continue; 00299 } 00300 // src == .. 00301 if(prev=='.' && src[i] == '.') 00302 { 00303 while(src[i] != '.') i++; 00304 if(dkcdPATH_SEP==src[i]) i++; 00305 point = dkcSJIS_StrChrSearch(&src[i],dkcdPATH_SEP); 00306 00307 if(point == -1){ 00308 break; 00309 } 00310 i += point; 00311 00312 continue; 00313 } 00314 00315 dest[di] = src[i]; 00316 di++; 00317 i++; 00318 prev = src[i]; 00319 } 00320 00321 00322 return edk_SUCCEEDED; */ 00323 } |
|
dkcSJISFileSystem.c の 57 行で定義されています。 参照先 DKC_INLINE, と dkcIsShiftJIS().
00057 { 00058 return dkcIsShiftJIS(str,nPos); 00059 } |
|
dkcSJISFileSystem.c の 22 行で定義されています。 参照先 BOOL, と DKC_INLINE. 参照元 dkcIsShiftJIS().
00022 { 00023 return (((((unsigned char)(c))>=0x81)&&(((unsigned char)(c))<=0x9F))||((((unsigned char)(c))>=0xE0)&&(((unsigned char)(c))<=0xFC))); 00024 } |
|
dkcSJISFileSystem.c の 25 行で定義されています。 参照先 BOOL, と DKC_INLINE. 参照元 dkcIsShiftJIS().
00025 { 00026 return ((((unsigned char)(c))!=0x7F)&&(((unsigned char)(c))>=0x40)&&(((unsigned char)(c))<=0xFC)); 00027 } |
|
文字列末尾の文字 '' の位置を返す
dkcSJISFileSystem.c の 61 行で定義されています。 参照先 DKC_INLINE.
00062 { 00063 return strchr( stringg, '\0' ); 00064 }//strtail |
|
dkcSJISFileSystem.c の 188 行で定義されています。 参照先 edk_FAILED, edk_SUCCEEDED, MAX_PATH_CHECK, と NULL. 参照元 dkcPathStringNormalizeConcatenateLogic(), と dkcToAbsolutelyPath().
00189 { 00190 /*if(dsize < dkcdMAXPATH_BUFFER){//こんなバッファじゃどうなるか分からないよ^^; 00191 return edk_BufferOverFlow; 00192 }*/ 00193 MAX_PATH_CHECK(dsize); 00194 # ifdef WIN32 00195 00196 if(NULL==_fullpath(dest,src,dsize)){ 00197 return edk_FAILED; 00198 } 00199 # else//unix or linux ?? 00200 if(NULL==__realpath(src,dest)){ 00201 return edk_FAILED; 00202 } 00203 # endif 00204 return edk_SUCCEEDED; 00205 } |