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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@20784
138bc75d-0d04-0410-961f-
82ee72b054a4
+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
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. */
/* 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;
+ int len;
int fd;
static char tmp[] = { DIR_SEPARATOR, 't', 'm', 'p', 0 };
static char usrtmp[] = { DIR_SEPARATOR, 'u', 's', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 };
#define WEXITSTATUS(S) (((S) & 0xff00) >> 8)
#endif
-extern char *choose_temp_base ();
+extern char *make_temp_file ();
\f
/* On certain systems, we have code that works by scanning the object file
directly. But this code uses system-specific header files and library
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
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;
*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;
if (import_file != 0 && import_file[0])
maybe_unlink (import_file);
#endif
+ maybe_unlink (c_file);
+ maybe_unlink (o_file);
return 0;
}
maybe_unlink (export_file);
maybe_unlink (import_file);
#endif
+ maybe_unlink (c_file);
+ maybe_unlink (o_file);
return 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
#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. */
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;
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;