#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 }
|
1.3.6