LCOV - code coverage report
Current view: top level - lib/tevent - tevent_util.c (source / functions) Hit Total Coverage
Test: coverage report for master 2f515e9b Lines: 14 17 82.4 %
Date: 2024-04-21 15:09:00 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /*
       2             :    Unix SMB/CIFS implementation.
       3             : 
       4             :    Copyright (C) Andrew Tridgell 2005
       5             :    Copyright (C) Jelmer Vernooij 2005
       6             : 
       7             :      ** NOTE! The following LGPL license applies to the tevent
       8             :      ** library. This does NOT imply that all of Samba is released
       9             :      ** under the LGPL
      10             : 
      11             :    This library is free software; you can redistribute it and/or
      12             :    modify it under the terms of the GNU Lesser General Public
      13             :    License as published by the Free Software Foundation; either
      14             :    version 3 of the License, or (at your option) any later version.
      15             : 
      16             :    This library is distributed in the hope that it will be useful,
      17             :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      18             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      19             :    Lesser General Public License for more details.
      20             : 
      21             :    You should have received a copy of the GNU Lesser General Public
      22             :    License along with this library; if not, see <http://www.gnu.org/licenses/>.
      23             : */
      24             : 
      25             : #include "replace.h"
      26             : #include "talloc.h"
      27             : #include "tevent.h"
      28             : #include "tevent_internal.h"
      29             : #include "tevent_util.h"
      30             : #include <fcntl.h>
      31             : 
      32             : /**
      33             :  Set a fd into blocking/nonblocking mode. Uses POSIX O_NONBLOCK if available,
      34             :  else
      35             :   if SYSV use O_NDELAY
      36             :   if BSD use FNDELAY
      37             : **/
      38             : 
      39         408 : int ev_set_blocking(int fd, bool set)
      40             : {
      41         408 :         int val;
      42             : #ifdef O_NONBLOCK
      43             : #define FLAG_TO_SET O_NONBLOCK
      44             : #else
      45             : #ifdef SYSV
      46             : #define FLAG_TO_SET O_NDELAY
      47             : #else /* BSD */
      48             : #define FLAG_TO_SET FNDELAY
      49             : #endif
      50             : #endif
      51             : 
      52         408 :         if((val = fcntl(fd, F_GETFL, 0)) == -1)
      53           0 :                 return -1;
      54         408 :         if(set) /* Turn blocking on - ie. clear nonblock flag */
      55           0 :                 val &= ~FLAG_TO_SET;
      56             :         else
      57         408 :                 val |= FLAG_TO_SET;
      58         408 :         return fcntl( fd, F_SETFL, val);
      59             : #undef FLAG_TO_SET
      60             : }
      61             : 
      62         406 : bool ev_set_close_on_exec(int fd)
      63             : {
      64             : #ifdef FD_CLOEXEC
      65         406 :         int val;
      66             : 
      67         406 :         val = fcntl(fd, F_GETFD, 0);
      68         406 :         if (val >= 0) {
      69         408 :                 val |= FD_CLOEXEC;
      70         408 :                 val = fcntl(fd, F_SETFD, val);
      71         408 :                 if (val != -1) {
      72         408 :                         return true;
      73             :                 }
      74             :         }
      75             : #endif
      76           0 :         return false;
      77             : }

Generated by: LCOV version 1.14