/* This is part of libio/iostream, providing -*- C++ -*- input/output. Copyright (C) 1993 Free Software Foundation This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this library; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, if you link this library with files compiled with a GNU compiler to produce an executable, this does not cause the resulting executable to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ /* Written by Per Bothner (bothner@cygnus.com). */ #ifdef __GNUG__ #pragma implementation #endif #include "libioP.h" #include #include ipfstream::ipfstream(const char *name, int mode, int prot) { const char* p; // Look for '| command' (as used by ftp). for (p = name; *p == ' ' || *p == '\t'; p++) ; if (*p == '|') { procbuf *pbuf = new procbuf(); init(pbuf); if (!pbuf->open(p+1, mode)) set(ios::badbit); return; } // Look for 'command |' while (*p) p++; // Point to last while (p[-1] == ' ' || p[-1] == '\t' || p[-1] == '\n') p--; if (p[-1] == '|') { // Must remove the final '|'. p--; #if !defined (__GNUC__) || defined (__STRICT_ANSI__) char *command = new char[p-name+1]; #else char command[p-name+1]; #endif memcpy(command, name, p-name); command[p-name] = '\0'; procbuf *pbuf = new procbuf(); if (pbuf->open(command, mode)) set(ios::badbit); #if !defined (__GNUC__) || defined (__STRICT_ANSI__) delete command; #endif return; } init(new filebuf()); if (!rdbuf()->open(name, mode, prot)) set(ios::badbit); } opfstream::opfstream(const char *name, int mode, int prot) { const char *p; // Look for '| command'. for (p = name; *p == ' ' || *p == '\t'; p++) ; if (*p == '|') { procbuf *pbuf = new procbuf(); init(pbuf); if (!pbuf->open(p+1, mode)) set(ios::badbit); } else { init(new filebuf()); if (!rdbuf()->open(name, mode, prot)) set(ios::badbit); } } 2015-12-08Replace DIOCGPART -> DIOCGPARTINFO which returns the data needed instead ofchristos 2011-07-08avoid some uninitialised variable warnings.mrg 2011-02-07Third argument of MODULE() is typically a string literal.jakllsch 2011-01-28Add support for building pud as module. Do it in a same way how putter ishaad 2009-12-22Handle DIOCGPART in-kernel because a userspace server doesn't havepooka 2009-12-22fix pastopooka 2009-03-18Ansify function definitions w/o arguments. Generated with sed.cegger 2009-01-20Change major()/minor() to return 32-bit types again, calleddrochner 2007-11-28one more lock to destroypooka 2007-11-28* version the registration interfacepooka 2007-11-22PUD_CONF_IOCTL is a goner. Noticed by dillo.pooka 2007-11-22Support bdev/cdev ioctl.pooka 2007-11-21Add support for block devices.pooka 2007-11-21mmap should return -1 on error. Also, shuffle functions around topooka 2007-11-21silence, might be used uninitialized warning!dogcow 2007-11-20Add initial support for userspace block/char device drivers. Thispooka