Check In tool source code based on Build tool project revision r1655.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8964 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
92
BaseTools/Source/C/PyUtility/PyUtility.c
Normal file
92
BaseTools/Source/C/PyUtility/PyUtility.c
Normal file
@@ -0,0 +1,92 @@
|
||||
#include <Python.h>
|
||||
#include <Windows.h>
|
||||
#include <Common/UefiBaseTypes.h>
|
||||
|
||||
/*
|
||||
SaveFileToDisk(FilePath, Content)
|
||||
*/
|
||||
STATIC
|
||||
PyObject*
|
||||
SaveFileToDisk (
|
||||
PyObject *Self,
|
||||
PyObject *Args
|
||||
)
|
||||
{
|
||||
CHAR8 *File;
|
||||
UINT8 *Data;
|
||||
UINTN DataLength;
|
||||
UINTN WriteBytes;
|
||||
UINTN Status;
|
||||
HANDLE FileHandle;
|
||||
PyObject *ReturnValue = Py_False;
|
||||
|
||||
Status = PyArg_ParseTuple(
|
||||
Args,
|
||||
"ss#",
|
||||
&File,
|
||||
&Data,
|
||||
&DataLength
|
||||
);
|
||||
if (Status == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
FileHandle = CreateFile(
|
||||
File,
|
||||
GENERIC_WRITE,
|
||||
FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_SHARE_DELETE,
|
||||
NULL,
|
||||
CREATE_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
NULL
|
||||
);
|
||||
if (FileHandle == INVALID_HANDLE_VALUE) {
|
||||
PyErr_SetString(PyExc_Exception, "File creation failure");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (WriteFile(FileHandle, Data, DataLength, &WriteBytes, NULL)) {
|
||||
if (DataLength <= WriteBytes) {
|
||||
DataLength = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
Data += WriteBytes;
|
||||
DataLength -= WriteBytes;
|
||||
}
|
||||
|
||||
if (DataLength != 0) {
|
||||
// file saved unsuccessfully
|
||||
PyErr_SetString(PyExc_Exception, "File write failure");
|
||||
goto Done;
|
||||
}
|
||||
|
||||
//
|
||||
// Flush buffer may slow down the whole build performance (average 10s slower)
|
||||
//
|
||||
//if (!FlushFileBuffers(FileHandle)) {
|
||||
// PyErr_SetString(PyExc_Exception, "File flush failure");
|
||||
// goto Done;
|
||||
//}
|
||||
|
||||
// success!
|
||||
ReturnValue = Py_True;
|
||||
|
||||
Done:
|
||||
CloseHandle(FileHandle);
|
||||
return ReturnValue;
|
||||
}
|
||||
|
||||
STATIC INT8 SaveFileToDiskDocs[] = "SaveFileToDisk(): Make sure the file is saved to disk\n";
|
||||
|
||||
STATIC PyMethodDef PyUtility_Funcs[] = {
|
||||
{"SaveFileToDisk", (PyCFunction)SaveFileToDisk, METH_VARARGS, SaveFileToDiskDocs},
|
||||
{NULL, NULL, 0, NULL}
|
||||
};
|
||||
|
||||
PyMODINIT_FUNC
|
||||
initPyUtility(VOID) {
|
||||
Py_InitModule3("PyUtility", PyUtility_Funcs, "Utilties Module Implemented C Language");
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user