libclamunrar/uicommon.cpp
d39cb658
 static bool uiSoundEnabled;
 
 void uiInit(bool Sound)
 {
   uiSoundEnabled = Sound;
 }
 
 
 // Additionally to handling user input, it analyzes and sets command options.
 // Returns only 'replace', 'skip' and 'cancel' codes.
 UIASKREP_RESULT uiAskReplaceEx(RAROptions *Cmd,wchar *Name,size_t MaxNameSize,int64 FileSize,RarTime *FileTime,uint Flags)
 {
   if (Cmd->Overwrite==OVERWRITE_NONE)
     return UIASKREP_R_SKIP;
 
 #if !defined(SFX_MODULE) && !defined(SILENT)
   // Must be before Cmd->AllYes check or -y switch would override -or.
   if (Cmd->Overwrite==OVERWRITE_AUTORENAME && GetAutoRenamedName(Name,MaxNameSize))
     return UIASKREP_R_REPLACE;
 #endif
 
   // This check must be after OVERWRITE_AUTORENAME processing or -y switch
   // would override -or.
   if (Cmd->AllYes || Cmd->Overwrite==OVERWRITE_ALL)
   {
     PrepareToDelete(Name);
     return UIASKREP_R_REPLACE;
   }
 
   wchar NewName[NM];
   wcsncpyz(NewName,Name,ASIZE(NewName));
   UIASKREP_RESULT Choice=uiAskReplace(NewName,ASIZE(NewName),FileSize,FileTime,Flags);
 
   if (Choice==UIASKREP_R_REPLACE || Choice==UIASKREP_R_REPLACEALL)
     PrepareToDelete(Name);
 
   if (Choice==UIASKREP_R_REPLACEALL)
   {
     Cmd->Overwrite=OVERWRITE_ALL;
     return UIASKREP_R_REPLACE;
   }
   if (Choice==UIASKREP_R_SKIPALL)
   {
     Cmd->Overwrite=OVERWRITE_NONE;
     return UIASKREP_R_SKIP;
   }
   if (Choice==UIASKREP_R_RENAME)
   {
     if (PointToName(NewName)==NewName)
       SetName(Name,NewName,MaxNameSize);
     else
       wcsncpyz(Name,NewName,MaxNameSize);
     if (FileExist(Name))
       return uiAskReplaceEx(Cmd,Name,MaxNameSize,FileSize,FileTime,Flags);
     return UIASKREP_R_REPLACE;
   }
 #if !defined(SFX_MODULE) && !defined(SILENT)
   if (Choice==UIASKREP_R_RENAMEAUTO && GetAutoRenamedName(Name,MaxNameSize))
   {
     Cmd->Overwrite=OVERWRITE_AUTORENAME;
     return UIASKREP_R_REPLACE;
   }
 #endif
   return Choice;
 }