diff options
| -rw-r--r-- | ldap/servers/slapd/tools/ldclt/data.c | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/ldap/servers/slapd/tools/ldclt/data.c b/ldap/servers/slapd/tools/ldclt/data.c index a27d088e..33de017d 100644 --- a/ldap/servers/slapd/tools/ldclt/data.c +++ b/ldap/servers/slapd/tools/ldclt/data.c @@ -134,10 +134,10 @@ int loadImages ( #ifdef _WIN32 WIN32_FIND_DATA fileData; /* Current file */ HANDLE dirContext; /* Directory context */ - char *findPath; /* To build the find path */ + char *findPath = NULL; /* To build the find path */ char *pt; /* To read the images */ #else /* _WIN32 */ - DIR *dirp; /* Directory data */ + DIR *dirp = NULL; /* Directory data */ struct dirent *direntp; /* Directory entry */ #endif /* _WIN32 */ char *fileName; /* As read from the system */ @@ -145,6 +145,7 @@ int loadImages ( struct stat stat_buf; /* To read the image size */ int fd; /* To open the image */ int ret; /* Return value */ + int rc = 0; /* * Initialization @@ -158,7 +159,8 @@ int loadImages ( fprintf (stderr, "ldclt: %s\n", strerror (ret)); fprintf (stderr, "Error: cannot initiate imagesLast_mutex\n"); fflush (stderr); - return (-1); + rc = -1; + goto exit; } /* @@ -174,8 +176,8 @@ int loadImages ( fprintf (stderr, "ldlct: cannot load images from %s\n", dirpath); fprintf (stderr, "ldclt: try using -e imagesdir=path\n"); /*JLS 06-03-01*/ fflush (stderr); - free (findPath); - return (-1); + rc = -1; + goto exit; } #else /* _WIN32 */ dirp = opendir (dirpath); @@ -185,7 +187,8 @@ int loadImages ( fprintf (stderr, "ldlct: cannot load images from %s\n", dirpath); fprintf (stderr, "ldclt: try using -e imagesdir=path\n"); /*JLS 06-03-01*/ fflush (stderr); - return (-1); + rc = -1; + goto exit; } #endif /* _WIN32 */ @@ -214,7 +217,8 @@ int loadImages ( { /*JLS 06-03-00*/ printf ("Error: cannot realloc(mctx.images), error=%d (%s)\n", errno, strerror (errno)); /*JLS 06-03-00*/ - return (-1); /*JLS 06-03-00*/ + rc = -1; + goto exit; } /*JLS 06-03-00*/ mctx.images[mctx.imagesNb-1].name = (char *) malloc (strlen(fileName) + 1); @@ -222,7 +226,8 @@ int loadImages ( { /*JLS 06-03-00*/ printf ("Error: cannot malloc(mctx.images[%d]).name, error=%d (%s)\n", mctx.imagesNb-1, errno, strerror (errno)); /*JLS 06-03-00*/ - return (-1); /*JLS 06-03-00*/ + rc = -1; + goto exit; } /*JLS 06-03-00*/ strcpy (mctx.images[mctx.imagesNb-1].name, fileName); @@ -237,7 +242,8 @@ int loadImages ( perror (name); fprintf (stderr, "Cannot stat(%s)\n", name); fflush (stderr); - return (-1); + rc = -1; + goto exit; } mctx.images[mctx.imagesNb-1].length = stat_buf.st_size; @@ -250,7 +256,8 @@ int loadImages ( perror (name); fprintf (stderr, "Cannot open(%s)\n", name); fflush (stderr); - return (-1); + rc = -1; + goto exit; } #ifdef _WIN32 @@ -263,14 +270,16 @@ int loadImages ( fprintf (stderr, "Cannot malloc(%d) to load %s\n", stat_buf.st_size, name); fflush (stderr); - return (-1); + rc = -1; + goto exit; } if (read (fd, mctx.images[mctx.imagesNb-1].data, stat_buf.st_size) < 0) { perror (name); fprintf (stderr, "Cannot read(%s)\n", name); fflush (stderr); - return (-1); + rc = -1; + goto exit; } #else /* _WIN32 */ /* @@ -283,7 +292,8 @@ int loadImages ( perror (name); fprintf (stderr, "Cannot mmap(%s)\n", name); fflush (stderr); - return (-1); + rc = -1; + goto exit; } #endif /* _WIN32 */ @@ -296,7 +306,8 @@ int loadImages ( perror (name); fprintf (stderr, "Cannot close(%s)\n", name); fflush (stderr); - return (-1); + rc = -1; + goto exit; } } #ifdef _WIN32 @@ -304,17 +315,17 @@ int loadImages ( #else } /* while ((direntp = readdir (dirp)) != NULL) */ #endif - +exit: /* * Close the directory */ #ifndef _WIN32 - if (closedir (dirp) < 0) + if (dirp && closedir (dirp) < 0) { perror (dirpath); fprintf (stderr, "Cannot closedir(%s)\n", dirpath); fflush (stderr); - return (-1); + rc = -1; } #endif @@ -322,9 +333,9 @@ int loadImages ( * Normal end */ #ifdef _WIN32 - free (findPath); + if (findPath) free (findPath); #endif - return (0); + return rc; } @@ -447,6 +458,7 @@ loadDataListFile ( { perror (dlf->fname); fprintf (stderr, "Error: cannot rewind file \"%s\"\n", dlf->fname); + fclose(ifile); return (-1); } |
