Merge pull request #4324 from FernetMenta/wasapi
[vuplus_xbmc] / lib / UnrarXLib / filcreat.cpp
1 #include "rar.hpp"
2
3 bool FileCreate(RAROptions *Cmd,File *NewFile,char *Name,wchar *NameW,
4                 OVERWRITE_MODE Mode,bool *UserReject,Int64 FileSize,
5                 uint FileTime)
6 {
7   if (UserReject!=NULL)
8     *UserReject=false;
9   while (FileExist(Name,NameW))
10   {
11     if (Mode==OVERWRITE_NONE)
12     {
13       if (UserReject!=NULL)
14         *UserReject=true;
15       return(false);
16     }
17 #ifdef SILENT
18     Mode=OVERWRITE_ALL;
19 #endif
20     if (Cmd->AllYes || Mode==OVERWRITE_ALL)
21       break;
22     if (Mode==OVERWRITE_ASK)
23     {
24       eprintf(St(MFileExists),Name);
25       int Choice=Ask(St(MYesNoAllRenQ));
26       if (Choice==1)
27         break;
28       if (Choice==2)
29       {
30         if (UserReject!=NULL)
31           *UserReject=true;
32         return(false);
33       }
34       if (Choice==3)
35       {
36         Cmd->Overwrite=OVERWRITE_ALL;
37         break;
38       }
39       if (Choice==4)
40       {
41         if (UserReject!=NULL)
42           *UserReject=true;
43         Cmd->Overwrite=OVERWRITE_NONE;
44         return(false);
45       }
46       if (Choice==5)
47       {
48         mprintf(St(MAskNewName));
49
50         char NewName[NM];
51 #ifdef  _WIN_32
52         File SrcFile;
53         SrcFile.SetHandleType(FILE_HANDLESTD);
54         int Size=SrcFile.Read(NewName,NM);
55         NewName[Size]=0;
56         OemToChar(NewName,NewName);
57 #else
58         if (!fgets(NewName,sizeof(NewName),stdin))
59           continue;
60 #endif
61         RemoveLF(NewName);
62         if (PointToName(NewName)==NewName)
63           strcpy(PointToName(Name),NewName);
64         else
65           strcpy(Name,NewName);
66         if (NameW!=NULL)
67           *NameW=0;
68         continue;
69       }
70       if (Choice==6)
71         ErrHandler.Exit(USER_BREAK);
72     }
73   }
74   if (NewFile!=NULL && NewFile->Create(Name,NameW))
75     return(true);
76   PrepareToDelete(Name,NameW);
77   return(NewFile!=NULL ? NewFile->Create(Name,NameW):DelFile(Name,NameW));
78 }