]> git.eshelyaron.com Git - emacs.git/commitdiff
(make_temp_name): New function, extracted from
authorGerd Moellmann <gerd@gnu.org>
Tue, 16 May 2000 11:17:39 +0000 (11:17 +0000)
committerGerd Moellmann <gerd@gnu.org>
Tue, 16 May 2000 11:17:39 +0000 (11:17 +0000)
Fmake_temp_name.
(Fmake_temp_name): Use it.

src/ChangeLog
src/fileio.c

index 77eb9735c7ec4754276c4a34cd874c5c3aa9d161..6a32598eb035a011d7af9266820467727eaca49f 100644 (file)
@@ -1,3 +1,13 @@
+2000-05-16  Gerd Moellmann  <gerd@gnu.org>
+
+       * filelock.c (get_boot_time): To obtain an 8 char file name, which
+       is needed on mescaline, use a 2 char prefix, and call
+       make_temp_name with second arg non-zero.
+
+       * fileio.c (make_temp_name): New function, extracted from
+       Fmake_temp_name.
+       (Fmake_temp_name): Use it.
+
 2000-05-15  Eli Zaretskii  <eliz@is.elta.co.il>
 
        * window.c (coordinates_in_window): Subtract 1 when computing
index 0fcad5d99a272f643fdcebfd52b29200c62c0e95..df63786b3d175c1f63498487c6d5bba2cb069159 100644 (file)
@@ -839,22 +839,29 @@ static char make_temp_name_tbl[64] =
   'w','x','y','z','0','1','2','3',
   '4','5','6','7','8','9','-','_'
 };
+
 static unsigned make_temp_name_count, make_temp_name_count_initialized_p;
 
-DEFUN ("make-temp-name", Fmake_temp_name, Smake_temp_name, 1, 1, 0,
-  "Generate temporary file name (string) starting with PREFIX (a string).\n\
-The Emacs process number forms part of the result,\n\
-so there is no danger of generating a name being used by another process.\n\
-\n\
-In addition, this function makes an attempt to choose a name\n\
-which has no existing file.  To make this work,\n\
-PREFIX should be an absolute file name.\n\
-\n\
-There is a race condition between calling `make-temp-name' and creating the\n\
-file which opens all kinds of security holes.  For that reason, you should\n\
-probably use `make-temp-file' instead.")
-  (prefix)
+/* Value is a temporary file name starting with PREFIX, a string.
+   
+   The Emacs process number forms part of the result, so there is
+   no danger of generating a name being used by another process.
+   In addition, this function makes an attempt to choose a name
+   which has no existing file.  To make this work, PREFIX should be
+   an absolute file name.
+   
+   BASE64_P non-zero means add the pid as 3 characters in base64
+   encoding.  In this case, 6 characters will be added to PREFIX to
+   form the file name.  Otherwise, if Emacs is running on a system
+   with long file names, add the pid as a decimal number.
+
+   This function signals an error if no unique file name could be
+   generated.  */
+
+Lisp_Object
+make_temp_name (prefix, base64_p)
      Lisp_Object prefix;
+     int base64_p;
 {
   Lisp_Object val;
   int len;
@@ -862,7 +869,7 @@ probably use `make-temp-file' instead.")
   unsigned char *p, *data;
   char pidbuf[20];
   int pidlen;
-
+     
   CHECK_STRING (prefix, 0);
 
   /* VAL is created by adding 6 characters to PREFIX.  The first
@@ -872,16 +879,26 @@ probably use `make-temp-file' instead.")
 
   pid = (int) getpid ();
 
+  if (base64_p)
+    {
+      pidbuf[0] = make_temp_name_tbl[pid & 63], pid >>= 6;
+      pidbuf[1] = make_temp_name_tbl[pid & 63], pid >>= 6;
+      pidbuf[2] = make_temp_name_tbl[pid & 63], pid >>= 6;
+      pidlen = 3;
+    }
+  else
+    {
 #ifdef HAVE_LONG_FILE_NAMES
-  sprintf (pidbuf, "%d", pid);
-  pidlen = strlen (pidbuf);
+      sprintf (pidbuf, "%d", pid);
+      pidlen = strlen (pidbuf);
 #else
-  pidbuf[0] = make_temp_name_tbl[pid & 63], pid >>= 6;
-  pidbuf[1] = make_temp_name_tbl[pid & 63], pid >>= 6;
-  pidbuf[2] = make_temp_name_tbl[pid & 63], pid >>= 6;
-  pidlen = 3;
+      pidbuf[0] = make_temp_name_tbl[pid & 63], pid >>= 6;
+      pidbuf[1] = make_temp_name_tbl[pid & 63], pid >>= 6;
+      pidbuf[2] = make_temp_name_tbl[pid & 63], pid >>= 6;
+      pidlen = 3;
 #endif
-
+    }
+  
   len = XSTRING (prefix)->size;
   val = make_uninit_string (len + 3 + pidlen);
   data = XSTRING (val)->data;
@@ -944,6 +961,26 @@ probably use `make-temp-file' instead.")
   return Qnil;
 }
 
+
+DEFUN ("make-temp-name", Fmake_temp_name, Smake_temp_name, 1, 1, 0,
+  "Generate temporary file name (string) starting with PREFIX (a string).\n\
+The Emacs process number forms part of the result,\n\
+so there is no danger of generating a name being used by another process.\n\
+\n\
+In addition, this function makes an attempt to choose a name\n\
+which has no existing file.  To make this work,\n\
+PREFIX should be an absolute file name.\n\
+\n\
+There is a race condition between calling `make-temp-name' and creating the\n\
+file which opens all kinds of security holes.  For that reason, you should\n\
+probably use `make-temp-file' instead.")
+  (prefix)
+     Lisp_Object prefix;
+{
+  return make_temp_name (prefix, 0);
+}
+
+
 \f
 DEFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0,
   "Convert filename NAME to absolute, and canonicalize it.\n\