mirror of https://github.com/acidanthera/audk.git
107 lines
2.6 KiB
C
107 lines
2.6 KiB
C
/** @file
|
|
Python Utility
|
|
|
|
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
|
|
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 <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");
|
|
}
|
|
|
|
|