Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37401273
en ru br
Репозитории ALT
S:0.2-alt10
5.1: 0.2-alt9
4.1: 0.2-alt7
4.0: 0.2-alt7
+updates:0.2-alt7
3.0: 0.2-alt4
www.altlinux.org/Changes

Группа :: Работа с текстами
Пакет: ed

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: ed-0.2-alt-tmp.patch
Скачать


--- ed-0.2.orig/buf.c	1994-11-19 15:37:59 +0300
+++ ed-0.2/buf.c	2002-09-01 16:30:02 +0400
@@ -54,7 +54,7 @@
       sfseek = lp->seek;
       if (fseek (sfp, sfseek, SEEK_SET) < 0)
 	{
-	  fprintf (stderr, "%s\n", strerror (errno));
+	  error (0, errno, "fseek");
 	  sprintf (errmsg, "Cannot seek temp file");
 	  return NULL;
 	}
@@ -63,7 +63,7 @@
   REALLOC (sfbuf, sfbufsz, len + 1, NULL);
   if ((ct = fread (sfbuf, sizeof (char), len, sfp)) < 0 || ct != len)
     {
-      fprintf (stderr, "%s\n", strerror (errno));
+      error (0, errno, "fread");
       sprintf (errmsg, "Cannot read temp file");
       return NULL;
     }
@@ -85,7 +85,7 @@
 
   if ((lp = (line_t *) malloc (sizeof (line_t))) == NULL)
     {
-      fprintf (stderr, "%s\n", strerror (errno));
+      error (0, errno, "malloc");
       sprintf (errmsg, "Out of memory");
       return NULL;
     }
@@ -103,7 +103,7 @@
     {
       if (fseek (sfp, 0L, SEEK_END) < 0)
 	{
-	  fprintf (stderr, "%s\n", strerror (errno));
+	  error (0, errno, "fseek");
 	  sprintf (errmsg, "Cannot seek temp file");
 	  return NULL;
 	}
@@ -114,7 +114,7 @@
   if ((ct = fwrite (cs, sizeof (char), len, sfp)) < 0 || ct != len)
     {
       sfseek = -1;
-      fprintf (stderr, "%s\n", strerror (errno));
+      error (0, errno, "fwrite");
       sprintf (errmsg, "Cannot write temp file");
       return NULL;
     }
@@ -194,26 +194,39 @@
 
 extern int newline_added;
 
-char sfn[15] = "";		/* scratch file name */
+static char *sfn;		/* scratch file name */
 
 /* open_sbuf: open scratch file */
 int
 open_sbuf ()
 {
-  char *mktemp ();
-  int u;
+  int fd;
 
   isbinary = newline_added = 0;
-  u = umask(077);
-  strcpy (sfn, "/tmp/ed.XXXXXX");
-  if (mktemp (sfn) == NULL || (sfp = fopen (sfn, "w+")) == NULL)
+  if (asprintf (&sfn, "%s/ed.XXXXXX", getenv ("TMPDIR") ?: P_tmpdir) < 0)
     {
-      fprintf (stderr, "%s: %s\n", sfn, strerror (errno));
+      error (0, errno, "asprintf");
+      sprintf (errmsg, "Cannot make temp file name");
+      sfn = 0;
+      return ERR;
+    }
+  if ((fd = mkstemp (sfn)) < 0)
+    {
+      error (0, errno, "%s", sfn);
       sprintf (errmsg, "Cannot open temp file");
-      umask(u);
+      free (sfn);
+      sfn = 0;
+      return ERR;
+    }
+  if (!(sfp = fdopen (fd, "w+")))
+    {
+      error (0, errno, "%s", sfn);
+      sprintf (errmsg, "Cannot open temp file");
+      close (fd);
+      free (sfn);
+      sfn = 0;
       return ERR;
     }
-  umask(u);
   return 0;
 }
 
@@ -226,12 +239,18 @@
     {
       if (fclose (sfp) < 0)
 	{
-	  fprintf (stderr, "%s: %s\n", sfn, strerror (errno));
+	  error (0, errno, "%s", sfn);
 	  sprintf (errmsg, "Cannot close temp file");
+	  free (sfn);
+	  sfn = 0;
+	  sfp = 0;
 	  return ERR;
 	}
-      sfp = NULL;
-      unlink (sfn);
+      sfp = 0;
+      if (unlink (sfn) < 0)
+	error (0, errno, "unlink: %s", sfn);
+      free (sfn);
+      sfn = 0;
     }
   sfseek = seek_write = 0;
   return 0;
@@ -246,7 +265,10 @@
   if (sfp)
     {
       fclose (sfp);
+      sfp = 0;
       unlink (sfn);
+      free (sfn);
+      sfn = 0;
     }
   exit (n);
 }
@@ -276,7 +298,7 @@
   if ((errmsg = (char *) malloc (ERRSZ)) == NULL ||
       (old_filename = (char *) malloc (PATH_MAX + 1)) == NULL)
     {
-      fprintf (stderr, "%s\n", strerror (errno));
+      error (0, errno, "malloc");
       quit (2);
     }
   old_filename[0] = '\0';
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin