151 lines
5.5 KiB
C++
151 lines
5.5 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) 1999, Microsoft Corp. All rights reserved.
|
|
//
|
|
// FILE
|
|
//
|
|
// command.cpp
|
|
//
|
|
// SYNOPSIS
|
|
//
|
|
// Process the command-line parameters of iasinfdb.exe
|
|
//
|
|
// MODIFICATION HISTORY
|
|
//
|
|
// 02/12/1999 Original version. Thierry Perraut
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
#include "precomp.hpp"
|
|
#include "command.h"
|
|
|
|
using namespace std;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// ProcessCommand
|
|
//
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
HRESULT ProcessCommand(
|
|
int argc,
|
|
wchar_t * argv[],
|
|
HINF *ppHINF,
|
|
CDatabase& Database
|
|
)
|
|
{
|
|
_ASSERTE(ppHINF != NULL);
|
|
|
|
HRESULT hres;
|
|
|
|
if (argc != NUMBER_ARGUMENTS)
|
|
{
|
|
/////////////////////////////////////
|
|
// not the right number of arguments
|
|
/////////////////////////////////////
|
|
|
|
cerr << "inf2db Import an INF file into a Jet4 Database\n\ninf2db ";
|
|
cerr << "[drive:][path]template.mdb [drive:][path]filename.inf";
|
|
cerr << "[drive:][path]destination_database.mdb\n";
|
|
hres = E_INVALIDARG;
|
|
}
|
|
else
|
|
{
|
|
/////////////////////////////////////
|
|
// argv[1] = template database
|
|
/////////////////////////////////////
|
|
BOOL bCopyOk = CopyFileW(
|
|
argv[1],
|
|
TEMPORARY_FILENAME,
|
|
// here false means success even if file already exists
|
|
FALSE
|
|
);
|
|
|
|
if (!bCopyOk)
|
|
{
|
|
TracePrintf("Error: copy template %S -> new file %S failed ",
|
|
argv[1],
|
|
TEMPORARY_FILENAME
|
|
);
|
|
|
|
hres = E_FAIL;
|
|
}
|
|
else
|
|
{
|
|
///////////////////////////////////////////////////////
|
|
// suppress the read-only attribute from the new file
|
|
///////////////////////////////////////////////////////
|
|
BOOL bChangedAttributeOK = SetFileAttributesW(
|
|
TEMPORARY_FILENAME,
|
|
FILE_ATTRIBUTE_NORMAL
|
|
);
|
|
if(!bChangedAttributeOK)
|
|
{
|
|
TracePrintf("Error: change attribute (RW) on %S failed",
|
|
TEMPORARY_FILENAME
|
|
);
|
|
hres = E_FAIL;
|
|
}
|
|
else
|
|
{
|
|
///////////////////////////////////////////////////////
|
|
// three arg (argc = 4) Open the INF file for reading
|
|
// Open for read (will fail if file does not exist)
|
|
///////////////////////////////////////////////////////
|
|
|
|
UINT lErrorCode;
|
|
if( (*ppHINF = (HINF) SetupOpenInfFileW(
|
|
// name of the INF to open
|
|
argv[2],
|
|
// optional, the class of the INF file
|
|
NULL,
|
|
// specifies the style of the INF file
|
|
INF_STYLE_WIN4,
|
|
&lErrorCode
|
|
))
|
|
== INVALID_HANDLE_VALUE
|
|
)
|
|
{
|
|
//////////////////////////////////
|
|
// Error situation
|
|
//////////////////////////////////
|
|
|
|
LPVOID lpMsgBuf;
|
|
FormatMessageW(
|
|
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
GetLastError(),
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
|
(LPWSTR) &lpMsgBuf,
|
|
0,
|
|
NULL
|
|
);
|
|
|
|
TracePrintf("Error: %S",(LPCWSTR)lpMsgBuf);
|
|
cerr << "Error: " << (LPCWSTR)lpMsgBuf << "\n";
|
|
/////////////////////
|
|
// Free the buffer.
|
|
/////////////////////
|
|
LocalFree(lpMsgBuf);
|
|
cerr << "ERROR: Can't open the INF file " << argv[1] <<"\n";
|
|
hres = E_INVALIDARG;
|
|
}
|
|
else
|
|
{
|
|
#ifdef DEBUG
|
|
TraceString("Info: inf file open\n");
|
|
#endif
|
|
////////////////////////////////////////////////
|
|
// argv[3] = destination path to the database
|
|
// call the initialize member function
|
|
////////////////////////////////////////////////
|
|
Database.InitializeDB(argv[3]);
|
|
hres = S_OK;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return hres;
|
|
}
|