18a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 28a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker/* dbus-pipe-unix.c unix related pipe implementation 38a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * 48a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * Copyright (C) 2002, 2003, 2006 Red Hat, Inc. 58a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * Copyright (C) 2003 CodeFactory AB 68a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * 78a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * Licensed under the Academic Free License version 2.1 88a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * 98a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * This program is free software; you can redistribute it and/or modify 108a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * it under the terms of the GNU General Public License as published by 118a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * the Free Software Foundation; either version 2 of the License, or 128a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * (at your option) any later version. 138a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * 148a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * This program is distributed in the hope that it will be useful, 158a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * but WITHOUT ANY WARRANTY; without even the implied warranty of 168a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 178a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * GNU General Public License for more details. 188a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * 198a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * You should have received a copy of the GNU General Public License 208a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * along with this program; if not, write to the Free Software 218a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 228a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * 238a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker */ 248a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker 25dbecdeabb20e0ce11121819c63373f0afba57c58Marcus Brinkmann#include <config.h> 268a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker#include "dbus-protocol.h" 278a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker#include "dbus-string.h" 288a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker#include "dbus-internals.h" 298a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker#include "dbus-pipe.h" 3068fb041ac3accaf12462d2c5f98992d1d28e4823Ralf Habacker#include "dbus-sysdeps-unix.h" 318a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker 3268fb041ac3accaf12462d2c5f98992d1d28e4823Ralf Habacker#include <errno.h> 338a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker 348a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker/** 358a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * write data to a pipe. 368a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * 378a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * @param pipe the pipe instance 388a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * @param buffer the buffer to write data from 398a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * @param start the first byte in the buffer to write 408a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * @param len the number of bytes to try to write 418a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * @param error error return 428a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * @returns the number of bytes written or -1 on error 438a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker */ 448a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habackerint 458a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker_dbus_pipe_write (DBusPipe *pipe, 468a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker const DBusString *buffer, 478a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker int start, 488a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker int len, 498a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker DBusError *error) 508a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker{ 518a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker int written; 528a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker 538a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker written = _dbus_write (pipe->fd_or_handle, buffer, start, len); 548a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker if (written < 0) 558a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker { 568a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker dbus_set_error (error, DBUS_ERROR_FAILED, 578a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker "Writing to pipe: %s\n", 588a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker _dbus_strerror (errno)); 598a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker } 608a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker return written; 618a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker} 628a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker 638a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker/** 648a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * close a pipe. 658a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * 668a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * @param pipe the pipe instance 678a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * @param error return location for an error 688a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker * @returns #FALSE if error is set 698a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker */ 708a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habackerint 718a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker_dbus_pipe_close (DBusPipe *pipe, 728a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker DBusError *error) 738a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker{ 748a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker if (_dbus_close (pipe->fd_or_handle, error) < 0) 758a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker { 768a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker return -1; 778a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker } 788a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker else 798a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker { 808a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker _dbus_pipe_invalidate (pipe); 818a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker return 0; 828a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker } 838a4429ff863d0b869b3f924e78c23a9922ad92b0Ralf Habacker} 84