bool LFSDMSHelper::DeleteEmptyDMSStructure(const CStdString& sFileName) { CStdString sDMSDir = sFileName + GetDirExtension(); if (IsDirectoryEmpty(sDMSDir)) { return DeleteDMSStructure(sFileName); } return false; }
bool LFSDMSHelper::IsDirectoryEmpty(const CStdString& sDirName) { bool bEmpty = true; BOOL bContinue = TRUE; WIN32_FIND_DATA w32Data; ZeroMemory(&w32Data, sizeof(w32Data)); HANDLE hFile = FindFirstFile(sDirName + _T("\\*.*"), &w32Data); if (hFile == INVALID_HANDLE_VALUE) { return true; } while (bContinue && bEmpty) { CStdString sFileName(w32Data.cFileName); if ((sFileName == _T(".")) || (sFileName == _T(".."))) { bContinue = FindNextFile(hFile, &w32Data); continue; } if (w32Data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { bEmpty = IsDirectoryEmpty(sDirName + _T("\\") + w32Data.cFileName); } else { bEmpty = false; } bContinue = FindNextFile(hFile, &w32Data); } FindClose(hFile); return bEmpty; }
void FConfigManifest::UpgradeFromPreviousVersions() { // First off, load the manifest config if it exists FConfigFile Manifest; const FString ManifestFilename = ProjectAgnosticIniPath(TEXT("Manifest.ini")); if (!FPaths::FileExists(ManifestFilename) && IsDirectoryEmpty(*FPaths::GetPath(ManifestFilename))) { // Copy files from previous versions of the engine, if possible MigratePreviousEngineInis(); } const EConfigManifestVersion LatestVersion = (EConfigManifestVersion)((int32)EConfigManifestVersion::NumOfVersions - 1); EConfigManifestVersion CurrentVersion = EConfigManifestVersion::Initial; if (FPaths::FileExists(ManifestFilename)) { // Load the manifest from the file Manifest.Read(*ManifestFilename); int64 Version = 0; if (Manifest.GetInt64(TEXT("Manifest"), TEXT("Version"), Version) && Version < (int64)EConfigManifestVersion::NumOfVersions) { CurrentVersion = (EConfigManifestVersion)Version; } } if (CurrentVersion == LatestVersion) { return; } CurrentVersion = UpgradeFromVersion(CurrentVersion); // Set the version in the manifest, and write it out Manifest.SetInt64(TEXT("Manifest"), TEXT("Version"), (int64)CurrentVersion); Manifest.Write(ManifestFilename); }
/** Delete a node and all nodes under it (including sub directories). @param[in] Node The node to start deleting with. @param[in] Quiet TRUE to print no messages. @retval SHELL_SUCCESS The operation was successful. @retval SHELL_ACCESS_DENIED A file was read only. @retval SHELL_ABORTED The abort message was received. @retval SHELL_DEVICE_ERROR A device error occured reading this Node. **/ SHELL_STATUS CascadeDelete( IN EFI_SHELL_FILE_INFO *Node, IN CONST BOOLEAN Quiet ) { SHELL_STATUS ShellStatus; EFI_SHELL_FILE_INFO *List; EFI_SHELL_FILE_INFO *Node2; EFI_STATUS Status; SHELL_PROMPT_RESPONSE *Resp; CHAR16 *TempName; UINTN NewSize; Resp = NULL; ShellStatus = SHELL_SUCCESS; List = NULL; Status = EFI_SUCCESS; if ((Node->Info->Attribute & EFI_FILE_READ_ONLY) == EFI_FILE_READ_ONLY) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_RM_LOG_DETELE_RO), gShellLevel2HiiHandle, L"rm", Node->FullName); return (SHELL_ACCESS_DENIED); } if ((Node->Info->Attribute & EFI_FILE_DIRECTORY) == EFI_FILE_DIRECTORY) { if (!IsDirectoryEmpty(Node->Handle)) { if (!Quiet) { Status = ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_RM_LOG_DELETE_CONF), gShellLevel2HiiHandle, Node->FullName); Status = ShellPromptForResponse(ShellPromptResponseTypeYesNo, NULL, (VOID**)&Resp); ASSERT(Resp != NULL); if (EFI_ERROR(Status) || *Resp != ShellPromptResponseYes) { SHELL_FREE_NON_NULL(Resp); return (SHELL_ABORTED); } SHELL_FREE_NON_NULL(Resp); } // // empty out the directory // Status = gEfiShellProtocol->FindFilesInDir(Node->Handle, &List); if (EFI_ERROR(Status)) { if (List!=NULL) { gEfiShellProtocol->FreeFileList(&List); } return (SHELL_DEVICE_ERROR); } for (Node2 = (EFI_SHELL_FILE_INFO *)GetFirstNode(&List->Link) ; !IsNull(&List->Link, &Node2->Link) ; Node2 = (EFI_SHELL_FILE_INFO *)GetNextNode(&List->Link, &Node2->Link) ){ // // skip the directory traversing stuff... // if (StrCmp(Node2->FileName, L".") == 0 || StrCmp(Node2->FileName, L"..") == 0) { continue; } Node2->Status = gEfiShellProtocol->OpenFileByName (Node2->FullName, &Node2->Handle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE); if (EFI_ERROR(Node2->Status) && StrStr(Node2->FileName, L":") == NULL) { // // Update the node filename to have full path with file system identifier // NewSize = StrSize(Node->FullName) + StrSize(Node2->FullName); TempName = AllocateZeroPool(NewSize); if (TempName == NULL) { ShellStatus = SHELL_OUT_OF_RESOURCES; } else { StrCpyS(TempName, NewSize/sizeof(CHAR16), Node->FullName); TempName[StrStr(TempName, L":")+1-TempName] = CHAR_NULL; StrCatS(TempName, NewSize/sizeof(CHAR16), Node2->FullName); FreePool((VOID*)Node2->FullName); Node2->FullName = TempName; // // Now try again to open the file // Node2->Status = gEfiShellProtocol->OpenFileByName (Node2->FullName, &Node2->Handle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE); } } if (!EFI_ERROR(Node2->Status)) { ShellStatus = CascadeDelete(Node2, Quiet); } else if (ShellStatus == SHELL_SUCCESS) { ShellStatus = (SHELL_STATUS)(Node2->Status&(~0x80000000)); } if (ShellStatus != SHELL_SUCCESS) { if (List!=NULL) { gEfiShellProtocol->FreeFileList(&List); } return (ShellStatus); } } if (List!=NULL) { gEfiShellProtocol->FreeFileList(&List); } } } if (!(StrCmp(Node->FileName, L".") == 0 || StrCmp(Node->FileName, L"..") == 0)) { // // now delete the current node... // if (!Quiet) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_RM_LOG_DELETE), gShellLevel2HiiHandle, Node->FullName); } Status = gEfiShellProtocol->DeleteFile(Node->Handle); Node->Handle = NULL; } // // We cant allow for the warning here! (Dont use EFI_ERROR Macro). // if (Status != EFI_SUCCESS){ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_RM_LOG_DELETE_ERR), gShellLevel2HiiHandle, Status); return (SHELL_ACCESS_DENIED); } else { if (!Quiet) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_RM_LOG_DELETE_COMP), gShellLevel2HiiHandle); } return (SHELL_SUCCESS); } }
int main() { //int createChild = 1; char cwd[1024]; int status; printf("Flooder program starting\n"); while(1) { // Check the listen directory for a file printf("Checking for files...\n"); int isEmpty = IsDirectoryEmpty(LISTEN_DIR); if (isEmpty) printf("Directory 'listen' is empty\n"); else printf("Directory 'listen' is not empty\n"); // Process any files found in 'listen' directory if (!isEmpty) { // Change to the listen directory if (strcmp(getcwd(cwd, sizeof(cwd)), LISTEN_DIR) != 0) { if (chdir(LISTEN_DIR) != 0) perror("Error changing to listening directory\n"); } switch(GetFile()) { case 1: printf("...found 'start' file...\n"); // Parse the file flooder f = ParseStartFile(); // Delete the file if (remove(START_FILE) != 0) perror("Error deleting 'start' file\n"); //CreateChild(); CreateChild(f); waitpid(-1, &status, WNOHANG); break; case 2: printf("...found 'stop' file...\n"); // Delete the file if (remove(STOP_FILE) != 0) perror("Error deleting 'stop' file\n"); break; printf("Killing child pid %d\n", getpid()); if (KillChildPid(getpid()) == 0) printf("Child pid successfully killed\n"); else printf("Error killing child pid\n"); break; default: printf("...found unknown file...\n"); // Delete the file if (remove(UNKNOWN_FILE) != 0) perror("Error deleting unknown file\n"); break; } } sleep(5); } exit(0); }