root/lib/tevent/tevent_fd.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. tevent_common_fd_destructor
  2. tevent_common_add_fd
  3. tevent_common_fd_get_flags
  4. tevent_common_fd_set_flags
  5. tevent_common_fd_set_close_fn

   1 /*
   2    Unix SMB/CIFS implementation.
   3 
   4    common events code for fd events
   5 
   6    Copyright (C) Stefan Metzmacher 2009
   7 
   8      ** NOTE! The following LGPL license applies to the tevent
   9      ** library. This does NOT imply that all of Samba is released
  10      ** under the LGPL
  11 
  12    This library is free software; you can redistribute it and/or
  13    modify it under the terms of the GNU Lesser General Public
  14    License as published by the Free Software Foundation; either
  15    version 3 of the License, or (at your option) any later version.
  16 
  17    This library is distributed in the hope that it will be useful,
  18    but WITHOUT ANY WARRANTY; without even the implied warranty of
  19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  20    Lesser General Public License for more details.
  21 
  22    You should have received a copy of the GNU Lesser General Public
  23    License along with this library; if not, see <http://www.gnu.org/licenses/>.
  24 */
  25 
  26 #include "replace.h"
  27 #include "tevent.h"
  28 #include "tevent_internal.h"
  29 #include "tevent_util.h"
  30 
  31 int tevent_common_fd_destructor(struct tevent_fd *fde)
     /* [<][>][^][v][top][bottom][index][help] */
  32 {
  33         if (fde->event_ctx) {
  34                 DLIST_REMOVE(fde->event_ctx->fd_events, fde);
  35         }
  36 
  37         if (fde->close_fn) {
  38                 fde->close_fn(fde->event_ctx, fde, fde->fd, fde->private_data);
  39                 fde->fd = -1;
  40         }
  41 
  42         return 0;
  43 }
  44 
  45 struct tevent_fd *tevent_common_add_fd(struct tevent_context *ev, TALLOC_CTX *mem_ctx,
     /* [<][>][^][v][top][bottom][index][help] */
  46                                        int fd, uint16_t flags,
  47                                        tevent_fd_handler_t handler,
  48                                        void *private_data,
  49                                        const char *handler_name,
  50                                        const char *location)
  51 {
  52         struct tevent_fd *fde;
  53 
  54         fde = talloc(mem_ctx?mem_ctx:ev, struct tevent_fd);
  55         if (!fde) return NULL;
  56 
  57         fde->event_ctx          = ev;
  58         fde->fd                 = fd;
  59         fde->flags              = flags;
  60         fde->handler            = handler;
  61         fde->close_fn           = NULL;
  62         fde->private_data       = private_data;
  63         fde->handler_name       = handler_name;
  64         fde->location           = location;
  65         fde->additional_flags   = 0;
  66         fde->additional_data    = NULL;
  67 
  68         DLIST_ADD(ev->fd_events, fde);
  69 
  70         talloc_set_destructor(fde, tevent_common_fd_destructor);
  71 
  72         return fde;
  73 }
  74 uint16_t tevent_common_fd_get_flags(struct tevent_fd *fde)
     /* [<][>][^][v][top][bottom][index][help] */
  75 {
  76         return fde->flags;
  77 }
  78 
  79 void tevent_common_fd_set_flags(struct tevent_fd *fde, uint16_t flags)
     /* [<][>][^][v][top][bottom][index][help] */
  80 {
  81         if (fde->flags == flags) return;
  82         fde->flags = flags;
  83 }
  84 
  85 void tevent_common_fd_set_close_fn(struct tevent_fd *fde,
     /* [<][>][^][v][top][bottom][index][help] */
  86                                    tevent_fd_close_fn_t close_fn)
  87 {
  88         fde->close_fn = close_fn;
  89 }

/* [<][>][^][v][top][bottom][index][help] */