Made it working
[people/mcb30/basetools.git] / Source / C / PyEfiCompressor / EfiCompressor.c
index e32478d..ab2df35 100644 (file)
@@ -8,10 +8,10 @@ STATIC
 PyObject*\r
 UefiDecompress(\r
   PyObject    *Self,\r
-  PyObject    *Args\r
+  PyObject    *Args,\r
   ) \r
 {\r
-  PyTypeObject  *SrcData;\r
+  PyObject      *SrcData;\r
   UINT32        SrcDataSize;\r
   UINT32        DstDataSize;\r
   UINTN         Status;\r
@@ -23,7 +23,7 @@ UefiDecompress(
 \r
   Status = PyArg_ParseTuple(\r
             Args,\r
-            "0ii",\r
+            "Oii",\r
             &SrcData,\r
             &SrcDataSize,\r
             &DstDataSize\r
@@ -32,9 +32,10 @@ UefiDecompress(
     return NULL;\r
   }\r
 \r
-  if (SrcData->tp_as_buffer == NULL\r
-      || SrcData->tp_as_buffer->bf_getreadbuffer == NULL\r
-      || SrcData->tp_as_buffer->bf_getsegcount == NULL) {\r
+  if (SrcData->ob_type->tp_as_buffer == NULL\r
+      || SrcData->ob_type->tp_as_buffer->bf_getreadbuffer == NULL\r
+      || SrcData->ob_type->tp_as_buffer->bf_getsegcount == NULL) {\r
+    PyErr_SetString(PyExc_Exception, "First argument is not a buffer\n");\r
     return NULL;\r
   }\r
 \r
@@ -43,17 +44,19 @@ UefiDecompress(
   SrcBuf = malloc(SrcDataSize);\r
   DstBuf = malloc(DstDataSize);\r
   if (SrcBuf == NULL || DstBuf == NULL) {\r
+    PyErr_SetString(PyExc_Exception, "Not enough memory\n");\r
     goto ERROR;\r
   }\r
 \r
-  SegNum = SrcData->tp_as_buffer->bf_getsegcount((PyObject *)SrcData, NULL);\r
+  SegNum = SrcData->ob_type->tp_as_buffer->bf_getsegcount((PyObject *)SrcData, NULL);\r
   TmpBuf = SrcBuf;\r
   for (Index = 0; Index < SegNum; ++Index) {\r
     VOID *BufSeg;\r
     Py_ssize_t Len;\r
 \r
-    Len = SrcData->tp_as_buffer->bf_getreadbuffer((PyObject *)SrcData, Index, &BufSeg);\r
+    Len = SrcData->ob_type->tp_as_buffer->bf_getreadbuffer((PyObject *)SrcData, Index, &BufSeg);\r
     if (Len < 0) {\r
+      PyErr_SetString(PyExc_Exception, "Buffer segment is not available\n");\r
       goto ERROR;\r
     }\r
     memcpy(TmpBuf, BufSeg, Len);\r
@@ -62,6 +65,7 @@ UefiDecompress(
 \r
   Status = Extract((VOID *)SrcBuf, SrcDataSize, (VOID *)DstBuf, DstDataSize, 1);\r
   if (Status != EFI_SUCCESS) {\r
+    PyErr_SetString(PyExc_Exception, "Failed to decompress\n");\r
     goto ERROR;\r
   }\r
 \r
@@ -86,7 +90,7 @@ FrameworkDecompress(
   PyObject    *Args\r
   )\r
 {\r
-  PyTypeObject  *SrcData;\r
+  PyObject      *SrcData;\r
   UINT32        SrcDataSize;\r
   UINT32        DstDataSize;\r
   UINTN         Status;\r
@@ -98,7 +102,7 @@ FrameworkDecompress(
 \r
   Status = PyArg_ParseTuple(\r
             Args,\r
-            "0ii",\r
+            "Oii",\r
             &SrcData,\r
             &SrcDataSize,\r
             &DstDataSize\r
@@ -107,9 +111,10 @@ FrameworkDecompress(
     return NULL;\r
   }\r
 \r
-  if (SrcData->tp_as_buffer == NULL\r
-      || SrcData->tp_as_buffer->bf_getreadbuffer == NULL\r
-      || SrcData->tp_as_buffer->bf_getsegcount == NULL) {\r
+  if (SrcData->ob_type->tp_as_buffer == NULL\r
+      || SrcData->ob_type->tp_as_buffer->bf_getreadbuffer == NULL\r
+      || SrcData->ob_type->tp_as_buffer->bf_getsegcount == NULL) {\r
+    PyErr_SetString(PyExc_Exception, "First argument is not a buffer\n");\r
     return NULL;\r
   }\r
 \r
@@ -118,17 +123,19 @@ FrameworkDecompress(
   SrcBuf = malloc(SrcDataSize);\r
   DstBuf = malloc(DstDataSize);\r
   if (SrcBuf == NULL || DstBuf == NULL) {\r
+    PyErr_SetString(PyExc_Exception, "Not enough memory\n");\r
     goto ERROR;\r
   }\r
 \r
-  SegNum = SrcData->tp_as_buffer->bf_getsegcount((PyObject *)SrcData, NULL);\r
+  SegNum = SrcData->ob_type->tp_as_buffer->bf_getsegcount((PyObject *)SrcData, NULL);\r
   TmpBuf = SrcBuf;\r
   for (Index = 0; Index < SegNum; ++Index) {\r
     VOID *BufSeg;\r
     Py_ssize_t Len;\r
 \r
-    Len = SrcData->tp_as_buffer->bf_getreadbuffer((PyObject *)SrcData, Index, &BufSeg);\r
+    Len = SrcData->ob_type->tp_as_buffer->bf_getreadbuffer((PyObject *)SrcData, Index, &BufSeg);\r
     if (Len < 0) {\r
+      PyErr_SetString(PyExc_Exception, "Buffer segment is not available\n");\r
       goto ERROR;\r
     }\r
     memcpy(TmpBuf, BufSeg, Len);\r
@@ -137,10 +144,11 @@ FrameworkDecompress(
 \r
   Status = Extract((VOID *)SrcBuf, SrcDataSize, (VOID *)DstBuf, DstDataSize, 2);\r
   if (Status != EFI_SUCCESS) {\r
+    PyErr_SetString(PyExc_Exception, "Failed to decompress\n");\r
     goto ERROR;\r
   }\r
 \r
-  return PyBuffer_FromMemory(DstBuf, (Py_ssize_t)DstDataSize);\r
+  return PyString_FromStringAndSize((CONST INT8*)DstBuf, (Py_ssize_t)DstDataSize);\r
 \r
 ERROR:\r
   if (SrcBuf != NULL) {\r
@@ -153,6 +161,7 @@ ERROR:
   return NULL;\r
 }\r
 \r
+\r
 STATIC\r
 PyObject*\r
 UefiCompress(\r