choose-temp.c (choose_temp_base): Restore original variant of this function for compatibility.

* choose-temp.c (choose_temp_base): Restore original variant of
        this function for compatibility.
        (make_temp_file): This is the new, preferred interface to create
        temporary files.
        * collect2.c (choose_temp_base): Delete declaration.
        (make_temp_file): Declare.
        (temp_filename_length, temp_filename): Delete.
        (main): Use make_temp_file to get temporary files.  Use --lang-c
        to force the resulting ctort/dtor file to be compiled with the C
        compiler.  Make sure to remove temporary files on all exit paths.
        * gcc.c (make_temp_file): Provide prototype if MKTEMP_EACH_FILE is
        defined.
        (choose_temp_base): Only provide prototype if MKTEMP_EACH_FILE is
        not defined.
        (do_spec): Use make_temp_file if MKTEMP_EACH_FILE is defined.

From-SVN: r20784
This commit is contained in:
Jeffrey A Law 1998-06-28 20:07:32 +00:00 committed by Jeff Law
parent b0d45b7466
commit 39d45901b3
4 changed files with 86 additions and 22 deletions

View File

@ -1,3 +1,21 @@
Sun Jun 28 20:58:51 1998 Jeffrey A Law (law@cygnus.com)
* choose-temp.c (choose_temp_base): Restore original variant of
this function for compatibility.
(make_temp_file): This is the new, preferred interface to create
temporary files.
* collect2.c (choose_temp_base): Delete declaration.
(make_temp_file): Declare.
(temp_filename_length, temp_filename): Delete.
(main): Use make_temp_file to get temporary files. Use --lang-c
to force the resulting ctort/dtor file to be compiled with the C
compiler. Make sure to remove temporary files on all exit paths.
* gcc.c (make_temp_file): Provide prototype if MKTEMP_EACH_FILE is
defined.
(choose_temp_base): Only provide prototype if MKTEMP_EACH_FILE is
not defined.
(do_spec): Use make_temp_file if MKTEMP_EACH_FILE is defined.
Sun Jun 28 08:57:09 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* configure.in (GCC_NEED_DECLARATIONS): Add strerror, getcwd and

View File

@ -17,7 +17,7 @@ License along with libiberty; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This file exports one function: choose_temp_base. */
/* This file exports two functions: choose_temp_base and make_temp_file. */
/* This file lives in at least two places: libiberty and gcc.
Don't change one without the other. */
@ -102,10 +102,57 @@ try (dir, base)
/* Return a prefix for temporary file names or NULL if unable to find one.
The current directory is chosen if all else fails so the program is
exited if a temporary directory can't be found (mktemp fails).
The buffer for the result is obtained with xmalloc. */
The buffer for the result is obtained with xmalloc.
This function is provided for backwards compatability only. It use
is not recommended. */
char *
choose_temp_base ()
{
char *base = 0;
char *temp_filename;
int len;
static char tmp[] = { DIR_SEPARATOR, 't', 'm', 'p', 0 };
static char usrtmp[] = { DIR_SEPARATOR, 'u', 's', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 };
base = try (getenv ("TMPDIR"), base);
base = try (getenv ("TMP"), base);
base = try (getenv ("TEMP"), base);
#ifdef P_tmpdir
base = try (P_tmpdir, base);
#endif
/* Try /usr/tmp, then /tmp. */
base = try (usrtmp, base);
base = try (tmp, base);
/* If all else fails, use the current directory! */
if (base == 0)
base = ".";
len = strlen (base);
temp_filename = xmalloc (len + 1 /*DIR_SEPARATOR*/
+ strlen (TEMP_FILE) + 1);
strcpy (temp_filename, base);
if (len != 0
&& temp_filename[len-1] != '/'
&& temp_filename[len-1] != DIR_SEPARATOR)
temp_filename[len++] = DIR_SEPARATOR;
strcpy (temp_filename + len, TEMP_FILE);
mktemp (temp_filename);
if (strlen (temp_filename) == 0)
abort ();
return temp_filename;
}
/* Return a temporary file name (as a string) or NULL if unable to create
one. */
char *
make_temp_file ()
{
char *base = 0;
char *temp_filename;

View File

@ -60,7 +60,7 @@ Boston, MA 02111-1307, USA. */
#define WEXITSTATUS(S) (((S) & 0xff00) >> 8)
#endif
extern char *choose_temp_base ();
extern char *make_temp_file ();
/* On certain systems, we have code that works by scanning the object file
directly. But this code uses system-specific header files and library
@ -204,8 +204,6 @@ int debug; /* true if -debug */
static int shared_obj; /* true if -shared */
static int temp_filename_length; /* Length of temp_filename */
static char *temp_filename; /* Base of temp filenames */
static char *c_file; /* <xxx>.c for constructor/destructor list. */
static char *o_file; /* <xxx>.o for constructor/destructor list. */
#ifdef COLLECT_EXPORT_LIST
@ -932,7 +930,7 @@ main (argc, argv)
char **object_lst = (char **) xcalloc (sizeof (char *), argc);
char **object = object_lst;
int first_file;
int num_c_args = argc+7;
int num_c_args = argc+8;
#ifdef DEBUG
debug = 1;
@ -1131,23 +1129,15 @@ main (argc, argv)
*ld1++ = *ld2++ = ld_file_name;
/* Make temp file names. */
temp_filename = choose_temp_base ();
temp_filename_length = strlen (temp_filename);
c_file = xcalloc (temp_filename_length + sizeof (".c"), 1);
o_file = xcalloc (temp_filename_length + sizeof (".o"), 1);
c_file = make_temp_file ();
o_file = make_temp_file ();
#ifdef COLLECT_EXPORT_LIST
export_file = xmalloc (temp_filename_length + sizeof (".x"));
import_file = xmalloc (temp_filename_length + sizeof (".p"));
#endif
ldout = xmalloc (temp_filename_length + sizeof (".ld"));
sprintf (ldout, "%s.ld", temp_filename);
sprintf (c_file, "%s.c", temp_filename);
sprintf (o_file, "%s.o", temp_filename);
#ifdef COLLECT_EXPORT_LIST
sprintf (export_file, "%s.x", temp_filename);
sprintf (import_file, "%s.p", temp_filename);
export_file = make_temp_file ();
import_file = make_temp_file ();
#endif
ldout = make_temp_file ();
*c_ptr++ = c_file_name;
*c_ptr++ = "-lang-c";
*c_ptr++ = "-c";
*c_ptr++ = "-o";
*c_ptr++ = o_file;
@ -1435,6 +1425,8 @@ main (argc, argv)
if (import_file != 0 && import_file[0])
maybe_unlink (import_file);
#endif
maybe_unlink (c_file);
maybe_unlink (o_file);
return 0;
}
@ -1485,6 +1477,8 @@ main (argc, argv)
maybe_unlink (export_file);
maybe_unlink (import_file);
#endif
maybe_unlink (c_file);
maybe_unlink (o_file);
return 0;
}

View File

@ -121,7 +121,6 @@ static char dir_separator_str[] = {DIR_SEPARATOR, 0};
#define GET_ENVIRONMENT(ENV_VALUE,ENV_NAME) ENV_VALUE = getenv (ENV_NAME)
#endif
extern char *choose_temp_base PROTO((void));
extern char *my_strerror PROTO((int));
#ifndef HAVE_KILL
@ -1269,6 +1268,9 @@ static int argbuf_index;
#define MKTEMP_EACH_FILE
#ifdef MKTEMP_EACH_FILE
extern char *make_temp_file PROTO((void));
/* This is the list of suffixes and codes (%g/%u/%U) and the associated
temp file. */
@ -1280,8 +1282,11 @@ static struct temp_name {
int filename_length; /* strlen (filename). */
struct temp_name *next;
} *temp_names;
#else
extern char *choose_temp_base PROTO((void));
#endif
/* Number of commands executed so far. */
static int execution_count;
@ -3512,7 +3517,7 @@ do_spec_1 (spec, inswitch, soft_matched_part)
t->length = p - suffix;
t->suffix = save_string (suffix, p - suffix);
t->unique = (c != 'g');
temp_filename = choose_temp_base ();
temp_filename = make_temp_file ();
temp_filename_length = strlen (temp_filename);
t->filename = temp_filename;
t->filename_length = temp_filename_length;