--- 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';