windows-nt/Source/XPSP1/NT/base/ntsetup/bom/openall/openall.c
2020-09-26 16:20:57 +08:00

200 lines
3.9 KiB
C

/*
Modifications:
07.08.96 Joe Holman Created to open all files for links.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <time.h>
FILE* logFile;
void Msg ( const char * szFormat, ... ) {
va_list vaArgs;
va_start ( vaArgs, szFormat );
vprintf ( szFormat, vaArgs );
vfprintf ( logFile, szFormat, vaArgs );
va_end ( vaArgs );
}
void Header(argv)
char* argv[];
{
time_t t;
Msg ("\n=========== MCOPY =============\n");
Msg("Log file: %s\n", argv[1]);
time(&t);
Msg("Time: %s",ctime(&t));
Msg("================================\n\n");
}
void Usage()
{
printf("PURPOSE: Calls GetFileAttrEx on all files recursively.\n");
printf("\n");
printf("PARAMETERS:\n");
printf("\n");
printf("[LogFile] - Complete full path to append a log of actions and errors.\n");
}
void MyGetFileAttrEx ( char * szFile ) {
BOOL bRC;
WIN32_FILE_ATTRIBUTE_DATA wfd;
GET_FILEEX_INFO_LEVELS gfi;
bRC = GetFileAttributesEx ( szFile, 0, &wfd );
if ( !bRC ) {
Msg ( "ERROR: GetFileAttributesEx ( %s ), gle = %ld\n", szFile, GetLastError () );
}
else {
Msg ( "[OK] GetFileAttributesEx ( %s )\n", szFile );
}
}
BOOL GetFiles ( char * lastPath ) {
WIN32_FIND_DATA wfd;
HANDLE fHandle;
BOOL bRC=TRUE;
ULONG gle;
char szSrc[256];
char szPath[256];
char szFind[256];
char szSrcFile[256];
strcpy ( szSrc, lastPath );
sprintf ( szFind, "%s\\*.*", szSrc );
fHandle = FindFirstFile ( szFind, &wfd );
if ( fHandle == INVALID_HANDLE_VALUE ) {
// An error occurred finding a file/directory.
//
Msg ( "ERROR R FindFirstFile FAILED, szFind = %s, GLE = %ld\n",
szFind, GetLastError() );
return (FALSE);
}
else {
// Since this is the first time finding a directory,
// go to the loops code that makes the same directory on the
// destination.
//
goto DIR_LOOP_ENTRY;
}
do {
DIR_CONTINUE:;
bRC = FindNextFile ( fHandle, &wfd );
if ( !bRC ) {
// An error occurred with FindNextFile.
//
gle = GetLastError();
if ( gle == ERROR_NO_MORE_FILES ) {
//Msg ( "ERROR_NO_MORE_FILES...\n" );
FindClose ( fHandle );
return (TRUE);
}
else {
Msg ( "ERROR R FindNextFile FAILED, GLE = %ld\n",
GetLastError() );
FindClose ( fHandle );
exit ( 1 );
}
}
else {
DIR_LOOP_ENTRY:;
// Msg ( "wfd.cFileName = %s\n", wfd.cFileName );
// If not directory, don't just continue.
//
if ( (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0 ) {
sprintf ( szSrcFile, "%s\\%s", szSrc, wfd.cFileName );
MyGetFileAttrEx ( szSrcFile );
goto DIR_CONTINUE;
}
// Don't do anything with . and .. directory entries.
//
if (!strcmp ( wfd.cFileName, "." ) ||
!strcmp ( wfd.cFileName, "..") ) {
//Msg ( "Don't do anything with . or .. dirs.\n" );
goto DIR_CONTINUE;
}
sprintf ( szPath, "%s\\%s", szSrc, wfd.cFileName );
//Msg ( "szPath = %s\n", szPath );
// Keep recursing down the directories.
//
GetFiles ( szPath );
}
} while ( bRC );
return ( TRUE );
}
__cdecl main(int argc, char * argv[] ) {
BOOL b;
if (argc!=2) {
Usage();
return(1);
}
if ((logFile=fopen(argv[1],"a"))==NULL) {
printf("ERROR Couldn't open log file %s\n",argv[1]);
return(1);
}
Header(argv);
GetFiles ( "." );
fclose(logFile);
return(0);
}