-/** @file\r
-Python Utility\r
-\r
-Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials are licensed and made available\r
-under the terms and conditions of the BSD License which accompanies this\r
-distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include <Python.h>\r
-#include <Windows.h>\r
-#include <Common/UefiBaseTypes.h>\r
-\r
-/*\r
- SaveFileToDisk(FilePath, Content)\r
-*/\r
-STATIC\r
-PyObject*\r
-SaveFileToDisk (\r
- PyObject *Self,\r
- PyObject *Args\r
- )\r
-{\r
- CHAR8 *File;\r
- UINT8 *Data;\r
- UINTN DataLength;\r
- UINTN WriteBytes;\r
- UINTN Status;\r
- HANDLE FileHandle;\r
- PyObject *ReturnValue = Py_False;\r
-\r
- Status = PyArg_ParseTuple(\r
- Args,\r
- "ss#",\r
- &File,\r
- &Data,\r
- &DataLength\r
- );\r
- if (Status == 0) {\r
- return NULL;\r
- }\r
-\r
- FileHandle = CreateFile(\r
- File,\r
- GENERIC_WRITE,\r
- FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_SHARE_DELETE,\r
- NULL,\r
- CREATE_ALWAYS,\r
- FILE_ATTRIBUTE_NORMAL,\r
- NULL\r
- );\r
- if (FileHandle == INVALID_HANDLE_VALUE) {\r
- PyErr_SetString(PyExc_Exception, "File creation failure");\r
- return NULL;\r
- }\r
-\r
- while (WriteFile(FileHandle, Data, DataLength, &WriteBytes, NULL)) {\r
- if (DataLength <= WriteBytes) {\r
- DataLength = 0;\r
- break;\r
- }\r
-\r
- Data += WriteBytes;\r
- DataLength -= WriteBytes;\r
- }\r
-\r
- if (DataLength != 0) {\r
- // file saved unsuccessfully\r
- PyErr_SetString(PyExc_Exception, "File write failure");\r
- goto Done;\r
- }\r
-\r
- //\r
- // Flush buffer may slow down the whole build performance (average 10s slower)\r
- //\r
- //if (!FlushFileBuffers(FileHandle)) {\r
- // PyErr_SetString(PyExc_Exception, "File flush failure");\r
- // goto Done;\r
- //}\r
-\r
- // success!\r
- ReturnValue = Py_True;\r
-\r
-Done:\r
- CloseHandle(FileHandle);\r
- return ReturnValue;\r
-}\r
-\r
-STATIC INT8 SaveFileToDiskDocs[] = "SaveFileToDisk(): Make sure the file is saved to disk\n";\r
-\r
-STATIC PyMethodDef PyUtility_Funcs[] = {\r
- {"SaveFileToDisk", (PyCFunction)SaveFileToDisk, METH_VARARGS, SaveFileToDiskDocs},\r
- {NULL, NULL, 0, NULL}\r
-};\r
-\r
-PyMODINIT_FUNC\r
-initPyUtility(VOID) {\r
- Py_InitModule3("PyUtility", PyUtility_Funcs, "Utilties Module Implemented C Language");\r
-}\r
-\r
-\r