mirror of
https://github.com/LongSoft/UEFITool.git
synced 2025-05-24 03:57:10 -04:00
Partially port UEFIPatch without backing engine ::patch support
This commit is contained in:
parent
d61d789569
commit
3699a7cebc
8 changed files with 467 additions and 0 deletions
90
UEFIPatch/uefipatch_main.cpp
Executable file
90
UEFIPatch/uefipatch_main.cpp
Executable file
|
@ -0,0 +1,90 @@
|
|||
/* uefipatch_main.cpp
|
||||
|
||||
Copyright (c) 2018, LongSoft. All rights reserved.
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
*/
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
|
||||
#include "../version.h"
|
||||
#include "uefipatch.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
UEFIPatch w;
|
||||
USTATUS result = U_SUCCESS;
|
||||
UINT32 argumentsCount = argc;
|
||||
|
||||
if (argumentsCount < 2) {
|
||||
std::cout << "UEFIPatch " PROGRAM_VERSION " - UEFI image file patching utility" << std::endl << std::endl <<
|
||||
"Usage: UEFIPatch image_file [patches.txt] [-o output]" << std::endl << std::endl <<
|
||||
"Patches will be read from patches.txt file by default\n";
|
||||
return U_SUCCESS;
|
||||
}
|
||||
|
||||
UString inputPath = argv[1];
|
||||
UString patches = "patches.txt";
|
||||
UString outputPath = inputPath + ".patched";
|
||||
for (UINT32 i = 2; i < argumentsCount; i++) {
|
||||
if ((!std::strcmp(argv[i], "-o") || !std::strcmp(argv[i], "--output")) && i + 1 < argumentsCount) {
|
||||
outputPath = argv[i+1];
|
||||
i++;
|
||||
} else if (patches == UString("patches.txt")) {
|
||||
patches = argv[i];
|
||||
} else {
|
||||
result = U_INVALID_PARAMETER;
|
||||
}
|
||||
}
|
||||
|
||||
if (result == U_SUCCESS) {
|
||||
result = w.patchFromFile(inputPath, patches, outputPath);
|
||||
}
|
||||
|
||||
switch (result) {
|
||||
case U_SUCCESS:
|
||||
std::cout << "Image patched" << std::endl;
|
||||
break;
|
||||
case U_INVALID_PARAMETER:
|
||||
std::cout << "Function called with invalid parameter" << std::endl;
|
||||
break;
|
||||
case U_NOTHING_TO_PATCH:
|
||||
std::cout << "No patches can be applied to input file" << std::endl;
|
||||
break;
|
||||
case U_UNKNOWN_PATCH_TYPE:
|
||||
std::cout << "Unknown patch type" << std::endl;
|
||||
break;
|
||||
case U_PATCH_OFFSET_OUT_OF_BOUNDS:
|
||||
std::cout << "Patch offset out of bounds" << std::endl;
|
||||
break;
|
||||
case U_INVALID_SYMBOL:
|
||||
std::cout << "Pattern format mismatch" << std::endl;
|
||||
break;
|
||||
case U_INVALID_FILE:
|
||||
std::cout << patches.toLocal8Bit() << " file not found or can't be read" << std::endl;
|
||||
break;
|
||||
case U_FILE_OPEN:
|
||||
std::cout << "Input file not found" << std::endl;
|
||||
break;
|
||||
case U_FILE_READ:
|
||||
std::cout << "Input file can't be read" << std::endl;
|
||||
break;
|
||||
case U_FILE_WRITE:
|
||||
std::cout << "Output file can't be written" << std::endl;
|
||||
break;
|
||||
default:
|
||||
std::cout << "Error " << result << std::endl;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue