+2008-01-01 Sylvain Beucler <beuc@gnu.org>
+ Bruno Haible <bruno@clisp.org>
+
+ Improve memory cleanup in 'relocatable' module.
+ * lib/relocatable.h (compute_curr_prefix): Change return type to
+ 'char *'.
+ * lib/relocatable.c (compute_curr_prefix): Change return type to
+ 'char *'. Free curr_installdir after use.
+ (relocate): Free curr_prefix_better after use.
+ * lib/progreloc.c (prepare_relocate): Free curr_prefix after use.
+
2008-01-01 Bruno Haible <bruno@clisp.org>
* tests/test-wcwidth.c (main): Relax test of U+2060. Avoids a test
/* Provide relocatable programs.
- Copyright (C) 2003-2007 Free Software Foundation, Inc.
+ Copyright (C) 2003-2008 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2003.
This program is free software: you can redistribute it and/or modify
prepare_relocate (const char *orig_installprefix, const char *orig_installdir,
const char *argv0)
{
- const char *curr_prefix;
+ char *curr_prefix;
/* Determine the full pathname of the current executable. */
executable_fullname = find_executable (argv0);
curr_prefix = compute_curr_prefix (orig_installprefix, orig_installdir,
executable_fullname);
if (curr_prefix != NULL)
- /* Now pass this prefix to all copies of the relocate.c source file. */
- set_relocation_prefix (orig_installprefix, curr_prefix);
+ {
+ /* Now pass this prefix to all copies of the relocate.c source file. */
+ set_relocation_prefix (orig_installprefix, curr_prefix);
+
+ free (curr_prefix);
+ }
}
/* Set program_name, based on argv[0], and original installation prefix and
/* Provide relocatable packages.
- Copyright (C) 2003-2006 Free Software Foundation, Inc.
+ Copyright (C) 2003-2006, 2008 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2003.
This program is free software; you can redistribute it and/or modify it
/* Convenience function:
Computes the current installation prefix, based on the original
installation prefix, the original installation directory of a particular
- file, and the current pathname of this file. Returns NULL upon failure. */
+ file, and the current pathname of this file.
+ Returns it, freshly allocated. Returns NULL upon failure. */
#ifdef IN_LIBRARY
#define compute_curr_prefix local_compute_curr_prefix
static
#endif
-const char *
+char *
compute_curr_prefix (const char *orig_installprefix,
const char *orig_installdir,
const char *curr_pathname)
{
- const char *curr_installdir;
+ char *curr_installdir;
const char *rel_installdir;
if (curr_pathname == NULL)
}
if (rp > rel_installdir)
- /* Unexpected: The curr_installdir does not end with rel_installdir. */
- return NULL;
+ {
+ /* Unexpected: The curr_installdir does not end with rel_installdir. */
+ free (curr_installdir);
+ return NULL;
+ }
{
size_t curr_prefix_len = cp - curr_installdir;
curr_prefix = (char *) xmalloc (curr_prefix_len + 1);
#ifdef NO_XMALLOC
if (curr_prefix == NULL)
- return NULL;
+ {
+ free (curr_installdir);
+ return NULL;
+ }
#endif
memcpy (curr_prefix, curr_installdir, curr_prefix_len);
curr_prefix[curr_prefix_len] = '\0';
+ free (curr_installdir);
+
return curr_prefix;
}
}
orig_prefix. */
const char *orig_installprefix = INSTALLPREFIX;
const char *orig_installdir = INSTALLDIR;
- const char *curr_prefix_better;
+ char *curr_prefix_better;
curr_prefix_better =
compute_curr_prefix (orig_installprefix, orig_installdir,
get_shared_library_fullname ());
- if (curr_prefix_better == NULL)
- curr_prefix_better = curr_prefix;
- set_relocation_prefix (orig_installprefix, curr_prefix_better);
+ set_relocation_prefix (orig_installprefix,
+ curr_prefix_better != NULL
+ ? curr_prefix_better
+ : curr_prefix);
+
+ if (curr_prefix_better != NULL)
+ free (curr_prefix_better);
initialized = 1;
}
/* Provide relocatable packages.
- Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2005, 2008 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2003.
This program is free software; you can redistribute it and/or modify it
/* Convenience function:
Computes the current installation prefix, based on the original
installation prefix, the original installation directory of a particular
- file, and the current pathname of this file. Returns NULL upon failure. */
-extern const char * compute_curr_prefix (const char *orig_installprefix,
- const char *orig_installdir,
- const char *curr_pathname);
+ file, and the current pathname of this file.
+ Returns it, freshly allocated. Returns NULL upon failure. */
+extern char * compute_curr_prefix (const char *orig_installprefix,
+ const char *orig_installdir,
+ const char *curr_pathname);
#else