Remove memory leaks 06/10206/3
Sylvestre Ledru [Sat, 12 Jan 2013 09:56:45 +0000 (10:56 +0100)]
Change-Id: Ib919c323a09329c77b027b1699116fa41225a7bc

scilab/modules/call_scilab/src/c/SendScilabJobs.c
scilab/modules/hdf5/src/c/h5_readDataFromFile.c
scilab/modules/localization/src/c/InitializeLocalization.c
scilab/modules/output_stream/src/c/sciprint_full.c
scilab/modules/scicos/src/c/scicos.c

index 292308f..9c5c4b5 100644 (file)
@@ -2,11 +2,11 @@
 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) 2007 - INRIA - Allan CORNET
 * Copyright (C) 2009-2010 - DIGITEO - Allan CORNET
-* 
+*
 * This file must be used under the terms of the CeCILL.
 * This source file is licensed as described in the file COPYING, which
 * you should have received as part of this distribution.  The terms
-* are also available at    
+* are also available at
 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 *
 */
@@ -175,7 +175,9 @@ BOOL GetLastJob(char *JOB, int nbcharsJOB)
             strcpy(JOB, lastjob);
         }
         else
+        {
             strncpy(JOB, lastjob, nbcharsJOB);
+        }
         return TRUE;
     }
     return FALSE;
@@ -221,6 +223,7 @@ int SendScilabJobs(char **jobs, int numberjobs)
                 else
                 {
                     fprintf(stderr, "Error: SendScilabJobs (2) 'jobs[%d] == NULL'.\n", i);
+                    FREE(LOCALJOBS);
                     return retcode;
                 }
             }
@@ -320,7 +323,9 @@ static BOOL RemoveCharsFromEOL(char *line, char CharToRemove)
             bOK = TRUE;
         }
         else
+        {
             break;
+        }
     }
     return bOK;
 }
@@ -349,7 +354,9 @@ static BOOL RemoveComments(char *line)
     }
 
     if (idx >= 0)
+    {
         line[idx] = '\0';
+    }
 
     return FALSE;
 }
index b17cfd1..43b4a74 100644 (file)
@@ -158,6 +158,7 @@ static char* readAttribute(int _iDatasetId, const char *_pstName)
         status = H5Tset_size(memtype, iDim);
         if (status < 0)
         {
+            FREE(pstValue);
             return NULL;
         }
 
@@ -273,6 +274,7 @@ int getDatasetInfo(int _iDatasetId, int* _iComplex, int* _iDims, int* _piDims)
         hsize_t* dims = (hsize_t*)MALLOC(sizeof(hsize_t) * *_iDims);
         if (H5Sget_simple_extent_dims(space, dims, NULL) < 0)
         {
+            FREE(dims);
             return -1;
         }
 
@@ -507,6 +509,7 @@ int readDoubleComplexMatrix(int _iDatasetId, double *_pdblReal, double *_pdblImg
     status = H5Dread(_iDatasetId, compoundId, H5S_ALL, H5S_ALL, H5P_DEFAULT, pData);
     if (status < 0)
     {
+        FREE(pData);
         return -1;
     }
 
index 52f6d9d..daa0ef9 100644 (file)
@@ -1,11 +1,11 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA - Sylvestre LEDRU
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 #include <stdlib.h>
 #include "machine.h"
 #ifndef _MSC_VER
- #ifdef HAVE_LIBINTL_H
-  #include <libintl.h>
-  #ifdef HAVE_LOCALE_H
-   #include <locale.h>
-  #else
-   #error "Cannot find locale.h despite that libintl.h is available"
-  #endif
- #endif
+#ifdef HAVE_LIBINTL_H
+#include <libintl.h>
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#else
+#error "Cannot find locale.h despite that libintl.h is available"
+#endif
+#endif
 #else
- #include <libintl.h>
- #include <locale.h>
+#include <libintl.h>
+#include <locale.h>
 #endif
 
 #include "MALLOC.h"
 #include "LanguagePreferences_Windows.h"
 #endif
 
-/*--------------------------------------------------------------------------*/ 
+/*--------------------------------------------------------------------------*/
 
 BOOL InitializeLocalization(void)
 {
 #ifdef HAVE_LIBINTL_H
 
-       char *SCIpath = getSCIpath();
-       char *pathLocales = NULL, *previousPathLocales = NULL;
-       char *ret = NULL;
+    char *SCIpath = getSCIpath();
+    char *pathLocales = NULL, *previousPathLocales = NULL;
+    char *ret = NULL;
+
+    /* set directory containing message catalogs */
+    pathLocales = (char *)MALLOC(sizeof(char) * (strlen(SCIpath) + strlen(PATHLOCALIZATIONFILE) + 1));
 
-       /* set directory containing message catalogs */
-       pathLocales=(char *)MALLOC(sizeof(char)*(strlen(SCIpath)+strlen(PATHLOCALIZATIONFILE)+1));
+    strcpy(pathLocales, SCIpath);
+    strcat(pathLocales, PATHLOCALIZATIONFILE);
 
-       strcpy(pathLocales, SCIpath);
-       strcat(pathLocales, PATHLOCALIZATIONFILE);
+    if (bindtextdomain(NAMELOCALIZATIONDOMAIN, pathLocales) == NULL || !isdir(pathLocales))
+    {
+        /* source tree and classic build */
+        previousPathLocales = strdup(pathLocales);
+        if (pathLocales)
+        {
+            FREE(pathLocales);
+            pathLocales = NULL;
+        }
 
-       if (bindtextdomain(NAMELOCALIZATIONDOMAIN,pathLocales)==NULL || !isdir(pathLocales))
-       { 
-               /* source tree and classic build */
-               previousPathLocales = strdup(pathLocales);
-               if (pathLocales) {FREE(pathLocales); pathLocales = NULL;}
+        pathLocales = (char *)MALLOC(sizeof(char) * (strlen(SCIpath) + strlen("/..") + strlen(PATHLOCALIZATIONFILE) + 1));
+        strcpy(pathLocales, SCIpath);
+        strcat(pathLocales, "/..");
+        strcat(pathLocales, PATHLOCALIZATIONFILE);
+        if (bindtextdomain(NAMELOCALIZATIONDOMAIN, pathLocales) == NULL || !isdir(pathLocales))
+        {
+            /* when it is installed on the system for example /usr/share/locale/ */
+            fprintf(stderr, "Warning: Localization issue: Error while binding the domain from %s or %s: Switch to the default language (English).\n", pathLocales, previousPathLocales);
+            if (previousPathLocales)
+            {
+                FREE(previousPathLocales);
+                previousPathLocales = NULL;
+            }
+            if (pathLocales)
+            {
+                FREE(pathLocales);
+                pathLocales = NULL;
+            }
+            if (SCIpath)
+            {
+                FREE(SCIpath);
+                SCIpath = NULL;
+            }
+            return FALSE;
+        }
+        if (previousPathLocales)
+        {
+            FREE(previousPathLocales);
+            previousPathLocales = NULL;
+        }
+        if (pathLocales)
+        {
+            FREE(pathLocales);
+            pathLocales = NULL;
+        }
+        if (SCIpath)
+        {
+            FREE(SCIpath);
+            SCIpath = NULL;
+        }
 
-               pathLocales=(char *)MALLOC(sizeof(char)*(strlen(SCIpath)+strlen("/..")+strlen(PATHLOCALIZATIONFILE)+1));
-               strcpy(pathLocales, SCIpath);
-               strcat(pathLocales, "/..");
-               strcat(pathLocales, PATHLOCALIZATIONFILE);
-               if (bindtextdomain(NAMELOCALIZATIONDOMAIN,pathLocales)==NULL || !isdir(pathLocales))
-               { 
-                       /* when it is installed on the system for example /usr/share/locale/ */
-                       fprintf(stderr, "Warning: Localization issue: Error while binding the domain from %s or %s: Switch to the default language (English).\n", pathLocales, previousPathLocales);
-                       if (previousPathLocales) {FREE(previousPathLocales); previousPathLocales = NULL;}
-                       if (pathLocales) {FREE(pathLocales); pathLocales = NULL;}
-                       if (SCIpath) {FREE(SCIpath); SCIpath = NULL;}
-                       return FALSE;
-               }
-               if (previousPathLocales) {FREE(previousPathLocales); previousPathLocales = NULL;}
-               if (pathLocales) {FREE(pathLocales); pathLocales = NULL;}
-               if (SCIpath) {FREE(SCIpath); SCIpath = NULL;}
-               
-       }
+    }
 
-       /* set domain for future gettext() calls */
-       ret=textdomain(NAMELOCALIZATIONDOMAIN);
-       if (ret==NULL)
-       {
-               fprintf(stderr, "Localization: Error while declaring the text domain %s\n", NAMELOCALIZATIONDOMAIN);
-               return FALSE;
-       }
-       bind_textdomain_codeset (NAMELOCALIZATIONDOMAIN,"UTF-8"); /*such that gettext and dgettext return UTF8 string*/
+    /* set domain for future gettext() calls */
+    ret = textdomain(NAMELOCALIZATIONDOMAIN);
+    if (ret == NULL)
+    {
+        fprintf(stderr, "Localization: Error while declaring the text domain %s\n", NAMELOCALIZATIONDOMAIN);
+        FREE(pathLocales);
+        return FALSE;
+    }
+    bind_textdomain_codeset (NAMELOCALIZATIONDOMAIN, "UTF-8"); /*such that gettext and dgettext return UTF8 string*/
 #ifndef _MSC_VER
-       /* Here, the "" means that we will try to use the language of the system
-        * first. If it doesn't work, we switch back to default (English) */
-       setlanguage("");
+    /* Here, the "" means that we will try to use the language of the system
+     * first. If it doesn't work, we switch back to default (English) */
+    setlanguage("");
 #else
-       /* We look if registry value LANGUAGE exists */
-       /* If not exists the "" means that we will try to use the language of the system.*/
-       {
-               char *loadLanguage = getLanguagePreferences();
-               setlanguage(loadLanguage);
-               if (loadLanguage) {FREE(loadLanguage); loadLanguage = NULL;}
-       }
+    /* We look if registry value LANGUAGE exists */
+    /* If not exists the "" means that we will try to use the language of the system.*/
+    {
+        char *loadLanguage = getLanguagePreferences();
+        setlanguage(loadLanguage);
+        if (loadLanguage)
+        {
+            FREE(loadLanguage);
+            loadLanguage = NULL;
+        }
+    }
 #endif
 
-       if (previousPathLocales) FREE(previousPathLocales);
-       if (pathLocales) FREE(pathLocales);
-       if (SCIpath) FREE(SCIpath);
+    if (previousPathLocales)
+    {
+        FREE(previousPathLocales);
+    }
+    if (pathLocales)
+    {
+        FREE(pathLocales);
+    }
+    if (SCIpath)
+    {
+        FREE(SCIpath);
+    }
 
-       return TRUE;
+    return TRUE;
 #else
-       fprintf(stderr, "Localization: setlocale didn't exist on the computer used to compile Scilab ! This is abnormal ! No localization will be working for this distribution of Scilab.\n");
-       return FALSE;
+    fprintf(stderr, "Localization: setlocale didn't exist on the computer used to compile Scilab ! This is abnormal ! No localization will be working for this distribution of Scilab.\n");
+    return FALSE;
 #endif
 }
-/*--------------------------------------------------------------------------*/ 
+/*--------------------------------------------------------------------------*/
 
index 5a6d935..e60899a 100644 (file)
 /* MAXCHARSSCIPRINT_FULL is for sciprint_full - more than this gets truncated */
 #define MAXCHARSSCIPRINT_FULL 5000
 /*--------------------------------------------------------------------------*/
-void sciprint_full(char *fmt,...)
+void sciprint_full(char *fmt, ...)
 {
-       int lstr;
-       va_list ap;
-       char *s_buf=NULL;
-       char *split_s_buf=NULL;
-       int count=0;
-       int p_s=0;
-       static int colwidth;
+    int lstr;
+    va_list ap;
+    char *s_buf = NULL;
+    char *split_s_buf = NULL;
+    int count = 0;
+    int p_s = 0;
+    static int colwidth;
 
-       s_buf=MALLOC(sizeof(char)*(MAXCHARSSCIPRINT_FULL+1));
-       if (s_buf == (char *) 0)
-       {
-               sciprint(_("%s: No more memory.\n"),"sciprint_full");
-               return;
-       }
+    s_buf = MALLOC(sizeof(char) * (MAXCHARSSCIPRINT_FULL + 1));
+    if (s_buf == (char *) 0)
+    {
+        sciprint(_("%s: No more memory.\n"), "sciprint_full");
+        return;
+    }
 
-       /* number of columns as set by command lines() */
-       colwidth = getColumnsSize();
+    /* number of columns as set by command lines() */
+    colwidth = getColumnsSize();
 
-       split_s_buf=MALLOC(sizeof(char)*(colwidth+1));
-       if (split_s_buf == (char *) 0)
-       {
-               sciprint(_("%s: No more memory.\n"),"sciprint_full");
-               return;
-       }
+    split_s_buf = MALLOC(sizeof(char) * (colwidth + 1));
+    if (split_s_buf == (char *) 0)
+    {
+        sciprint(_("%s: No more memory.\n"), "sciprint_full");
+        FREE(s_buf);
+        return;
+    }
 
-       va_start(ap,fmt);
+    va_start(ap, fmt);
 
 #if defined(linux) || defined(_MSC_VER)
-       count = vsnprintf (s_buf,MAXCHARSSCIPRINT_FULL-1, fmt, ap );
-       if (count == -1)
-       {
-               s_buf[MAXCHARSSCIPRINT_FULL-1]='\0';
-       }
+    count = vsnprintf (s_buf, MAXCHARSSCIPRINT_FULL - 1, fmt, ap );
+    if (count == -1)
+    {
+        s_buf[MAXCHARSSCIPRINT_FULL - 1] = '\0';
+    }
 #else
-       (void )vsprintf(s_buf, fmt, ap );
+    (void )vsprintf(s_buf, fmt, ap );
 #endif
 
-       va_end(ap);
+    va_end(ap);
 
-       lstr=(int) strlen(s_buf);
+    lstr = (int) strlen(s_buf);
 
-       if (lstr<colwidth)
-       {
-               sciprint("%s",s_buf);
-       }
-       else
-       {
-               strncpy(split_s_buf,s_buf+p_s,colwidth-1);
-               split_s_buf[colwidth]='\0';
-               p_s=p_s+colwidth-1;
-               sciprint("%s",split_s_buf);
-               sciprint("\n");
-               while (p_s+colwidth-1<(int)lstr)
-               {
-                       strncpy(split_s_buf,s_buf+p_s,colwidth-1);
-                       split_s_buf[colwidth]='\0';
-                       p_s=p_s+colwidth-1;
-                       sciprint(_("  (cont'd) %s\n"),split_s_buf);
-               }
-               strncpy(split_s_buf,s_buf+p_s,lstr-p_s);
-               split_s_buf[lstr-p_s]='\0';
-               sciprint(_("     (end) %s\n"),split_s_buf);
-       }
+    if (lstr < colwidth)
+    {
+        sciprint("%s", s_buf);
+    }
+    else
+    {
+        strncpy(split_s_buf, s_buf + p_s, colwidth - 1);
+        split_s_buf[colwidth] = '\0';
+        p_s = p_s + colwidth - 1;
+        sciprint("%s", split_s_buf);
+        sciprint("\n");
+        while (p_s + colwidth - 1 < (int)lstr)
+        {
+            strncpy(split_s_buf, s_buf + p_s, colwidth - 1);
+            split_s_buf[colwidth] = '\0';
+            p_s = p_s + colwidth - 1;
+            sciprint(_("  (cont'd) %s\n"), split_s_buf);
+        }
+        strncpy(split_s_buf, s_buf + p_s, lstr - p_s);
+        split_s_buf[lstr - p_s] = '\0';
+        sciprint(_("     (end) %s\n"), split_s_buf);
+    }
 
-       if (s_buf){FREE(s_buf);s_buf=NULL;}
-       if (split_s_buf){FREE(split_s_buf);split_s_buf=NULL;}
+    if (s_buf)
+    {
+        FREE(s_buf);
+        s_buf = NULL;
+    }
+    if (split_s_buf)
+    {
+        FREE(split_s_buf);
+        split_s_buf = NULL;
+    }
 
 }
 /*--------------------------------------------------------------------------*/
index 6842a3e..a8cbae4 100644 (file)
@@ -5826,6 +5826,11 @@ int write_xml_states(int nvar, const char * xmlfile, char **ids, double *x)
     if (fd < 0)
     {
         sciprint(_("Error: cannot write to  '%s'  \n"), xmlfile);
+        for (i = 0; i < nvar; i++)
+        {
+            FREE(xv[i]);
+        }
+        FREE(xv);
         return -3;/* cannot write to file*/
     }
 
@@ -5924,7 +5929,11 @@ int C2F(hfjac)(double *x, double *jac, int *col)
 
     job = 0;
     fx_(x, jac);
-    if (*ierr < 0) return *ierr;
+    if (*ierr < 0)
+    {
+        FREE(work);
+        return *ierr;
+    }
 
     inc_inv = ONE / inc;