46
#if !defined(SFX_MODULE) && !defined(_ANDROID)
49
47
void CommandData::ParseCommandLine(bool Preprocess,int argc, char *argv[])
51
51
#ifdef CUSTOM_CMDLINE_PARSER
52
52
// In Windows we may prefer to implement our own command line parser
53
53
// to avoid replacing \" by " in standard parser. Such replacing corrupts
194
#if !defined(SFX_MODULE) && !defined(_ANDROID)
201
195
// Preprocess those parameters, which must be processed before the rest of
202
196
// command line. Return 'false' to stop further processing.
203
bool CommandData::PreprocessSwitch(const wchar *Switch)
197
void CommandData::PreprocessArg(const wchar *Arg)
205
if (IsSwitch(Switch[0]))
199
if (IsSwitch(Arg[0]) && !NoMoreSwitches)
209
WideToChar(Switch,SwitchA,ASIZE(SwitchA));
210
if (wcsicomp(Switch,L"-")==0) // Switch "--".
212
if (wcsicomp(Switch,L"cfg-")==0)
202
if (Arg[0]=='-' && Arg[1]==0) // Switch "--".
204
if (wcsicomp(Arg,L"cfg-")==0)
213
205
ConfigDisabled=true;
215
if (wcsnicomp(Switch,L"ilog",4)==0)
207
if (wcsnicomp(Arg,L"ilog",4)==0)
217
209
// Ensure that correct log file name is already set
218
210
// if we need to report an error when processing the command line.
219
ProcessSwitch(Switch);
220
212
InitLogOptions(LogName,ErrlogCharset);
223
if (wcsnicomp(Switch,L"sc",2)==0)
215
if (wcsnicomp(Arg,L"sc",2)==0)
225
217
// Process -sc before reading any file lists.
226
ProcessSwitch(Switch);
229
221
InitLogOptions(LogName,ErrlogCharset);
227
wcsncpy(Command,Arg,ASIZE(Command)); // Need for rar.ini.
238
#if !defined(GUI) && !defined(SFX_MODULE)
232
#if !defined(GUI) && !defined(SFX_MODULE) && !defined(_ANDROID)
239
233
void CommandData::ReadConfig()
249
243
if (wcsnicomp(Str,L"switches=",9)==0)
250
244
ProcessSwitchesString(Str+9);
248
wcsncpyz(Cmd,Command,ASIZE(Cmd));
249
wchar C0=toupperw(Cmd[0]);
250
wchar C1=toupperw(Cmd[1]);
251
if (C0=='I' || C0=='L' || C0=='M' || C0=='S' || C0=='V')
253
if (C0=='R' && (C1=='R' || C1=='V'))
255
wchar SwName[16+ASIZE(Cmd)];
256
swprintf(SwName,ASIZE(SwName),L"switches_%s=",Cmd);
257
size_t Length=wcslen(SwName);
258
if (wcsnicomp(Str,SwName,Length)==0)
259
ProcessSwitchesString(Str+Length);
267
#if !defined(SFX_MODULE) && !defined(_ANDROID)
258
268
void CommandData::ProcessSwitchesString(const wchar *Str)
536
543
if (wcspbrk(Names,L"*?.")==NULL)
537
swprintf(Mask,ASIZE(Mask),L"*.%s",Names);
544
swprintf(Mask,ASIZE(Mask),L"*.%ls",Names);
539
546
wcsncpyz(Mask,Names,ASIZE(Mask));
540
547
StoreArgs.AddString(Mask);
951
960
MCHelpSwCm,MCHelpSwCFGm,MCHelpSwCL,MCHelpSwCU,
952
961
MCHelpSwDH,MCHelpSwEP,MCHelpSwEP3,MCHelpSwF,MCHelpSwIDP,MCHelpSwIERR,
953
962
MCHelpSwINUL,MCHelpSwIOFF,MCHelpSwKB,MCHelpSwN,MCHelpSwNa,MCHelpSwNal,
954
MCHelpSwO,MCHelpSwOC,MCHelpSwOR,MCHelpSwOW,MCHelpSwP,
955
MCHelpSwPm,MCHelpSwR,MCHelpSwRI,MCHelpSwSL,MCHelpSwSM,MCHelpSwTA,
956
MCHelpSwTB,MCHelpSwTN,MCHelpSwTO,MCHelpSwTS,MCHelpSwU,MCHelpSwVUnr,
957
MCHelpSwVER,MCHelpSwVP,MCHelpSwX,MCHelpSwXa,MCHelpSwXal,MCHelpSwY
963
MCHelpSwO,MCHelpSwOC,MCHelpSwOL,MCHelpSwOR,MCHelpSwOW,MCHelpSwP,
964
MCHelpSwPm,MCHelpSwR,MCHelpSwRI,MCHelpSwSC,MCHelpSwSL,MCHelpSwSM,
965
MCHelpSwTA,MCHelpSwTB,MCHelpSwTN,MCHelpSwTO,MCHelpSwTS,MCHelpSwU,
966
MCHelpSwVUnr,MCHelpSwVER,MCHelpSwVP,MCHelpSwX,MCHelpSwXa,MCHelpSwXal,
1023
1024
if (!CheckInclList || InclArgs.ItemsCount()==0)
1025
if (ExclCheckArgs(&InclArgs,Dir,CheckName,false,MATCH_WILDSUBPATH))
1026
if (ExclCheckArgs(&InclArgs,Dir,CheckName,CheckFullPath,MATCH_WILDSUBPATH))
1161
int CommandData::IsProcessFile(FileHeader &FileHead,bool *ExactMatch,int MatchType)
1162
int CommandData::IsProcessFile(FileHeader &FileHead,bool *ExactMatch,int MatchType,
1163
wchar *MatchedArg,uint MatchedArgSize)
1165
if (MatchedArg!=NULL && MatchedArgSize>0)
1163
1167
if (wcslen(FileHead.FileName)>=NM)
1165
1169
bool Dir=FileHead.Dir;
1334
1340
if (Format==RARFMT15)
1336
1342
if (HashType!=HASH_CRC32)
1338
mprintf(St(MIncompatSwitch),L"-ht",4);
1343
uiMsg(UIERROR_INCOMPATSWITCH,L"-ht",4);
1340
1344
#ifdef _WIN_ALL
1341
1345
if (SaveSymLinks)
1343
mprintf(St(MIncompatSwitch),L"-ol",4);
1346
uiMsg(UIERROR_INCOMPATSWITCH,L"-ol",4);
1346
1348
if (SaveHardLinks)
1348
mprintf(St(MIncompatSwitch),L"-oh",4);
1349
uiMsg(UIERROR_INCOMPATSWITCH,L"-oh",4);
1351
1351
#ifdef _WIN_ALL
1352
// Do not report a wrong dictionary size here, because we are not sure
1353
// yet about archive format. We can switch to RAR5 mode later
1354
// if we update RAR5 archive.
1355
1358
if (QOpenMode!=QOPEN_AUTO)
1357
mprintf(St(MIncompatSwitch),L"-qo",4);
1360
// We use 64 MB for both formats and reduce it for RAR 4.x later.
1361
if (WinSize>0x400000)
1364
swprintf(SwMD,ASIZE(SwMD),L"-md%dm",WinSize/0x100000);
1365
mprintf(St(MIncompatSwitch),SwMD,4);
1359
uiMsg(UIERROR_INCOMPATSWITCH,L"-qo",4);
1369
1361
if (Format==RARFMT50)