Home | History | Annotate | Download | only in dbus
      1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
      2 /* dbus-pipe.c pipe implementation (internal to D-Bus implementation)
      3  *
      4  * Copyright (C) 2002, 2003, 2006  Red Hat, Inc.
      5  * Copyright (C) 2003 CodeFactory AB
      6  *
      7  * Licensed under the Academic Free License version 2.1
      8  *
      9  * This program is free software; you can redistribute it and/or modify
     10  * it under the terms of the GNU General Public License as published by
     11  * the Free Software Foundation; either version 2 of the License, or
     12  * (at your option) any later version.
     13  *
     14  * This program is distributed in the hope that it will be useful,
     15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17  * GNU General Public License for more details.
     18  *
     19  * You should have received a copy of the GNU General Public License
     20  * along with this program; if not, write to the Free Software
     21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
     22  *
     23  */
     24 
     25 #include <config.h>
     26 #include "dbus-pipe.h"
     27 
     28 /*
     29  * init a pipe instance.
     30  *
     31  * @param pipe the pipe
     32  * @param fd the file descriptor to init from
     33  */
     34 void
     35 _dbus_pipe_init (DBusPipe *pipe,
     36                  intptr_t  fd)
     37 {
     38   pipe->fd_or_handle = fd;
     39 }
     40 
     41 /**
     42  * init a pipe with stdout
     43  *
     44  * @param pipe the pipe
     45  */
     46 void
     47 _dbus_pipe_init_stdout (DBusPipe *pipe)
     48 {
     49   _dbus_pipe_init (pipe, 1);
     50 }
     51 
     52 /**
     53  * check if a pipe is valid; pipes can be set invalid, similar to
     54  * a -1 file descriptor.
     55  *
     56  * @param pipe the pipe instance
     57  * @returns #FALSE if pipe is not valid
     58  */
     59 dbus_bool_t
     60 _dbus_pipe_is_valid(DBusPipe *pipe)
     61 {
     62   return pipe->fd_or_handle >= 0;
     63 }
     64 
     65 /**
     66  * Check if a pipe is stdout or stderr.
     67  *
     68  * @param pipe the pipe instance
     69  * @returns #TRUE if pipe is one of the standard out/err channels
     70  */
     71 dbus_bool_t
     72 _dbus_pipe_is_stdout_or_stderr (DBusPipe *pipe)
     73 {
     74   return pipe->fd_or_handle == 1 || pipe->fd_or_handle == 2;
     75 }
     76 
     77 /**
     78  * Initializes a pipe to an invalid value.
     79  * @param pipe the pipe
     80  */
     81 void
     82 _dbus_pipe_invalidate (DBusPipe *pipe)
     83 {
     84   pipe->fd_or_handle = -1;
     85 }
     86