NewPrivateFile->IsDirectoryPath = FALSE;\r
}\r
} else {\r
- struct stat finfo;\r
+ STAT_FIX finfo;\r
int res = NewPrivateFile->UnixThunk->Stat (NewPrivateFile->FileName, &finfo);\r
if (res == 0 && S_ISDIR(finfo.st_mode))\r
NewPrivateFile->IsDirectoryPath = TRUE;\r
struct tm *tm;\r
tm = UnixThunk->GmTime (&SystemTime);\r
Time->Year = tm->tm_year;\r
- Time->Month = tm->tm_mon;\r
+ Time->Month = tm->tm_mon + 1;\r
Time->Day = tm->tm_mday;\r
Time->Hour = tm->tm_hour;\r
Time->Minute = tm->tm_min;\r
UINTN NameSize;\r
UINTN ResultSize;\r
EFI_FILE_INFO *Info;\r
- CHAR8 *RealFileName;\r
- CHAR8 *TempPointer;\r
+ CHAR8 *RealFileName;\r
+ CHAR8 *TempPointer;\r
CHAR16 *BufferFileName;\r
- struct stat buf;\r
+ STAT_FIX buf;\r
\r
if (FileName != NULL) {\r
RealFileName = FileName;\r
UINTN OldInfoSize;\r
EFI_TPL OldTpl;\r
mode_t NewAttr;\r
- struct stat OldAttr;\r
+ STAT_FIX OldAttr;\r
CHAR8 *OldFileName;\r
CHAR8 *NewFileName;\r
CHAR8 *CharPointer;\r
} else {\r
Status = gBS->AllocatePool (\r
EfiBootServicesData,\r
- AsciiStrLen (PrivateFile->FileName) + 1 + StrLen (NewFileInfo->FileName) + 1,\r
+ AsciiStrLen (PrivateFile->FileName) + 2 + StrLen (NewFileInfo->FileName) + 1,\r
(VOID **)&NewFileName\r
);\r
\r
\r
AsciiStrCpy (NewFileName, PrivateRoot->FilePath);\r
AsciiFilePtr = NewFileName + AsciiStrLen(NewFileName);\r
- while (AsciiFilePtr > NewFileName && AsciiFilePtr[-1] != '/') {\r
- AsciiFilePtr--;\r
+ if ((AsciiFilePtr[-1] != '/') && (NewFileInfo->FileName[0] != '/')) {\r
+ // make sure there is a / between Root FilePath and NewFileInfo Filename\r
+ AsciiFilePtr[0] = '/'; \r
+ AsciiFilePtr[1] = '\0';\r
+ AsciiFilePtr++;\r
}\r
UnicodeFilePtr = NewFileInfo->FileName;\r
}\r
}\r
\r
UnixStatus = PrivateFile->UnixThunk->Chmod (NewFileName, NewAttr);\r
-\r
if (UnixStatus != 0) {\r
Status = EFI_DEVICE_ERROR;\r
}\r