]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/PyUtility/PyUtility.c
Fix build break caused by adding DebugAgentLib to the DXE Core.
[mirror_edk2.git] / BaseTools / Source / C / PyUtility / PyUtility.c
CommitLineData
30fdf114
LG
1#include <Python.h>\r
2#include <Windows.h>\r
3#include <Common/UefiBaseTypes.h>\r
4\r
5/*\r
6 SaveFileToDisk(FilePath, Content)\r
7*/\r
8STATIC\r
9PyObject*\r
10SaveFileToDisk (\r
11 PyObject *Self,\r
12 PyObject *Args\r
13 )\r
14{\r
15 CHAR8 *File;\r
16 UINT8 *Data;\r
17 UINTN DataLength;\r
18 UINTN WriteBytes;\r
19 UINTN Status;\r
20 HANDLE FileHandle;\r
21 PyObject *ReturnValue = Py_False;\r
22\r
23 Status = PyArg_ParseTuple(\r
24 Args,\r
25 "ss#",\r
26 &File,\r
27 &Data,\r
28 &DataLength\r
29 );\r
30 if (Status == 0) {\r
31 return NULL;\r
32 }\r
33\r
34 FileHandle = CreateFile(\r
35 File,\r
36 GENERIC_WRITE,\r
37 FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_SHARE_DELETE,\r
38 NULL,\r
39 CREATE_ALWAYS,\r
40 FILE_ATTRIBUTE_NORMAL,\r
41 NULL\r
42 );\r
43 if (FileHandle == INVALID_HANDLE_VALUE) {\r
44 PyErr_SetString(PyExc_Exception, "File creation failure");\r
45 return NULL;\r
46 }\r
47\r
48 while (WriteFile(FileHandle, Data, DataLength, &WriteBytes, NULL)) {\r
49 if (DataLength <= WriteBytes) {\r
50 DataLength = 0;\r
51 break;\r
52 }\r
53\r
54 Data += WriteBytes;\r
55 DataLength -= WriteBytes;\r
56 }\r
57\r
58 if (DataLength != 0) {\r
59 // file saved unsuccessfully\r
60 PyErr_SetString(PyExc_Exception, "File write failure");\r
61 goto Done;\r
62 }\r
63\r
64 // \r
65 // Flush buffer may slow down the whole build performance (average 10s slower)\r
66 // \r
67 //if (!FlushFileBuffers(FileHandle)) {\r
68 // PyErr_SetString(PyExc_Exception, "File flush failure");\r
69 // goto Done;\r
70 //}\r
71\r
72 // success!\r
73 ReturnValue = Py_True;\r
74\r
75Done:\r
76 CloseHandle(FileHandle);\r
77 return ReturnValue;\r
78}\r
79\r
80STATIC INT8 SaveFileToDiskDocs[] = "SaveFileToDisk(): Make sure the file is saved to disk\n";\r
81\r
82STATIC PyMethodDef PyUtility_Funcs[] = {\r
83 {"SaveFileToDisk", (PyCFunction)SaveFileToDisk, METH_VARARGS, SaveFileToDiskDocs},\r
84 {NULL, NULL, 0, NULL}\r
85};\r
86\r
87PyMODINIT_FUNC\r
88initPyUtility(VOID) {\r
89 Py_InitModule3("PyUtility", PyUtility_Funcs, "Utilties Module Implemented C Language");\r
90}\r
91\r
92\r