#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 の 1406 行で定義されています。 参照先 DKC_FINDFILE, と dkcAllocate().
01407 { 01408 DKC_FINDFILE *p; 01409 p = (DKC_FINDFILE *)dkcAllocate(sizeof(DKC_FINDFILE)); 01410 return p; 01411 } |
|
dkcSJISFileSystem.c の 326 行で定義されています。 参照先 DKC_PATHSTRING, dkcAllocate(), dkcAllocString(), dkcdMAXPATH_BUFFER, dkcFree(), dkcFreeString(), dkcIsNativePathString(), dkcPathStringCopy(), DKUTIL_FAILED, 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 if(DKUTIL_FAILED(dkcPathStringCopy(p,path,len))){ 00348 goto Error; 00349 } 00350 } 00351 p->mIterateCount = 0; 00352 00353 return p; 00354 Error: 00355 if(p){ 00356 dkcFreeString(&p->mString); 00357 } 00358 dkcFree((void **)&p); 00359 return NULL; 00360 } |
|
dkcSJISFileSystem.c の 827 行で定義されています。 参照先 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.
00828 { 00829 BOOL result; 00830 char work[dkcdMAXPATH_BUFFER]; 00831 unsigned long n = 0; 00832 unsigned long len = strlen(pPath); 00833 00834 #ifdef WIN32//sjis support 00835 SECURITY_ATTRIBUTES attr; 00836 00837 DKUTIL_STRUCTURE_INIT(attr); 00838 NULL_CHAR_ARRAY(work); 00839 00840 //error check 00841 if(dkcdMAXPATH_LEN < len){ 00842 dkcmNOT_ASSERT_MESSAGE("pathが長すぎる。",pPath); 00843 return edk_FAILED; 00844 } 00845 if(0==len ){ 00846 return edk_ArgumentException; 00847 } 00848 00849 //まずは一つ目を撃破 00850 if ( dkcmIsSJIS1(pPath[n]) || ! dkcmIS_INVALID_FOLDERNAME_CHAR(pPath[n]) ) 00851 {//SJISの1文字目かINVALIDな値では無かったら。 00852 work[n] = pPath[n]; 00853 if(1==len){ 00854 //フォルダ作成 00855 attr.nLength = sizeof(SECURITY_ATTRIBUTES); 00856 attr.lpSecurityDescriptor = NULL; 00857 attr.bInheritHandle = FALSE; 00858 00859 result = dkcCreateDirectoryLogic( work, &attr ); 00860 00861 dkcmNOT_ASSERT(FALSE==result && "directoryを作れなかった" ); 00862 return edk_SUCCEEDED; 00863 } 00864 } 00865 n++; 00866 //二つ目から開始 00867 while ( n < len ) 00868 { 00869 //フォルダ名取得 00870 while ( n < len ) 00871 { 00872 00873 if(! dkcmIsSJIS1(pPath[n - 1]) && ! dkcmIsSJIS2(pPath[n]) ) 00874 {//SJISではない!! 00875 if ( ( dkcmIS_PATH_SEP(pPath[n]) ) /*&& pPath[n] != '\0'*//*(n != '\0')*/ ) 00876 { 00877 if ( work[n-1] != ':' ) 00878 {//driveを読み込ませたくないらしい。 00879 break; 00880 } 00881 } 00882 else if(dkcmIS_INVALID_FOLDERNAME_CHAR(pPath[n])) 00883 {//SJIS問題をクリアしたのに間違いだった 00884 return edk_FAILED; 00885 } 00886 } 00887 00888 work[n] = pPath[n]; 00889 n++; 00890 } 00891 work[n] = '\0'; 00892 00893 //フォルダ作成 00894 attr.nLength = sizeof(SECURITY_ATTRIBUTES); 00895 attr.lpSecurityDescriptor = NULL; 00896 attr.bInheritHandle = FALSE; 00897 00898 result = dkcCreateDirectoryLogic( work, &attr ); 00899 00900 //dkcmNOT_ASSERT("directoryを作れなかった" && FALSE==result); 00901 if(FALSE==result){ 00902 return edk_FAILED; 00903 } 00904 work[n++] = dkcdPATH_SEP; 00905 } 00906 #else //no support sjis 00907 NULL_CHAR_ARRAY(work); 00908 00909 //error check 00910 if(dkcdMAXPATH_LEN < len){ 00911 dkcmNOT_ASSERT_MESSAGE("pathが長すぎる。",pPath); 00912 return edk_FAILED; 00913 } 00914 if(0==len ){ 00915 return edk_ArgumentException; 00916 } 00917 00918 while ( n < len ) 00919 { 00920 //フォルダ名取得 00921 while ( n < len ) 00922 { 00923 if ( ( dkcmIS_PATH_SEP(pPath[n]) ) && (n != '\0') ) 00924 { 00925 if ( work[n-1] != ':' )//Linuxのドライブのパスはコレデいいのかな? 00926 { 00927 break; 00928 } 00929 } 00930 work[n] = pPath[n]; 00931 n++; 00932 } 00933 work[n] = '\0'; 00934 00935 result = dkcCreateDirectoryLogic( work,NULL ); 00936 00937 //dkcmNOT_ASSERT("directoryを作れなかった" && FALSE==result); 00938 if(FALSE==result){ 00939 return edk_FAILED; 00940 } 00941 work[n++] = dkcdPATH_SEP; 00942 } 00943 00944 #endif 00945 00946 return edk_SUCCEEDED; 00947 } |
|
dkcSJISFileSystem.c の 816 行で定義されています。 参照先 BOOL. 参照元 dkcCreateDirectory().
00816 { 00817 #ifdef WIN32 00818 //return (0 == _mkdir( dir )); 00819 return (0 != CreateDirectory(dir,(SECURITY_ATTRIBUTES *)ptr)); 00820 #else 00821 return (0 == mkdir( dir )); 00822 #endif 00823 } |
|
dkcSJISFileSystem.c の 1074 行で定義されています。 参照先 BOOL, dkcFileExist(), FALSE, と TRUE.
01075 { 01076 FILE *fp; 01077 int r = FALSE; 01078 if(FALSE==dkcFileExist(filename) || TRUE==rewrite){ 01079 fp = fopen(filename,"wb"); 01080 if(!fp){ 01081 return r; 01082 } 01083 fclose(fp); 01084 r = TRUE; 01085 } 01086 return r; 01087 } |
|
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 の 949 行で定義されています。 参照先 BOOL, dkcFileCopyEx(), と FALSE.
00949 { 00950 return dkcFileCopyEx(dest,src,1024 * 64,FALSE); 00951 } |
|
dkcSJISFileSystem.c の 953 行で定義されています。 参照先 BOOL, dkcAllocThreadLock(), dkcCreateEmptyFile(), dkcFClose(), dkcFileSize(), dkcFOpen(), dkcFreeThreadLock(), dkcLoadBinary(), dkcmFORCE_NOT_ASSERT, dkcSaveBinary(), dkcThreadLock_Lock(), dkcThreadLock_Unlock(), DKUTIL_FAILED, FALSE, NULL, ODS, と TRUE. 参照元 dkcFileCopy().
00955 { 00956 void *buff; 00957 FILE *srcf,*destf; 00958 size_t filesize;//ファイルサイズ 00959 size_t readed;//読み込んだデータ 00960 size_t count;//count 00961 size_t i; 00962 size_t rest;//残り 00963 int result = FALSE;//戻り値 00964 DKC_THREAD_LOCK *lock = NULL; 00965 00966 00967 if(NULL==dest || NULL==src){ 00968 return FALSE; 00969 } 00970 if(inner_buffer_size <= 1024){ 00971 inner_buffer_size = 1024; 00972 } 00973 00974 //バッファの準備 00975 buff = malloc(inner_buffer_size); 00976 if(NULL==buff){ 00977 inner_buffer_size = 1024 * 256; 00978 buff = malloc(inner_buffer_size); 00979 if(NULL==buff) 00980 return FALSE; 00981 } 00982 //thread lock 00983 if(bThreadLock){ 00984 lock = dkcAllocThreadLock(); 00985 if(NULL==lock){ 00986 goto Error; 00987 } 00988 dkcThreadLock_Lock(lock); 00989 } 00990 //ちっちゃい場合 00991 filesize = dkcFileSize(src); 00992 for(;;) 00993 {//non loop 00994 if(0 == filesize) 00995 {//ファイルサイズが0の場合 00996 dkcCreateEmptyFile(dest); 00997 break; 00998 } 00999 if(filesize < inner_buffer_size) 01000 {//ファイルサイズがバッファに収まってしまう場合。 01001 if(DKUTIL_FAILED(dkcLoadBinary(buff,filesize,src,&readed))) 01002 { 01003 goto Error; 01004 } 01005 # ifdef DEBUG 01006 if(readed != filesize){ 01007 ODS("readed != filesize why?\n"); 01008 } 01009 # endif 01010 dkcSaveBinary(buff,filesize,dest); 01011 break; 01012 } 01013 //バッファを使わなければコピーできない場合。 01014 01015 srcf = dkcFOpen(src,"rb"); 01016 if(NULL==srcf) goto Error; 01017 destf = dkcFOpen(dest,"wb"); 01018 if(NULL==destf) goto Error; 01019 01020 //ループする回数を計算 01021 count = filesize / inner_buffer_size; 01022 01023 for(i=0;i<count;i++){ 01024 dkcmFORCE_NOT_ASSERT(1 != fread(buff,inner_buffer_size,1,srcf)); 01025 dkcmFORCE_NOT_ASSERT(1 != fwrite(buff,inner_buffer_size,1,destf)); 01026 } 01027 01028 rest = filesize - (count * inner_buffer_size); 01029 01030 //残りを出力 01031 dkcmFORCE_NOT_ASSERT(rest != fread(buff,1,rest,srcf)); 01032 dkcmFORCE_NOT_ASSERT(rest != fwrite(buff,1,rest,destf)); 01033 01034 //close 01035 dkcFClose(&srcf); 01036 dkcFClose(&destf); 01037 01038 break; 01039 }//end of for 01040 01041 01042 result = TRUE; 01043 Error: 01044 if(bThreadLock){ 01045 if(lock){ 01046 dkcThreadLock_Unlock(lock); 01047 dkcFreeThreadLock(&lock); 01048 } 01049 } 01050 if(buff){ 01051 free(buff);buff=NULL; 01052 } 01053 return result; 01054 } |
|
dkcSJISFileSystem.c の 736 行で定義されています。 参照元 dkcCreateZeroByteFile(), と dkcIsEffectivePath().
00736 { 00737 struct stat s; 00738 if(!filename) return FALSE; 00739 //return (stat(filename,&s)==0) ? TRUE : FALSE; 00740 return (stat(filename,&s)==0); 00741 } |
|
ファイルを削除する。
dkcSJISFileSystem.c の 1056 行で定義されています。 参照先 BOOL.
01057 { 01058 #ifdef WIN32 01059 return (0 != DeleteFile(filename)); 01060 //return (0==remove(filename)); 01061 #else 01062 return (0==remove(filename)); 01063 #endif 01064 } |
|
dkcSJISFileSystem.c の 1066 行で定義されています。 参照先 BOOL.
01066 { 01067 #ifdef WIN32 01068 return (0==rename(oldname,newname)); 01069 #else 01070 return (0==rename(oldname,newname)); 01071 #endif 01072 } |
|
dkcSJISFileSystem.c の 743 行で定義されています。 参照元 dkcAllocDeserialize(), と dkcFileCopyEx().
00743 { 00744 struct stat s;//s 00745 if(!filename) return 0; 00746 return (stat(filename,&s)==0) ? (ULONG)s.st_size : 0; 00747 } |
|
dkcSJISFileSystem.c の 748 行で定義されています。 参照先 BOOL, FALSE, NULL, と TRUE.
00748 { 00749 #ifdef WIN32 00750 WIN32_FIND_DATA findData; 00751 HANDLE hFind=NULL; 00752 // ファイルサイズ取得 00753 if((hFind = FindFirstFile(str,&findData)) == INVALID_HANDLE_VALUE){ 00754 return FALSE; 00755 } 00756 00757 //ファイルのサイズをヴちこむ 00758 *high = findData.nFileSizeHigh; 00759 *low = findData.nFileSizeLow; 00760 FindClose(hFind); 00761 return TRUE; 00762 #else 00763 00764 #endif 00765 } |
|
FindClose() dkcSJISFileSystem.c の 1468 行で定義されています。 参照先 DKC_FINDFILE, edk_FAILED, edk_SUCCEEDED, dkc_FindFile::mDirent, dkc_FindFile::mHandle, と NULL.
01469 { 01470 #ifdef WIN32 01471 if(INVALID_HANDLE_VALUE == ptr->mHandle){ 01472 return edk_FAILED; 01473 } 01474 FindClose(ptr->mHandle); 01475 ptr->mHandle = INVALID_HANDLE_VALUE;//しっかりリセット 01476 #else 01477 if(0 == ptr->mHandle){ 01478 return edk_FAILED; 01479 } 01480 closedir(ptr->mHandle); 01481 ptr->mHandle = 0;//しっかりリセット 01482 ptr->mDirent = NULL; 01483 #endif 01484 01485 return edk_SUCCEEDED; 01486 01487 } |
|
dkcSJISFileSystem.c の 1489 行で定義されています。 参照先 DKC_FINDFILE, dkc_strcpy(), edk_FAILED, edk_LogicError, dkc_FindFile::mDirent, と NULL.
01490 { 01491 int r; 01492 size_t len; 01493 #ifdef WIN32 01494 len = strlen(ptr->mFindData.cFileName); 01495 if(0 == len) return edk_FAILED; 01496 r = dkc_strcpy(buff,buffsize,ptr->mFindData.cFileName,len); 01497 #else 01498 if(NULL==ptr->mDirent) 01499 {//呼び出しが間違っているよ^^; 01500 return edk_LogicError; 01501 } 01502 len = strlen(ptr->mDirent.d_name); 01503 if(0 == len) return edk_FAILED; 01504 r = dkc_strcpy(buff,buffsize,ptr->mDirent.d_name,len); 01505 #endif 01506 return r; 01507 } |
|
dkcSJISFileSystem.c の 1525 行で定義されています。 参照先 BOOL, DKC_FINDFILE, と strcmp().
|
|
dkcSJISFileSystem.c の 1509 行で定義されています。 参照先 BOOL, DKC_FINDFILE, と strcmp().
|
|
dkcSJISFileSystem.c の 1537 行で定義されています。 参照先 BOOL, と DKC_FINDFILE.
01538 { 01539 #ifdef WIN32 01540 return (ptr->mFindData.dwFileAttributes & FILE_ATTRIBUTE_NORMAL); 01541 #else 01542 01543 #endif 01544 } |
|
dkcSJISFileSystem.c の 1546 行で定義されています。 参照先 BOOL, と DKC_FINDFILE.
01546 { 01547 #ifdef WIN32 01548 return (ptr->mFindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY); 01549 #else 01550 01551 #endif 01552 } |
|
dkcSJISFileSystem.c の 1553 行で定義されています。 参照先 DKC_FINDFILE.
01553 { 01554 #ifdef WIN32 01555 *High = ptr->mFindData.nFileSizeHigh; 01556 *Low = ptr->mFindData.nFileSizeLow; 01557 #else 01558 01559 #endif 01560 01561 } |
|
Windowsで言うFindFirstFile()のラッパー UNIXやLINUXでも動くかも? dkcSJISFileSystem.c の 1420 行で定義されています。 参照先 DKC_FINDFILE, edk_FAILED, edk_SUCCEEDED, dkc_FindFile::mHandle, と NULL.
01420 { 01421 #ifdef WIN32 01422 ptr->mHandle = 01423 FindFirstFileA( target, &(ptr->mFindData) ); 01424 if(ptr->mHandle == INVALID_HANDLE_VALUE){ 01425 return edk_FAILED; 01426 } 01427 #else 01428 ptr->mHandle = opendir( target ); 01429 if(NULL==ptr->mHandle){ 01430 return edk_FAILED; 01431 } 01432 01433 #endif 01434 return edk_SUCCEEDED; 01435 } |
|
FindNextFile() dkcSJISFileSystem.c の 1437 行で定義されています。 参照先 DKC_FINDFILE, edk_EndProcess, edk_FAILED, edk_SUCCEEDED, dkc_FindFile::mDirent, と dkc_FindFile::mHandle.
01437 { 01438 # ifdef WIN32 01439 if ( 0 == FindNextFileA( ptr->mHandle, &(ptr->mFindData) )) 01440 { 01441 if ( GetLastError() == ERROR_NO_MORE_FILES ) 01442 {//なんだ、もう無いじゃん。 01443 return edk_EndProcess; 01444 } 01445 else//最悪のパターン 01446 { 01447 return edk_FAILED; 01448 } 01449 } 01450 # else 01451 errno = 0; 01452 ptr->mDirent = readdir( ptr->mHandle ); 01453 if ( ptr->mDirent == 0 ) 01454 { 01455 if ( errno == 0 ) 01456 {//もう無いよ^^; 01457 return edk_EndProcess; 01458 } 01459 else//最悪のパターン 01460 { 01461 return edk_FAILED; 01462 } 01463 } 01464 # endif 01465 return edk_SUCCEEDED; 01466 } |
|
dkcSJISFileSystem.c の 1412 行で定義されています。 参照先 DKC_FINDFILE, dkcFree(), edk_FAILED, と NULL.
01412 { 01413 if(NULL==ptr /*|| *ptr==NULL*/){ 01414 return edk_FAILED; 01415 } 01416 return dkcFree((void **)ptr); 01417 } |
|
dkcSJISFileSystem.c の 362 行で定義されています。 参照先 DKC_PATHSTRING, dkcFree(), dkcFreeString(), edk_ArgumentException, と NULL.
00363 { 00364 if(NULL==ptr || NULL==*ptr){ 00365 return edk_ArgumentException; 00366 } 00367 dkcFreeString(&((*ptr)->mString)); 00368 return dkcFree((void **)ptr); 00369 } |
|
dkcSJISFileSystem.c の 782 行で定義されています。 参照先 BOOL, dkc_strcpy(), dkcdMAXPATH_BUFFER, DKUTIL_SUCCEEDED, FALSE, NULL, と TRUE. 参照元 dkcCurrentDirectoryConcatenate().
00782 { 00783 # ifdef WIN32 00784 if(0==GetCurrentDirectory(size,buff)){ 00785 return FALSE; 00786 } 00787 /*if(NULL==_getcwd(path,dkcdMAXPATH_BUFFER)){ 00788 return FALSE; 00789 }*/ 00790 #else 00791 if(NULL==getcwd(buff,size)) 00792 return FALSE; 00793 #endif 00794 return TRUE; 00795 00796 #if 0 00797 /* どういう実装になっているか分からないのでとりあえず+1 */ 00798 char path[dkcdMAXPATH_BUFFER + 1]; 00799 size_t len; 00800 # ifdef WIN32 00801 if(0==GetCurrentDirectory(size,path)){ 00802 return FALSE; 00803 } 00804 /*if(NULL==_getcwd(path,dkcdMAXPATH_BUFFER)){ 00805 return FALSE; 00806 }*/ 00807 #else 00808 if(NULL==getcwd(path,dkcdMAXPATH_BUFFER)) 00809 return FALSE; 00810 #endif 00811 len = strlen(path); 00812 return DKUTIL_SUCCEEDED(dkc_strcpy(buff,size,path,len)); 00813 #endif //end of if 0 00814 } |
|
パス名から、拡張子の開始位置を取得する ファイル名の末尾からファイル名の最後の '.' までを、拡張子と判断する
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 の 642 行で定義されています。 参照先 DKC_PATHSTRING, dkcdMAXPATH, dkcmNOT_ASSERT, dkcPathStringCopy(), dkcPathStringNormalizeConcatenateLogic(), edk_FAILED, dkc_String::mByteSize, と dkc_PathString::mString.
00643 { 00644 int result; 00645 00646 dkcmNOT_ASSERT(ptr->mString->mByteSize + size >= dkcdMAXPATH); 00647 if(ptr->mString->mByteSize + size >= dkcdMAXPATH) 00648 {//これ以上は入れられない。 00649 return edk_FAILED; 00650 } 00651 00652 if(ptr->mString->mByteSize) 00653 {//すでに入っているものがある。 00654 result = dkcPathStringNormalizeConcatenateLogic(ptr,buff,size); 00655 } 00656 else 00657 {//何も無い時はこちらで 00658 result = dkcPathStringCopy(ptr,buff,size); 00659 } 00660 //return dkcPathStringNormalizeInsertLogic(ptr,buff,size,dkcStringConcatenate); 00661 return result; 00662 } |
|
パスを正規化して入れる。
dkcSJISFileSystem.c の 603 行で定義されています。 参照先 DKC_PATHSTRING, dkcdMAXPATH, dkcmNOT_ASSERT, dkcPathStringNormalizeCopyLogic(), dkcStringCopy(), edk_FAILED, dkc_String::mByteSize, と dkc_PathString::mString. 参照元 dkcAllocPathString(), dkcPathStringConcatenate(), と dkcPathStringNormalizeConcatenateLogic().
00604 { 00605 00606 dkcmNOT_ASSERT(ptr->mString->mByteSize + size >= dkcdMAXPATH); 00607 if(ptr->mString->mByteSize + size >= dkcdMAXPATH) 00608 {//これ以上は入れられない。 00609 return edk_FAILED; 00610 } 00611 return dkcPathStringNormalizeCopyLogic(ptr,buff,size,dkcStringCopy); 00612 } |
|
dkcSJISFileSystem.c の 385 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringDevideBegin_Logic(), と dkc_PathString::mIterateCount.
00386 { 00387 return dkcPathStringDevideBegin_Logic(ptr,&ptr->mIterateCount,buff,size); 00388 } |
|
dkcSJISFileSystem.c の 401 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcmNOT_ASSERT, dkcPathStringPointer(), dkcSJIS_StrChrSearch(), DKUTIL_FAILED, edk_BufferOverFlow, edk_EndProcess, edk_FAILED, edk_SUCCEEDED, と NULL. 参照元 dkcPathStringDevideBegin().
00402 { 00403 int i,point; 00404 const char *p; 00405 dkcmNOT_ASSERT(NULL==ptr || NULL==buff || 0==size); 00406 00407 //len = dkcPathStringSize(ptr); 00408 p = dkcPathStringPointer(ptr); 00409 00410 point = dkcSJIS_StrChrSearch(p,'\\'); 00411 if(-1==point){return edk_EndProcess;} 00412 00413 for(i=0;i<point;i++){//drive指定のものがあるかどうか。 00414 if(':'==p[i]){ 00415 if(DKUTIL_FAILED(dkc_strcpy( 00416 buff,size,p,(size_t)i//-1 00417 ))) 00418 { 00419 return edk_BufferOverFlow; 00420 } 00421 point = dkcSJIS_StrChrSearch(&p[i],'\\');//次の物を見つける。 00422 //(まぁ:の次は\\と言う事が決まっているけど、いちおう。 00423 *count = (size_t)i + point + 1;//次に始めるのは 00424 return edk_SUCCEEDED; 00425 } 00426 } 00427 if(DKUTIL_FAILED(dkc_strcpy( 00428 buff,size,p,(size_t)point-1 00429 ))) 00430 { 00431 return edk_FAILED; 00432 } 00433 *count = (size_t)point + 1;//次に始めるのは 00434 return edk_SUCCEEDED; 00435 } |
|
dkcSJISFileSystem.c の 396 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringDevideEnd_Logic(), と dkc_PathString::mIterateCount.
00396 { 00397 dkcPathStringDevideEnd_Logic(&ptr->mIterateCount); 00398 } |
|
dkcSJISFileSystem.c の 474 行で定義されています。
00474 { 00475 *count = 0; 00476 } |
|
dkcSJISFileSystem.c の 390 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringDevideNext_Logic(), と dkc_PathString::mIterateCount.
00391 { 00392 return dkcPathStringDevideNext_Logic(ptr,&ptr->mIterateCount,buff,size); 00393 00394 } |
|
dkcSJISFileSystem.c の 437 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcPathStringPointer(), dkcSJIS_StrChrSearch(), dkcStringSize(), DKUTIL_FAILED, edk_EndProcess, edk_FAILED, edk_SUCCEEDED, と dkc_PathString::mString. 参照元 dkcPathStringDevideNext().
00438 { 00439 int point; 00440 const char *p; 00441 size_t len; 00442 //len = dkcPathStringSize(ptr); 00443 p = dkcPathStringPointer(ptr); 00444 len = dkcStringSize(ptr->mString); 00445 if(len <= *count) 00446 {//もうこの関数を呼び出すのは終わりだっちゅうに!! 00447 return edk_EndProcess; 00448 } 00449 point = dkcSJIS_StrChrSearch(&p[*count],'\\'); 00450 if(-1==point) 00451 {//最後まで来ちまった。 00452 00453 00454 len -= *count; 00455 if(DKUTIL_FAILED(dkc_strcpy(//残り物を全部コピー 00456 buff,size,&p[*count],len 00457 ))) 00458 { 00459 return edk_FAILED; 00460 } 00461 *count += len; 00462 return edk_SUCCEEDED;//out 00463 } 00464 if(DKUTIL_FAILED(dkc_strcpy( 00465 buff,size,&p[*count],(size_t)point 00466 ))) 00467 { 00468 return edk_FAILED; 00469 } 00470 *count += (size_t)point + 1;//次に始めるのは 00471 return edk_SUCCEEDED;//out 00472 } |
|
dkcSJISFileSystem.c の 505 行で定義されています。 参照先 DKC_PATHSTRING, dkcPathStringPointer(), dkcPathStringSize(), dkcSJIS_SearchPathSep(), dkcStringErase(), と dkc_PathString::mString.
00507 { 00508 const char *p = dkcPathStringPointer(ptr); 00509 int endlen = dkcSJIS_SearchPathSep(&p[count]); 00510 00511 if(-1==endlen){ 00512 endlen = dkcPathStringSize(ptr); 00513 endlen = endlen - count; 00514 }else{ 00515 //endlen;//マイナスしておく \\をReplaceしないため 00516 } 00517 return dkcStringErase(ptr->mString,count - 1,(size_t)endlen + 1);//count -1は前の\\を消すためendlen + 1は-1した為 00518 } |
|
パスの要素を挿入する。(正規化はしない lenは文字数
dkcSJISFileSystem.c の 478 行で定義されています。 参照先 DKC_PATHSTRING, dkcIsNativePathString(), dkcIsTailPathSep(), dkcPushBackPathSep(), dkcStringInsert(), edk_FAILED, edk_OutOfMemory, FALSE, と dkc_PathString::mString.
00480 { 00481 int r; 00482 size_t size = len + 5; 00483 00484 char *p; 00485 if(len==0 || FALSE==dkcIsNativePathString(src,len)) 00486 { 00487 return edk_FAILED; 00488 } 00489 if(FALSE==dkcIsTailPathSep(src,len))//後ろにPathSeparatorが無い!! 00490 { 00491 p = (char *)malloc(size); 00492 00493 if(!p) return edk_OutOfMemory; 00494 strcpy(p,src);//あまり使いたくないけどすでにバッファは保証されているのでstrcpy 00495 dkcPushBackPathSep(p,len,size); 00496 00497 r = dkcStringInsert(ptr->mString,count,p,strlen(p)); 00498 free(p); 00499 }else{ 00500 r = dkcStringInsert(ptr->mString,count,src,len); 00501 } 00502 return r; 00503 } |
|
パスの要素を置換する。(正規化はしない lenは文字数
dkcSJISFileSystem.c の 522 行で定義されています。 参照先 DKC_PATHSTRING, dkcIsNativePathString(), dkcPathStringPointer(), dkcPathStringSize(), dkcSJIS_SearchPathSep(), dkcStringReplace(), edk_FAILED, FALSE, と dkc_PathString::mString.
00524 { 00525 const char *p = dkcPathStringPointer(ptr); 00526 int endlen; 00527 if(len==0 || FALSE==dkcIsNativePathString(src,len)) 00528 { 00529 return edk_FAILED; 00530 } 00531 endlen = dkcSJIS_SearchPathSep(&p[count]);//countから検索している 00532 if(-1==endlen){ 00533 endlen = dkcPathStringSize(ptr); 00534 endlen = endlen - count; 00535 }else{ 00536 if(0 != endlen) 00537 endlen--;//マイナスしておく \\をReplaceしないため 00538 } 00539 return dkcStringReplace(ptr->mString,count,count + endlen,src,len); 00540 /* 00541 size_t size = len + 5; 00542 int r; 00543 // int point; 00544 const char *pointer; 00545 char *p ; 00546 if(FALSE==dkcIsTailPathSep(src,len))//後ろにPathSeparatorが無い!! 00547 { 00548 //文字列をちと変更 00549 p = malloc(size); 00550 if(!p) return edk_OutOfMemory; 00551 strcpy(p,src); 00552 r = dkcPushBackPathSep(p,len,size); 00553 }else{ 00554 p = (char *)src; 00555 } 00556 pointer = dkcPathStringPointer(ptr); 00557 //countから調べる。 00558 dkcSJIS_SearchPathSep(&pointer[count]); 00559 */ 00560 00561 00562 00563 00564 00565 } |
|
dkcSJISFileSystem.c の 719 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcdPATH_SEP, dkcSJIS_StrChrSearchTail(), dkcStringPointer(), dkcStringSize(), edk_FAILED, と dkc_PathString::mString.
00720 { 00721 const char *p = dkcStringPointer(ptr->mString); 00722 int point = dkcSJIS_StrChrSearchTail(p,strlen(p),dkcdPATH_SEP); 00723 size_t len = dkcStringSize(ptr->mString); 00724 //if(point - 1 <= 0) return edk_FAILED; 00725 if(point < 0) return edk_FAILED; 00726 if((size_t)(point + 1) > len) return edk_FAILED; 00727 //if((size_t)point == len) return edk_FAILED;//ファイル名が無い。 00728 return dkc_strcpy(buff,size,p,point);//\\も含める。 00729 00730 } |
|
dkcSJISFileSystem.c の 666 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcSJIS_StrChrSearch(), dkcStringPointer(), edk_Not_Found, と dkc_PathString::mString.
00666 { 00667 const char *p = dkcStringPointer(ptr->mString); 00668 int point = dkcSJIS_StrChrSearch(p,':'); 00669 if(-1 == point) return edk_Not_Found;//見つからない。 00670 //return dkc_memcpy(buff,size,p,(size_t)point - 1); 00671 return dkc_strcpy(buff,size,p,(size_t)1);//driveなら1文字で十分だよね^^; 00672 } |
|
dkcSJISFileSystem.c の 674 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcSJIS_SearchPathSep(), dkcSJIS_StrChrSearchLast(), dkcStringPointer(), dkcStringSize(), edk_FAILED, edk_Not_Found, と dkc_PathString::mString.
00675 { 00676 int point2; 00677 size_t len; 00678 const char *p = dkcStringPointer(ptr->mString); 00679 int point = dkcSJIS_StrChrSearchLast(p,'.'); 00680 00681 if(point < 0) return edk_Not_Found;//見つからない。 00682 00683 point2 = dkcSJIS_SearchPathSep(&p[point]); 00684 if(point < point2){//C:\ok.OK\folderのような状況になっている。 00685 return edk_Not_Found; 00686 } 00687 len = dkcStringSize(ptr->mString); 00688 //if(point - 1 <= 0) return edk_FAILED; 00689 00690 if((size_t)(point + 1) > len) return edk_FAILED;//Logicalなエラー?? 00691 return dkc_strcpy(buff,size,&p[point + 1],(size_t)len - (size_t)point ); 00692 00693 } |
|
dkcSJISFileSystem.c の 695 行で定義されています。 参照先 DKC_PATHSTRING, dkc_strcpy(), dkcmFORCE_NOT_ASSERT, dkcSJIS_SearchPathSepLast(), dkcStringPointer(), dkcStringSize(), edk_FAILED, edk_Not_Found, dkc_PathString::mString, と NULL.
00696 { 00697 const char *p = dkcStringPointer(ptr->mString); 00698 //int point = dkcSJIS_StrChrSearchLast(p,dkcdPATH_SEP); 00699 int point = dkcSJIS_SearchPathSepLast(p); 00700 size_t len = dkcStringSize(ptr->mString); 00701 //if(point - 1 <= 0) return edk_FAILED; 00702 #if 0 00703 if(point < 0) return edk_Not_Found;//見つからない。 00704 if((size_t)(point + 1) > len) return edk_FAILED; 00705 if((size_t)point == len) return edk_FAILED;//ファイル名が無い。 00706 00707 #else 00708 printf("%d",point); 00709 00710 dkcmFORCE_NOT_ASSERT(NULL==p); 00711 dkcmFORCE_NOT_ASSERT(point < 0); 00712 dkcmFORCE_NOT_ASSERT((size_t)(point + 1) > len); 00713 dkcmFORCE_NOT_ASSERT((size_t)point == len); 00714 00715 #endif 00716 return dkc_strcpy(buff,size,&p[point + 1],(size_t)len - (size_t)point ); 00717 } |
|
dkcSJISFileSystem.c の 614 行で定義されています。 参照先 DKC_PATHSTRING, dkcdMAXPATH_BUFFER, dkcdPATH_SEP_STR, dkcIsTailPathSep(), dkcPathStringCopy(), dkcPathStringPointer(), dkcPathStringSize(), dkcStringConcatenate(), DKUTIL_FAILED, edk_FAILED, FALSE, dkc_PathString::mString, と ToAbsolutelyLogic(). 参照元 dkcPathStringConcatenate().
00616 { 00617 char dest[dkcdMAXPATH_BUFFER]; 00618 00619 00620 if(FALSE==dkcIsTailPathSep(dkcPathStringPointer(ptr),dkcPathStringSize(ptr))) 00621 { 00622 dkcStringConcatenate(ptr->mString,dkcdPATH_SEP_STR,1); 00623 } 00624 dkcStringConcatenate(ptr->mString,buff,size); 00625 00626 size = dkcPathStringSize(ptr) + 1; 00627 00628 //p = malloc(dkcPathStringSize(ptr)); 00629 //if(!p) return edk_OutOfMemory; 00630 00631 00632 if(DKUTIL_FAILED( 00633 ToAbsolutelyLogic(dest,sizeof(dest),dkcPathStringPointer(ptr)) 00634 )){ 00635 return edk_FAILED; 00636 } 00637 00638 return dkcPathStringCopy(ptr,dest,strlen(dest)); 00639 } |
|
dkcSJISFileSystem.c の 572 行で定義されています。 参照先 DKC_PATHSTRING, DKC_STRING, dkcdMAXPATH_BUFFER, dkcmNOT_ASSERT, dkcToAbsolutelyPath(), DKUTIL_FAILED, dkc_PathString::mString, と NULL. 参照元 dkcPathStringCopy().
00574 { 00575 //const size_t bsize = dkcdMAXPATH_BUFFER + 1; 00576 size_t len; 00577 int result; 00578 //char *pb = malloc(bsize); 00579 //if(NULL== pb) return edk_OutOfMemory; 00580 char pb[dkcdMAXPATH_BUFFER]; 00581 size_t bsize = sizeof(pb); 00582 00583 result = dkcToAbsolutelyPath(pb,bsize,buff,size); 00584 00585 00586 len = strlen(pb); 00587 00588 # ifdef DEBUG //ありえないよ〜エラーチェック 00589 dkcmNOT_ASSERT(DKUTIL_FAILED(result)); 00590 dkcmNOT_ASSERT(len >= bsize);// >=にするのはNULL文字が潰されているかどうか。 00591 dkcmNOT_ASSERT(NULL==function__); 00592 # endif 00593 if(DKUTIL_FAILED(result)){ 00594 goto Error; 00595 } 00596 result = function__(ptr->mString,pb,len); 00597 00598 Error: 00599 //if(pb){free(pb);pb=NULL;} 00600 return result; 00601 } |
|
dkcSJISFileSystem.c の 377 行で定義されています。 参照先 DKC_PATHSTRING, dkcStringPointer(), と dkc_PathString::mString. 参照元 dkcPathStringDevideBegin_Logic(), dkcPathStringDevideNext_Logic(), dkcPathStringElementErase_Logic(), dkcPathStringElementReplace_Logic(), と dkcPathStringNormalizeConcatenateLogic().
00378 { 00379 return dkcStringPointer(p->mString); 00380 } |
|
dkcSJISFileSystem.c の 372 行で定義されています。 参照先 DKC_PATHSTRING, dkcStringSize(), と dkc_PathString::mString. 参照元 dkcPathStringElementErase_Logic(), dkcPathStringElementReplace_Logic(), と dkcPathStringNormalizeConcatenateLogic().
00373 { 00374 return dkcStringSize(p->mString); 00375 } |
|
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 の 768 行で定義されています。 参照先 BOOL, dkcIsEffectivePath(), dkcmNOT_ASSERT, と FALSE.
00768 { 00769 #ifdef DEBUG 00770 size_t len = strlen(filename); 00771 dkcmNOT_ASSERT(0==len || FALSE==dkcIsEffectivePath(filename,len)); 00772 #endif 00773 # ifdef WIN32 00774 return(0 != SetCurrentDirectory(filename)); 00775 //return (_chdir(filename)==0); 00776 # else 00777 return (chdir(filename)==0); 00778 # endif 00779 } |
|
パスを正規化(相対パスから絶対パス)する関数
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 } |