#include "dkcOSIndependent.h"
#include "dkcMemoryStream.h"
#include "dkcString.h"
#include "dkcStack.h"
#include "dirent.h"
#include "unistd.h"
#include "fcntl.h"
#include "utime.h"
dkcSJISFileSystem.hのインクルード依存関係図

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

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