]> git.eshelyaron.com Git - emacs.git/commitdiff
* filelock.c: Fix unlikely file descriptor leaks.
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 18 Jul 2013 10:24:26 +0000 (03:24 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 18 Jul 2013 10:24:26 +0000 (03:24 -0700)
(get_boot_time_1): Rework to avoid using emacs_open.
This doesn't actually fix a leak, but is better anyway.
(read_lock_data): Use read, not emacs_read.

src/ChangeLog
src/filelock.c

index cdc56419f6355f3f2c5f1a5c4aca6065133948c8..8a1c163998ba295c644ca6909355325cb7e83c43 100644 (file)
@@ -1,5 +1,10 @@
 2013-07-18  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * filelock.c: Fix unlikely file descriptor leaks.
+       (get_boot_time_1): Rework to avoid using emacs_open.
+       This doesn't actually fix a leak, but is better anyway.
+       (read_lock_data): Use read, not emacs_read.
+
        * doc.c: Fix minor memory and file descriptor leaks.
        * doc.c (get_doc_string): Fix memory leak when doc file absent.
        (get_doc_string, Fsnarf_documentation):
index 4982dd3de130df25a7d6bd74b82f6c6b79ed9038..fefd14b3a92d5a1e5bd7d19048c3b19ec17db764 100644 (file)
@@ -257,18 +257,14 @@ void
 get_boot_time_1 (const char *filename, bool newest)
 {
   struct utmp ut, *utp;
-  int desc;
 
   if (filename)
     {
       /* On some versions of IRIX, opening a nonexistent file name
         is likely to crash in the utmp routines.  */
-      desc = emacs_open (filename, O_RDONLY, 0);
-      if (desc < 0)
+      if (faccessat (AT_FDCWD, filename, R_OK, AT_EACCESS) != 0)
        return;
 
-      emacs_close (desc);
-
       utmpname (filename);
     }
 
@@ -512,7 +508,8 @@ read_lock_data (char *lfname, char lfinfo[MAX_LFINFO + 1])
       int fd = emacs_open (lfname, O_RDONLY | O_BINARY | O_NOFOLLOW, 0);
       if (0 <= fd)
        {
-         ptrdiff_t read_bytes = emacs_read (fd, lfinfo, MAX_LFINFO + 1);
+         /* Use read, not emacs_read, since FD isn't unwind-protected.  */
+         ptrdiff_t read_bytes = read (fd, lfinfo, MAX_LFINFO + 1);
          int read_errno = errno;
          if (emacs_close (fd) != 0)
            return -1;