Initial revision
authorDoug Evans <dje@gnu.org>
Mon, 15 Apr 1996 17:43:05 +0000 (17:43 +0000)
committerDoug Evans <dje@gnu.org>
Mon, 15 Apr 1996 17:43:05 +0000 (17:43 +0000)
From-SVN: r11787

gcc/choose-temp.c [new file with mode: 0644]
gcc/gansidecl.h [new file with mode: 0644]

diff --git a/gcc/choose-temp.c b/gcc/choose-temp.c
new file mode 100644 (file)
index 0000000..4234b84
--- /dev/null
@@ -0,0 +1,139 @@
+/* Utility to pick a temporary directory.
+   Copyright (C) 1996 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+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.  */
+
+#ifndef _WIN32
+#include <sys/file.h>   /* May get R_OK, etc. on some systems.  */
+#endif
+
+#ifndef R_OK
+#define R_OK 4
+#define W_OK 2
+#define X_OK 1
+#endif
+
+#ifdef IN_GCC
+#include "config.h"
+#include "gansidecl.h"
+extern char *xmalloc ();
+#else
+#include "ansidecl.h"
+#include "libiberty.h"
+#if defined (__MSDOS__) || defined (_WIN32)
+#define DIR_SEPARATOR '\\'
+#endif
+#endif
+
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
+/* On MSDOS, write temp files in current dir
+   because there's no place else we can expect to use.  */
+/* ??? Although the current directory is tried as a last resort,
+   this is left in so that on MSDOS it is prefered to /tmp on the
+   off chance that someone requires this, since that was the previous
+   behaviour.  */
+#ifdef __MSDOS__
+#ifndef P_tmpdir
+#define P_tmpdir "."
+#endif
+#endif
+
+/* Name of temporary file.
+   mktemp requires 6 trailing X's.  */
+#define TEMP_FILE "ccXXXXXX"
+
+/* Subroutine of choose_temp_base.
+   If BASE is non-NULL, returh it.
+   Otherwise it checks if DIR is a usable directory.
+   If success, DIR is returned.
+   Otherwise NULL is returned.  */
+
+static char *
+try (dir, base)
+     char *dir, *base;
+{
+  if (base != 0)
+    return base;
+  if (dir != 0
+      && access (dir, R_OK | W_OK) == 0)
+    return dir;
+  return 0;
+}
+
+/* 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.  */
+
+char *
+choose_temp_base ()
+{
+  char *base = 0;
+  char *temp_filename;
+  int len;
+  char usrtmp[sizeof ("/usr/tmp")],tmp[sizeof ("/tmp")];
+
+#ifndef MPW
+  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.  */
+  sprintf (usrtmp, "%cusr%ctmp", DIR_SEPARATOR, DIR_SEPARATOR);
+  base = try (usrtmp, base);
+  sprintf (tmp, "%ctmp", DIR_SEPARATOR);
+  base = try (tmp, base);
+  /* If all else fails, use the current directory!  */
+  if (base == 0)
+    base = ".";
+
+#else /* MPW */
+  base = ":";
+#endif
+
+  len = strlen (base);
+  if (len == 0)
+    abort ();
+  temp_filename = xmalloc (len + 1 /*DIR_SEPARATOR*/
+                          + strlen (TEMP_FILE) + 1);
+  strcpy (temp_filename, base);
+
+#ifndef MPW
+  if (temp_filename[len-1] != '/'
+      && temp_filename[len-1] != DIR_SEPARATOR)
+    temp_filename[len++] = DIR_SEPARATOR;
+#else /* MPW */
+  if (temp_filename[len-1] != ':')
+    temp_filename[len++] = ':';
+#endif /* MPW */
+  strcpy (temp_filename + len, TEMP_FILE);
+
+  mktemp (temp_filename);
+  if (strlen (temp_filename) == 0)
+    abort ();
+  return temp_filename;
+}
diff --git a/gcc/gansidecl.h b/gcc/gansidecl.h
new file mode 100644 (file)
index 0000000..b2a250d
--- /dev/null
@@ -0,0 +1,88 @@
+/* ANSI and traditional C compatability macros.
+   Copyright (C) 1996 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* This file mimics some of the support provided by include/ansidecl.h
+   in binutils and gdb releases.
+   ??? Over time the two should be merged into one.  */
+
+#ifndef        ANSIDECL_H
+#define        ANSIDECL_H
+
+/* Add prototype support.  */
+#ifndef PROTO
+#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
+#define PROTO(ARGS) ARGS
+#else
+#define PROTO(ARGS) ()
+#endif
+#endif
+
+#ifndef VPROTO
+#ifdef __STDC__
+#define PVPROTO(ARGS)          ARGS
+#define VPROTO(ARGS)            ARGS
+#define VA_START(va_list,var)  va_start(va_list,var)
+#else
+#define PVPROTO(ARGS)          ()
+#define VPROTO(ARGS)            (va_alist) va_dcl
+#define VA_START(va_list,var)  va_start(va_list)
+#endif
+#endif
+
+#ifndef STDIO_PROTO
+#ifdef BUFSIZ
+#define STDIO_PROTO(ARGS) PROTO(ARGS)
+#else
+#define STDIO_PROTO(ARGS) ()
+#endif
+#endif
+
+/* Define a generic NULL if one hasn't already been defined.  */
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#ifndef GENERIC_PTR
+#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
+#define GENERIC_PTR void *
+#else
+#define GENERIC_PTR char *
+#endif
+#endif
+
+#ifndef NULL_PTR
+#define NULL_PTR ((GENERIC_PTR)0)
+#endif
+
+#ifdef __STDC__
+
+#define        PTR void *
+
+#else
+
+#define        PTR char *
+#ifndef const
+#define const
+#endif
+
+#endif /* ! __STDC__ */
+
+#endif /* ANSIDECL_H */