Blame lib/rmt.h

Packit Service 9285f1
/* Definitions for communicating with a remote tape drive.
Packit Service 9285f1
Packit Service 9285f1
   Copyright (C) 1988, 1992, 1996, 1997, 2001, 2003, 2004, 2007 Free
Packit Service 9285f1
   Software Foundation, Inc.
Packit Service 9285f1
Packit Service 9285f1
   This program is free software; you can redistribute it and/or modify
Packit Service 9285f1
   it under the terms of the GNU General Public License as published by
Packit Service 9285f1
   the Free Software Foundation; either version 3, or (at your option)
Packit Service 9285f1
   any later version.
Packit Service 9285f1
Packit Service 9285f1
   This program is distributed in the hope that it will be useful,
Packit Service 9285f1
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 9285f1
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 9285f1
   GNU General Public License for more details.
Packit Service 9285f1
Packit Service 9285f1
   You should have received a copy of the GNU General Public License
Packit Service 9285f1
   along with this program; if not, write to the Free Software Foundation,
Packit Service 9285f1
   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
Packit Service 9285f1
Packit Service 9285f1
extern char const *rmt_command;
Packit Service 9285f1
extern char const *rmt_dev_name__;
Packit Service 9285f1
Packit Service 9285f1
int rmt_open__ (const char *, int, int, const char *);
Packit Service 9285f1
int rmt_close__ (int);
Packit Service 9285f1
size_t rmt_read__ (int, char *, size_t);
Packit Service 9285f1
size_t rmt_write__ (int, char *, size_t);
Packit Service 9285f1
off_t rmt_lseek__ (int, off_t, int);
Packit Service 9285f1
int rmt_ioctl__ (int, int, char *);
Packit Service 9285f1
Packit Service 9285f1
extern bool force_local_option;
Packit Service 9285f1
Packit Service 9285f1
/* A filename is remote if it contains a colon not preceded by a slash,
Packit Service 9285f1
   to take care of `/:/' which is a shorthand for `/.../<CELL-NAME>/fs'
Packit Service 9285f1
   on machines running OSF's Distributing Computing Environment (DCE) and
Packit Service 9285f1
   Distributed File System (DFS).  However, when --force-local, a
Packit Service 9285f1
   filename is never remote.  */
Packit Service 9285f1
Packit Service 9285f1
#define _remdev(dev_name) \
Packit Service 9285f1
  (!force_local_option && (rmt_dev_name__ = strchr (dev_name, ':')) \
Packit Service 9285f1
   && rmt_dev_name__ > (dev_name) \
Packit Service 9285f1
   && ! memchr (dev_name, '/', rmt_dev_name__ - (dev_name)))
Packit Service 9285f1
Packit Service 9285f1
#define _isrmt(fd) \
Packit Service 9285f1
  ((fd) >= __REM_BIAS)
Packit Service 9285f1
Packit Service 9285f1
#define __REM_BIAS (1 << 30)
Packit Service 9285f1
Packit Service 9285f1
#ifndef O_CREAT
Packit Service 9285f1
# define O_CREAT 01000
Packit Service 9285f1
#endif
Packit Service 9285f1
Packit Service 9285f1
#define rmtopen(dev_name, oflag, mode, command) \
Packit Service 9285f1
  (_remdev (dev_name) ? rmt_open__ (dev_name, oflag, __REM_BIAS, command) \
Packit Service 9285f1
   : open (dev_name, oflag, mode))
Packit Service 9285f1
Packit Service 9285f1
#define rmtaccess(dev_name, amode) \
Packit Service 9285f1
  (_remdev (dev_name) ? 0 : access (dev_name, amode))
Packit Service 9285f1
Packit Service 9285f1
#define rmtstat(dev_name, buffer) \
Packit Service 9285f1
  (_remdev (dev_name) ? (errno = EOPNOTSUPP), -1 : stat (dev_name, buffer))
Packit Service 9285f1
Packit Service 9285f1
#define rmtcreat(dev_name, mode, command) \
Packit Service 9285f1
   (_remdev (dev_name) \
Packit Service 9285f1
    ? rmt_open__ (dev_name, O_CREAT | O_WRONLY, __REM_BIAS, command) \
Packit Service 9285f1
    : creat (dev_name, mode))
Packit Service 9285f1
Packit Service 9285f1
#define rmtlstat(dev_name, muffer) \
Packit Service 9285f1
  (_remdev (dev_name) ? (errno = EOPNOTSUPP), -1 : lstat (dev_name, buffer))
Packit Service 9285f1
Packit Service 9285f1
#define rmtread(fd, buffer, length) \
Packit Service 9285f1
  (_isrmt (fd) ? rmt_read__ (fd - __REM_BIAS, buffer, length) \
Packit Service 9285f1
   : safe_read (fd, buffer, length))
Packit Service 9285f1
Packit Service 9285f1
#define rmtwrite(fd, buffer, length) \
Packit Service 9285f1
  (_isrmt (fd) ? rmt_write__ (fd - __REM_BIAS, buffer, length) \
Packit Service 9285f1
   : full_write (fd, buffer, length))
Packit Service 9285f1
Packit Service 9285f1
#define rmtlseek(fd, offset, where) \
Packit Service 9285f1
  (_isrmt (fd) ? rmt_lseek__ (fd - __REM_BIAS, offset, where) \
Packit Service 9285f1
   : lseek (fd, offset, where))
Packit Service 9285f1
Packit Service 9285f1
#define rmtclose(fd) \
Packit Service 9285f1
  (_isrmt (fd) ? rmt_close__ (fd - __REM_BIAS) : close (fd))
Packit Service 9285f1
Packit Service 9285f1
#define rmtioctl(fd, request, argument) \
Packit Service 9285f1
  (_isrmt (fd) ? rmt_ioctl__ (fd - __REM_BIAS, request, argument) \
Packit Service 9285f1
   : ioctl (fd, request, argument))
Packit Service 9285f1
Packit Service 9285f1
#define rmtdup(fd) \
Packit Service 9285f1
  (_isrmt (fd) ? (errno = EOPNOTSUPP), -1 : dup (fd))
Packit Service 9285f1
Packit Service 9285f1
#define rmtfstat(fd, buffer) \
Packit Service 9285f1
  (_isrmt (fd) ? (errno = EOPNOTSUPP), -1 : fstat (fd, buffer))
Packit Service 9285f1
Packit Service 9285f1
#define rmtfcntl(cd, command, argument) \
Packit Service 9285f1
  (_isrmt (fd) ? (errno = EOPNOTSUPP), -1 : fcntl (fd, command, argument))
Packit Service 9285f1
Packit Service 9285f1
#define rmtisatty(fd) \
Packit Service 9285f1
  (_isrmt (fd) ? 0 : isatty (fd))