]>
git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Disk/UdfDxe/FileName.c
2 Helper functions for mangling file names in UDF/ECMA-167 file systems.
4 Copyright (C) 2014-2017 Paulo Alcantara <pcacjr@zytor.com>
6 This program and the accompanying materials are licensed and made available
7 under the terms and conditions of the BSD License which accompanies this
8 distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
12 WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
24 for ( ; *String
!= L
'\0' && *String
== L
' '; String
++) {
28 TempString
= String
+ StrLen (String
) - 1;
29 while ((TempString
>= String
) && (*TempString
== L
' ')) {
33 *(TempString
+ 1) = L
'\0';
40 IN CHAR16
*Destination
,
41 IN CONST CHAR16
*Source
44 CONST CHAR16
*EndString
;
46 EndString
= Source
+ StrLen (Source
);
47 while (Source
<= EndString
) {
48 *Destination
++ = *Source
++;
53 ExcludeTrailingBackslashes (
59 switch (*(String
+ 1)) {
69 while (*TempString
!= L
'\0' && *TempString
== L
'\\') {
73 if (TempString
- 1 > String
) {
74 ReplaceLeft (String
+ 1, TempString
);
84 Mangle a filename by cutting off trailing whitespaces, "\\", "." and "..".
86 @param[in] FileName Filename.
88 @retval @p FileName Filename mangled.
96 CHAR16
*FileNameSavedPointer
;
100 if (FileName
== NULL
|| *FileName
== L
'\0') {
105 FileName
= TrimString (FileName
);
106 if (*FileName
== L
'\0') {
110 if ((StrLen (FileName
) > 1) && (FileName
[StrLen (FileName
) - 1] == L
'\\')) {
111 FileName
[StrLen (FileName
) - 1] = L
'\0';
114 FileNameSavedPointer
= FileName
;
116 if (FileName
[0] == L
'.') {
117 if (FileName
[1] == L
'.') {
118 if (FileName
[2] == L
'\0') {
123 } else if (FileName
[1] == L
'\0') {
128 while (*FileName
!= L
'\0') {
129 if (*FileName
== L
'\\') {
130 FileName
= ExcludeTrailingBackslashes (FileName
);
131 } else if (*FileName
== L
'.') {
132 switch (*(FileName
+ 1)) {
137 TempFileName
= FileName
+ 1;
138 TempFileName
= ExcludeTrailingBackslashes (TempFileName
);
139 ReplaceLeft (FileName
, TempFileName
);
142 if ((*(FileName
- 1) != L
'\\') && ((*(FileName
+ 2) != L
'\\') ||
143 (*(FileName
+ 2) != L
'\0'))) {
149 TempFileName
= FileName
- 1;
150 while (TempFileName
>= FileNameSavedPointer
) {
151 if (*TempFileName
== L
'\\') {
152 if (++BackslashesNo
== 2) {
162 if ((*TempFileName
== L
'.') && (*(TempFileName
+ 1) == L
'.')) {
165 if (*(FileName
+ 2) != L
'\0') {
166 ReplaceLeft (TempFileName
, FileName
+ 3);
167 if (*(TempFileName
- 1) == L
'\\') {
168 FileName
= TempFileName
;
169 ExcludeTrailingBackslashes (TempFileName
- 1);
170 TempFileName
= FileName
;
173 *TempFileName
= L
'\0';
176 FileName
= TempFileName
;
188 FileName
= FileNameSavedPointer
;
189 if ((StrLen (FileName
) > 1) && (FileName
[StrLen (FileName
) - 1] == L
'\\')) {
190 FileName
[StrLen (FileName
) - 1] = L
'\0';