mirror of git://gcc.gnu.org/git/gcc.git
make-relative-prefix.c (make_relative_prefix_1): Resource leaks.
2007-08-17 Michael Snyder <msnyder@access-company.com> * make-relative-prefix.c (make_relative_prefix_1): Resource leaks. From-SVN: r127595
This commit is contained in:
parent
2ce6c6cb33
commit
9c79ad8bf8
|
@ -1,3 +1,7 @@
|
||||||
|
2007-08-17 Michael Snyder <msnyder@access-company.com>
|
||||||
|
|
||||||
|
* make-relative-prefix.c (make_relative_prefix_1): Resource leaks.
|
||||||
|
|
||||||
2007-08-03 Michael Snyder <msnyder@access-company.com>
|
2007-08-03 Michael Snyder <msnyder@access-company.com>
|
||||||
|
|
||||||
* make-relative-prefix.c (make_relative_prefix_1): Fix resource
|
* make-relative-prefix.c (make_relative_prefix_1): Fix resource
|
||||||
|
|
|
@ -201,10 +201,13 @@ free_split_directories (char **dirs)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
while (dirs[i] != NULL)
|
if (dirs != NULL)
|
||||||
free (dirs[i++]);
|
{
|
||||||
|
while (dirs[i] != NULL)
|
||||||
|
free (dirs[i++]);
|
||||||
|
|
||||||
free ((char *) dirs);
|
free ((char *) dirs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Given three strings PROGNAME, BIN_PREFIX, PREFIX, return a string that gets
|
/* Given three strings PROGNAME, BIN_PREFIX, PREFIX, return a string that gets
|
||||||
|
@ -221,11 +224,11 @@ static char *
|
||||||
make_relative_prefix_1 (const char *progname, const char *bin_prefix,
|
make_relative_prefix_1 (const char *progname, const char *bin_prefix,
|
||||||
const char *prefix, const int resolve_links)
|
const char *prefix, const int resolve_links)
|
||||||
{
|
{
|
||||||
char **prog_dirs, **bin_dirs, **prefix_dirs;
|
char **prog_dirs = NULL, **bin_dirs = NULL, **prefix_dirs = NULL;
|
||||||
int prog_num, bin_num, prefix_num;
|
int prog_num, bin_num, prefix_num;
|
||||||
int i, n, common;
|
int i, n, common;
|
||||||
int needed_len;
|
int needed_len;
|
||||||
char *ret, *ptr, *full_progname = NULL;
|
char *ret = NULL, *ptr, *full_progname;
|
||||||
|
|
||||||
if (progname == NULL || bin_prefix == NULL || prefix == NULL)
|
if (progname == NULL || bin_prefix == NULL || prefix == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -305,10 +308,7 @@ make_relative_prefix_1 (const char *progname, const char *bin_prefix,
|
||||||
|
|
||||||
bin_dirs = split_directories (bin_prefix, &bin_num);
|
bin_dirs = split_directories (bin_prefix, &bin_num);
|
||||||
if (bin_dirs == NULL)
|
if (bin_dirs == NULL)
|
||||||
{
|
goto bailout;
|
||||||
free_split_directories (prog_dirs);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Remove the program name from comparison of directory names. */
|
/* Remove the program name from comparison of directory names. */
|
||||||
prog_num--;
|
prog_num--;
|
||||||
|
@ -326,21 +326,12 @@ make_relative_prefix_1 (const char *progname, const char *bin_prefix,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prog_num <= 0 || i == bin_num)
|
if (prog_num <= 0 || i == bin_num)
|
||||||
{
|
goto bailout;
|
||||||
free_split_directories (prog_dirs);
|
|
||||||
free_split_directories (bin_dirs);
|
|
||||||
prog_dirs = bin_dirs = (char **) 0;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prefix_dirs = split_directories (prefix, &prefix_num);
|
prefix_dirs = split_directories (prefix, &prefix_num);
|
||||||
if (prefix_dirs == NULL)
|
if (prefix_dirs == NULL)
|
||||||
{
|
goto bailout;
|
||||||
free_split_directories (prog_dirs);
|
|
||||||
free_split_directories (bin_dirs);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Find how many directories are in common between bin_prefix & prefix. */
|
/* Find how many directories are in common between bin_prefix & prefix. */
|
||||||
n = (prefix_num < bin_num) ? prefix_num : bin_num;
|
n = (prefix_num < bin_num) ? prefix_num : bin_num;
|
||||||
|
@ -352,12 +343,7 @@ make_relative_prefix_1 (const char *progname, const char *bin_prefix,
|
||||||
|
|
||||||
/* If there are no common directories, there can be no relative prefix. */
|
/* If there are no common directories, there can be no relative prefix. */
|
||||||
if (common == 0)
|
if (common == 0)
|
||||||
{
|
goto bailout;
|
||||||
free_split_directories (prog_dirs);
|
|
||||||
free_split_directories (bin_dirs);
|
|
||||||
free_split_directories (prefix_dirs);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Two passes: first figure out the size of the result string, and
|
/* Two passes: first figure out the size of the result string, and
|
||||||
then construct it. */
|
then construct it. */
|
||||||
|
@ -371,7 +357,7 @@ make_relative_prefix_1 (const char *progname, const char *bin_prefix,
|
||||||
|
|
||||||
ret = (char *) malloc (needed_len);
|
ret = (char *) malloc (needed_len);
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
return NULL;
|
goto bailout;
|
||||||
|
|
||||||
/* Build up the pathnames in argv[0]. */
|
/* Build up the pathnames in argv[0]. */
|
||||||
*ret = '\0';
|
*ret = '\0';
|
||||||
|
@ -392,6 +378,7 @@ make_relative_prefix_1 (const char *progname, const char *bin_prefix,
|
||||||
for (i = common; i < prefix_num; i++)
|
for (i = common; i < prefix_num; i++)
|
||||||
strcat (ret, prefix_dirs[i]);
|
strcat (ret, prefix_dirs[i]);
|
||||||
|
|
||||||
|
bailout:
|
||||||
free_split_directories (prog_dirs);
|
free_split_directories (prog_dirs);
|
||||||
free_split_directories (bin_dirs);
|
free_split_directories (bin_dirs);
|
||||||
free_split_directories (prefix_dirs);
|
free_split_directories (prefix_dirs);
|
||||||
|
|
Loading…
Reference in New Issue