fix python refcounting (memleaks)
[enigma2.git] / lib / gdi / picload.cpp
index 28a899153b821428bca369ba773b41d635c3e04a..d724bfcf8c8d747e55587637fdf7975d17f52ff4 100644 (file)
@@ -335,54 +335,62 @@ static int png_load(const char *filename,  int *x, int *y)
 
 PyObject *getExif(const char *filename)
 {
-       PyObject *list = PyList_New(0);
+       PyObject *list = 0;
        Cexif *m_exif = new Cexif();
        if(m_exif->DecodeExif(filename))
        {
-               
                if(m_exif->m_exifinfo->IsExif)
                {
+                       int pos=0;
                        char tmp[256];
-                       PyList_Append(list, PyString_FromString(m_exif->m_exifinfo->Version));
-                       PyList_Append(list, PyString_FromString(m_exif->m_exifinfo->CameraMake));
-                       PyList_Append(list, PyString_FromString(m_exif->m_exifinfo->CameraModel));
-                       PyList_Append(list, PyString_FromString(m_exif->m_exifinfo->DateTime));
-                       PyList_Append(list, PyString_FromString(m_exif->m_exifinfo->Comments));
-                       PyList_Append(list, PyString_FromFormat("%d x %d", m_exif->m_exifinfo->Width, m_exif->m_exifinfo->Height));
-                       PyList_Append(list, PyString_FromString(m_exif->m_exifinfo->Orientation));
-                       PyList_Append(list, PyString_FromString(m_exif->m_exifinfo->MeteringMode));
-                       PyList_Append(list, PyString_FromString(m_exif->m_exifinfo->ExposureProgram));
-                       PyList_Append(list, PyString_FromString(m_exif->m_exifinfo->LightSource));
-                       PyList_Append(list, PyString_FromString(m_exif->m_exifinfo->FlashUsed));
-                       PyList_Append(list, PyString_FromFormat("%d", m_exif->m_exifinfo->CompressionLevel));
-                       PyList_Append(list, PyString_FromFormat("%d", m_exif->m_exifinfo->ISOequivalent));
+                       list = PyList_New(22);
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(m_exif->m_exifinfo->Version));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(m_exif->m_exifinfo->CameraMake));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(m_exif->m_exifinfo->CameraModel));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(m_exif->m_exifinfo->DateTime));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(m_exif->m_exifinfo->Comments));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromFormat("%d x %d", m_exif->m_exifinfo->Width, m_exif->m_exifinfo->Height));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(m_exif->m_exifinfo->Orientation));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(m_exif->m_exifinfo->MeteringMode));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(m_exif->m_exifinfo->ExposureProgram));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(m_exif->m_exifinfo->LightSource));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(m_exif->m_exifinfo->FlashUsed));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromFormat("%d", m_exif->m_exifinfo->CompressionLevel));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromFormat("%d", m_exif->m_exifinfo->ISOequivalent));
                        sprintf(tmp, "%.2f", m_exif->m_exifinfo->Xresolution);
-                       PyList_Append(list, PyString_FromString(tmp));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
                        sprintf(tmp, "%.2f", m_exif->m_exifinfo->Yresolution);
-                       PyList_Append(list, PyString_FromString(tmp));
-                       PyList_Append(list, PyString_FromString(m_exif->m_exifinfo->ResolutionUnit));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(m_exif->m_exifinfo->ResolutionUnit));
                        sprintf(tmp, "%.2f", m_exif->m_exifinfo->Brightness);
-                       PyList_Append(list, PyString_FromString(tmp));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
                        sprintf(tmp, "%.5f sec.", m_exif->m_exifinfo->ExposureTime);
-                       PyList_Append(list, PyString_FromString(tmp));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
                        sprintf(tmp, "%.5f", m_exif->m_exifinfo->ExposureBias);
-                       PyList_Append(list, PyString_FromString(tmp));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
                        sprintf(tmp, "%.5f", m_exif->m_exifinfo->Distance);
-                       PyList_Append(list, PyString_FromString(tmp));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
                        sprintf(tmp, "%.5f", m_exif->m_exifinfo->CCDWidth);
-                       PyList_Append(list, PyString_FromString(tmp));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
                        sprintf(tmp, "%.2f", m_exif->m_exifinfo->ApertureFNumber);
-                       PyList_Append(list, PyString_FromString(tmp));
+                       PyList_SET_ITEM(list, pos++,  PyString_FromString(tmp));
+               }
+               else
+               {
+                       list = PyList_New(1);
+                       PyList_SET_ITEM(list, 0, PyString_FromString(m_exif->m_szLastError));
                }
-               else    PyList_Append(list, PyString_FromString(m_exif->m_szLastError));
-
                m_exif->ClearExif();
        }
-       else    PyList_Append(list, PyString_FromString(m_exif->m_szLastError));
+       else
+       {
+               list = PyList_New(1);
+               PyList_SET_ITEM(list, 0, PyString_FromString(m_exif->m_szLastError));
+       }
 
        delete m_exif;
-       
-       return list;
+
+       return list ? list : PyList_New(0);
 }
 
 //---------------------------------------------------------------------------------------------