Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

156 lines
3.0 KiB

/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
delnode.c
Abstract:
Delnode routine for Setup.
Author:
Ted Miller (tedm) August 1992
--*/
#include "precomp.h"
#pragma hdrstop
#include "msg.h"
//
// Put these out here so we don't consume huge stack space as we recurse.
//
TCHAR Pattern[MAX_PATH+1];
WIN32_FIND_DATA FindData;
VOID
DelnodeRoutine(
VOID
)
{
PTSTR PatternEnd;
HANDLE FindHandle;
//
// Delete each file in the directory, then remove the directory itself.
// If any directories are encountered along the way recurse to delete
// them as they are encountered.
//
PatternEnd = Pattern+lstrlen(Pattern);
lstrcat(Pattern,TEXT("\\*"));
FindHandle = FindFirstFile(Pattern,&FindData);
if(FindHandle != INVALID_HANDLE_VALUE) {
do {
//
// Form the full name of the file we just found.
//
lstrcpy(PatternEnd+1,FindData.cFileName);
if(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
//
// The current match is a directory. Recurse into it unless
// it's . or ...
//
if(lstrcmp(FindData.cFileName,TEXT("." ))
&& lstrcmp(FindData.cFileName,TEXT("..")))
{
DelnodeRoutine();
}
} else {
//
// The current match is not a directory -- so delete it.
//
SetFileAttributes(Pattern,FILE_ATTRIBUTE_NORMAL);
DeleteFile(Pattern);
}
*(PatternEnd+1) = 0;
} while(FindNextFile(FindHandle,&FindData));
FindClose(FindHandle);
}
//
// Remove the directory we just emptied out.
//
*PatternEnd = 0;
SetFileAttributes(Pattern,FILE_ATTRIBUTE_NORMAL);
RemoveDirectory(Pattern);
//
// Note that the 'directory' might actually be a file.
// Catch that case here.
//
DeleteFile(Pattern);
}
VOID
MyDelnode(
IN PTSTR Directory
)
{
lstrcpy(Pattern,Directory);
DelnodeRoutine();
}
VOID
DelnodeTemporaryFiles(
IN HWND hdlg,
IN TCHAR Drive,
IN PTSTR Directory
)
{
HANDLE FindHandle;
Pattern[0] = Drive;
Pattern[1] = TEXT(':');
lstrcpy(Pattern+2,Directory);
//
// If local source exsits, change display
// and delnode it. Otherwise, nothing to do.
//
FindHandle = FindFirstFile(Pattern,&FindData);
if(FindHandle != INVALID_HANDLE_VALUE) {
RetreiveAndFormatMessageIntoBuffer(
MSG_DELNODING_LOCAL_SOURCE,
Pattern,
SIZECHARS(Pattern),
Drive
);
SendMessage(hdlg,WMX_BILLBOARD_STATUS,0,(LPARAM)Pattern);
FindClose(FindHandle);
Pattern[0] = Drive;
Pattern[1] = TEXT(':');
lstrcpy(Pattern+2,Directory);
DelnodeRoutine();
Sleep(300); // let the user see what we did
}
}