From 30fdf1140b8d1ce93f3821d986fa165552023440 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Fri, 17 Jul 2009 09:10:31 +0000 Subject: 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 --- BaseTools/Source/C/PyUtility/Makefile | 12 +++++ BaseTools/Source/C/PyUtility/PyUtility.c | 92 ++++++++++++++++++++++++++++++++ BaseTools/Source/C/PyUtility/setup.py | 42 +++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 BaseTools/Source/C/PyUtility/Makefile create mode 100644 BaseTools/Source/C/PyUtility/PyUtility.c create mode 100644 BaseTools/Source/C/PyUtility/setup.py (limited to 'BaseTools/Source/C/PyUtility') diff --git a/BaseTools/Source/C/PyUtility/Makefile b/BaseTools/Source/C/PyUtility/Makefile new file mode 100644 index 0000000000..8f50ae1aeb --- /dev/null +++ b/BaseTools/Source/C/PyUtility/Makefile @@ -0,0 +1,12 @@ +!INCLUDE ..\Makefiles\ms.common + +APPNAME = GenSec + +LIBS = $(LIB_PATH)\Common.lib + +OBJECTS = PyUtility.obj + +#CFLAGS = $(CFLAGS) /nodefaultlib:libc.lib + +!INCLUDE ..\Makefiles\ms.app + diff --git a/BaseTools/Source/C/PyUtility/PyUtility.c b/BaseTools/Source/C/PyUtility/PyUtility.c new file mode 100644 index 0000000000..f06cb9222d --- /dev/null +++ b/BaseTools/Source/C/PyUtility/PyUtility.c @@ -0,0 +1,92 @@ +#include +#include +#include + +/* + 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"); +} + + diff --git a/BaseTools/Source/C/PyUtility/setup.py b/BaseTools/Source/C/PyUtility/setup.py new file mode 100644 index 0000000000..ff78af3d58 --- /dev/null +++ b/BaseTools/Source/C/PyUtility/setup.py @@ -0,0 +1,42 @@ +## @file +# package and install PyEfiCompressor extension +# +# Copyright (c) 2008, Intel Corporation +# +# All rights reserved. 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. +# + +## +# Import Modules +# +from distutils.core import setup, Extension +import os + +if 'BASE_TOOLS_PATH' not in os.environ: + raise "Please define BASE_TOOLS_PATH to the root of base tools tree" + +BaseToolsDir = os.environ['BASE_TOOLS_PATH'] +setup( + name="PyUtility", + version="0.01", + ext_modules=[ + Extension( + 'PyUtility', + sources=[ + 'PyUtility.c' + ], + include_dirs=[ + os.path.join(BaseToolsDir, 'Source', 'C', 'Include'), + os.path.join(BaseToolsDir, 'Source', 'C', 'Include', 'Ia32'), + os.path.join(BaseToolsDir, 'Source', 'C', 'Common') + ], + ) + ], + ) + -- cgit v1.2.3