LCOV - code coverage report
Current view: top level - common - fd.h (source / functions) Hit Total Coverage
Test: Test Coverage for xapian-core 954b5873a738 Lines: 13 13 100.0 %
Date: 2019-06-30 05:20:33 Functions: 6 6 100.0 %
Branches: 3 4 75.0 %

           Branch data     Line data    Source code
       1                 :            : /** @file fd.h
       2                 :            :  * @brief Wrapper class around a file descriptor to avoid leaks
       3                 :            :  */
       4                 :            : /* Copyright (C) 2011,2012 Olly Betts
       5                 :            :  *
       6                 :            :  * Permission is hereby granted, free of charge, to any person obtaining a copy
       7                 :            :  * of this software and associated documentation files (the "Software"), to
       8                 :            :  * deal in the Software without restriction, including without limitation the
       9                 :            :  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
      10                 :            :  * sell copies of the Software, and to permit persons to whom the Software is
      11                 :            :  * furnished to do so, subject to the following conditions:
      12                 :            :  *
      13                 :            :  * The above copyright notice and this permission notice shall be included in
      14                 :            :  * all copies or substantial portions of the Software.
      15                 :            :  *
      16                 :            :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      17                 :            :  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      18                 :            :  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      19                 :            :  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      20                 :            :  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
      21                 :            :  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
      22                 :            :  * IN THE SOFTWARE.
      23                 :            :  */
      24                 :            : 
      25                 :            : #ifndef XAPIAN_INCLUDED_FD_H
      26                 :            : #define XAPIAN_INCLUDED_FD_H
      27                 :            : 
      28                 :            : #include "safeunistd.h"
      29                 :            : 
      30                 :            : class FD {
      31                 :            :     int fd;
      32                 :            : 
      33                 :            :     /// Prevent copying.
      34                 :            :     FD(const FD &);
      35                 :            : 
      36                 :            :     /// Prevent assignment between FD objects.
      37                 :            :     void operator=(const FD &);
      38                 :            : 
      39                 :            :   public:
      40                 :            :     FD() : fd(-1) { }
      41                 :            : 
      42                 :       3964 :     FD(int fd_) : fd(fd_) { }
      43                 :            : 
      44         [ +  + ]:       7928 :     ~FD() { if (fd != -1) ::close(fd); }
      45                 :            : 
      46                 :       3313 :     FD & operator=(int fd_) {
      47         [ -  + ]:       3313 :         if (fd != -1) ::close(fd);
      48                 :       3313 :         fd = fd_;
      49                 :       3313 :         return *this;
      50                 :            :     }
      51                 :            : 
      52                 :       2388 :     operator int() const { return fd; }
      53                 :            : 
      54                 :         47 :     int close() {
      55                 :            :         // Don't check for -1 here, so that close(FD) sets errno as close(int)
      56                 :            :         // would.
      57                 :         47 :         int fd_to_close = fd;
      58                 :         47 :         fd = -1;
      59                 :         47 :         return ::close(fd_to_close);
      60                 :            :     }
      61                 :            : };
      62                 :            : 
      63                 :         47 : inline int close(FD & fd) {
      64                 :         47 :     return fd.close();
      65                 :            : }
      66                 :            : 
      67                 :            : #endif

Generated by: LCOV version 1.11