/** @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"); | |
} | |