74
void SetExt(wchar *Name,const wchar *NewExt)
74
void SetExt(wchar *Name,const wchar *NewExt,size_t MaxSize)
76
76
if (Name==NULL || *Name==0)
78
78
wchar *Dot=GetExt(Name);
83
wcsncatz(Name,L".",MaxSize);
84
wcsncatz(Name,NewExt,MaxSize);
96
void SetSFXExt(wchar *SFXName)
90
void SetSFXExt(wchar *SFXName,size_t MaxSize)
98
92
if (SFXName==NULL || *SFXName==0)
102
SetExt(SFXName,L"sfx");
96
SetExt(SFXName,L"sfx",MaxSize);
105
99
#if defined(_WIN_ALL) || defined(_EMX)
106
SetExt(SFXName,L"exe");
100
SetExt(SFXName,L"exe",MaxSize);
106
// 'Ext' is an extension with the leading dot, like L".rar".
112
107
wchar *GetExt(const wchar *Name)
114
109
return Name==NULL ? NULL:wcsrchr(PointToName(Name),'.');
244
235
if (*Path==0 || !FileExist(Path))
245
GetAppDataPath(Path,MaxSize,Create);
236
if (!GetAppDataPath(Path,MaxSize,Create))
238
GetModuleFileName(NULL,Path,(DWORD)MaxSize);
239
RemoveNameFromPath(Path);
441
437
if (s-Name>1 && *s==':')
443
if ((*s==' ' || *s=='.') && IsPathDiv(s[1]))
439
#if 0 // We already can create such files.
440
// Remove ' ' and '.' before path separator, but allow .\ and ..\.
441
if (IsPathDiv(s[1]) && (*s==' ' || *s=='.' && s>Name &&
442
!IsPathDiv(s[-1]) && (s[-1]!='.' || s>Name+1 && !IsPathDiv(s[-2]))))
450
char* UnixSlashToDos(char *SrcName,char *DestName,size_t MaxLength)
452
if (DestName!=NULL && DestName!=SrcName)
453
if (strlen(SrcName)>=MaxLength)
459
strcpy(DestName,SrcName);
460
for (char *s=SrcName;*s!=0;s=charnext(s))
466
DestName[s-SrcName]='\\';
468
return DestName==NULL ? SrcName:DestName;
472
char* DosSlashToUnix(char *SrcName,char *DestName,size_t MaxLength)
474
if (DestName!=NULL && DestName!=SrcName)
475
if (strlen(SrcName)>=MaxLength)
481
strcpy(DestName,SrcName);
482
for (char *s=SrcName;*s!=0;s=charnext(s))
488
DestName[s-SrcName]='/';
490
return DestName==NULL ? SrcName:DestName;
494
wchar* UnixSlashToDos(wchar *SrcName,wchar *DestName,size_t MaxLength)
496
if (DestName!=NULL && DestName!=SrcName)
497
if (wcslen(SrcName)>=MaxLength)
503
wcscpy(DestName,SrcName);
504
for (wchar *s=SrcName;*s!=0;s++)
510
DestName[s-SrcName]='\\';
512
return DestName==NULL ? SrcName:DestName;
516
wchar* DosSlashToUnix(wchar *SrcName,wchar *DestName,size_t MaxLength)
518
if (DestName!=NULL && DestName!=SrcName)
519
if (wcslen(SrcName)>=MaxLength)
525
wcscpy(DestName,SrcName);
526
for (wchar *s=SrcName;*s!=0;s++)
532
DestName[s-SrcName]='/';
534
return DestName==NULL ? SrcName:DestName;
450
void UnixSlashToDos(const char *SrcName,char *DestName,size_t MaxLength)
453
for (;Copied<MaxLength-1 && SrcName[Copied]!=0;Copied++)
454
DestName[Copied]=SrcName[Copied]=='/' ? '\\':SrcName[Copied];
459
void DosSlashToUnix(const char *SrcName,char *DestName,size_t MaxLength)
462
for (;Copied<MaxLength-1 && SrcName[Copied]!=0;Copied++)
463
DestName[Copied]=SrcName[Copied]=='\\' ? '/':SrcName[Copied];
468
void UnixSlashToDos(const wchar *SrcName,wchar *DestName,size_t MaxLength)
471
for (;Copied<MaxLength-1 && SrcName[Copied]!=0;Copied++)
472
DestName[Copied]=SrcName[Copied]=='/' ? '\\':SrcName[Copied];
477
void DosSlashToUnix(const wchar *SrcName,wchar *DestName,size_t MaxLength)
480
for (;Copied<MaxLength-1 && SrcName[Copied]!=0;Copied++)
481
DestName[Copied]=SrcName[Copied]=='\\' ? '/':SrcName[Copied];
643
597
#if !defined(SFX_MODULE) && !defined(SETUP)
644
598
// Get the name of first volume. Return the leftmost digit of volume number.
645
wchar* VolNameToFirstName(const wchar *VolName,wchar *FirstName,bool NewNumbering)
599
wchar* VolNameToFirstName(const wchar *VolName,wchar *FirstName,size_t MaxSize,bool NewNumbering)
647
601
if (FirstName!=VolName)
648
wcscpy(FirstName,VolName);
602
wcsncpyz(FirstName,VolName,MaxSize);
649
603
wchar *VolNumStart=FirstName;
650
604
if (NewNumbering)