diff options
Diffstat (limited to 'lib/UnrarXLib/filestr.cpp')
-rw-r--r-- | lib/UnrarXLib/filestr.cpp | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/lib/UnrarXLib/filestr.cpp b/lib/UnrarXLib/filestr.cpp deleted file mode 100644 index ae7eeb46e7..0000000000 --- a/lib/UnrarXLib/filestr.cpp +++ /dev/null @@ -1,139 +0,0 @@ -#include "rar.hpp" - -static bool IsUnicode(byte *Data,int Size); - -bool ReadTextFile(char *Name,StringList *List,bool Config,bool AbortOnError, - bool ConvertToAnsi,bool Unquote,bool SkipComments) -{ - char FileName[NM]; - if (Config) - GetConfigName(Name,FileName,true); - else - strcpy(FileName,Name); - - File SrcFile; - if (*FileName) - { - bool OpenCode=AbortOnError ? SrcFile.WOpen(FileName):SrcFile.Open(FileName); - - if (!OpenCode) - { - if (AbortOnError) - ErrHandler.Exit(OPEN_ERROR); - return(false); - } - } - else - SrcFile.SetHandleType(FILE_HANDLESTD); - - unsigned int DataSize=0,ReadSize; - const int ReadBlock=1024; - Array<char> Data(ReadBlock+5); - while ((ReadSize=SrcFile.Read(&Data[DataSize],ReadBlock))!=0) - { - DataSize+=ReadSize; - Data.Add(ReadSize); - } - - memset(&Data[DataSize],0,5); - - if (IsUnicode((byte *)&Data[0],DataSize)) - { - wchar *CurStr=(wchar *)&Data[2]; - Array<char> AnsiName; - - while (*CurStr!=0) - { - wchar *NextStr=CurStr,*CmtPtr=NULL; - while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0) - { - if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/') - { - *NextStr=0; - CmtPtr=NextStr; - } - NextStr++; - } - *NextStr=0; - for (wchar *SpacePtr=(CmtPtr ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--) - { - if (*SpacePtr!=' ' && *SpacePtr!='\t') - break; - *SpacePtr=0; - } - if (*CurStr) - { - int Length=strlenw(CurStr); - int AddSize=Length-AnsiName.Size()+1; - if (AddSize>0) - AnsiName.Add(AddSize); - if (Unquote && *CurStr=='\"' && CurStr[Length-1]=='\"') - { - CurStr[Length-1]=0; - CurStr++; - } - WideToChar(CurStr,&AnsiName[0]); - List->AddString(&AnsiName[0],CurStr); - } - CurStr=NextStr+1; - while (*CurStr=='\r' || *CurStr=='\n') - CurStr++; - } - } - else - { - char *CurStr=&Data[0]; - while (*CurStr!=0) - { - char *NextStr=CurStr,*CmtPtr=NULL; - while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0) - { - if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/') - { - *NextStr=0; - CmtPtr=NextStr; - } - NextStr++; - } - *NextStr=0; - for (char *SpacePtr=(CmtPtr ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--) - { - if (*SpacePtr!=' ' && *SpacePtr!='\t') - break; - *SpacePtr=0; - } - if (*CurStr) - { - if (Unquote && *CurStr=='\"') - { - int Length=strlen(CurStr); - if (CurStr[Length-1]=='\"') - { - CurStr[Length-1]=0; - CurStr++; - } - } -#if defined(_WIN_32) && !defined(TARGET_POSIX) - //if (ConvertToAnsi) - // OemToChar(CurStr,CurStr); -#endif - List->AddString(CurStr); - } - CurStr=NextStr+1; - while (*CurStr=='\r' || *CurStr=='\n') - CurStr++; - } - } - return(true); -} - - -bool IsUnicode(byte *Data,int Size) -{ - if (Size<4 || Data[0]!=0xff || Data[1]!=0xfe) - return(false); - for (int I=2;I<Size;I++) - if (Data[I]<32) - return(true); - return(false); -} |