fhandler_*::dump functions throughout. * fhandler.h (fhandler_dev_mem::close): Remove pass-through function in favor of virtual method. (handler_dev_raw::close): Ditto. (fhandler_dev_clipboard::fixup_after_exec): New method. * fhandler_dev_mem.cc (fhandler_dev_mem::close): Eliminate pass through * fhandler_dev_raw.cc (fhandler_dev_raw::close): Ditto. * fhandler_clipboard.cc (fhandler_dev_clipboard::close): Don't go to extra effort when execing. (fhandler_dev_clipboard::fixup_after_exec): New function. * fhandler_console.cc (fhandler_console::close): Don't do "extra stuff" when we know we're execing. * fhandler_disk_file.cc (fhandler_disk_file::close): Ditto. * fhandler_dsp.cc (fhandler_dev_dsp::close): Ditto. * fhandler_fifo.cc (fhandler_fifo.cc::close): Ditto. function in favor of base function. * fhandler_random.cc (fhandler_dev_random::close): Ditto. * fhandler_registry.cc (fhandler_registry::close): Ditto. * fhandler_tty.cc (fhandler_tty_slave::close): Ditto. * fhandler_virtual.cc (fhandler_virtual::close): Ditto. * pinfo.cc (proc_waiter): Remove unneeded hExeced declaration. * sigproc.cc: Ditto. * winsup.h (hExeced): Define here. * fhandler_virtual.cc (fhandler_virtual::fixup_after_exec): Just call close() to reinitialize things to known state.
		
			
				
	
	
		
			148 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* mtinfo.h: Defininitions for the Cygwin tape driver class.
 | 
						|
 | 
						|
   Copyright 2004 Red Hat, Inc.
 | 
						|
 | 
						|
This file is part of Cygwin.
 | 
						|
 | 
						|
This software is a copyrighted work licensed under the terms of the
 | 
						|
Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
 | 
						|
details. */
 | 
						|
 | 
						|
#define MTINFO_MAGIC		0x179b2af0
 | 
						|
#define MTINFO_VERSION		2
 | 
						|
 | 
						|
/* Maximum number of supported partitions per drive. */
 | 
						|
#define MAX_PARTITION_NUM	64
 | 
						|
/* Maximum number of supported drives. */
 | 
						|
#define MAX_DRIVE_NUM		8
 | 
						|
 | 
						|
/* Values for bookkeeping of the tape position relative to filemarks
 | 
						|
   and eod/eom.  */
 | 
						|
enum eom_val
 | 
						|
{
 | 
						|
  no_eof,
 | 
						|
  eof_hit,
 | 
						|
  eof,
 | 
						|
  eod_hit,
 | 
						|
  eod,
 | 
						|
  eom_hit,
 | 
						|
  eom
 | 
						|
};
 | 
						|
 | 
						|
enum dirty_state
 | 
						|
{
 | 
						|
  clean,
 | 
						|
  has_read,
 | 
						|
  has_written,
 | 
						|
  async_write_pending
 | 
						|
};
 | 
						|
 | 
						|
enum lock_state
 | 
						|
{
 | 
						|
  unlocked,
 | 
						|
  lock_error,
 | 
						|
  auto_locked,
 | 
						|
  locked
 | 
						|
};
 | 
						|
 | 
						|
/* Partition specific information */
 | 
						|
class mtinfo_part
 | 
						|
{
 | 
						|
public:
 | 
						|
  long block;		/* logical block no */
 | 
						|
  long file;		/* current file no */
 | 
						|
  long fblock;		/* relative block no */
 | 
						|
  bool smark;		/* At setmark? */
 | 
						|
  eom_val emark;	/* "end-of"-mark */
 | 
						|
 | 
						|
  void initialize (long nblock = -1);
 | 
						|
};
 | 
						|
 | 
						|
class mtinfo_drive
 | 
						|
{
 | 
						|
  int drive;
 | 
						|
  int lasterr;
 | 
						|
  long partition;
 | 
						|
  long block;
 | 
						|
  dirty_state dirty;
 | 
						|
  lock_state lock;
 | 
						|
  TAPE_GET_DRIVE_PARAMETERS _dp;
 | 
						|
  TAPE_GET_MEDIA_PARAMETERS _mp;
 | 
						|
  OVERLAPPED ov;
 | 
						|
  struct status_flags
 | 
						|
  {
 | 
						|
    unsigned buffer_writes : 1;
 | 
						|
    unsigned async_writes  : 1;
 | 
						|
    unsigned two_fm        : 1;
 | 
						|
    unsigned fast_eom      : 1;
 | 
						|
    unsigned auto_lock     : 1;
 | 
						|
    unsigned sysv          : 1;
 | 
						|
    unsigned nowait        : 1;
 | 
						|
  } status;
 | 
						|
  mtinfo_part _part[MAX_PARTITION_NUM];
 | 
						|
 | 
						|
  inline int error (const char *str)
 | 
						|
    {
 | 
						|
      if (lasterr)
 | 
						|
	debug_printf ("%s: Win32 error %d", lasterr);
 | 
						|
      return lasterr;
 | 
						|
    }
 | 
						|
  inline bool get_feature (DWORD parm)
 | 
						|
    {
 | 
						|
      return ((parm & TAPE_DRIVE_HIGH_FEATURES)
 | 
						|
	      ? ((_dp.FeaturesHigh & parm) != 0)
 | 
						|
	      : ((_dp.FeaturesLow & parm) != 0));
 | 
						|
    }
 | 
						|
  int get_pos (HANDLE mt, long *ppartition = NULL, long *pblock = NULL);
 | 
						|
  int _set_pos (HANDLE mt, int mode, long count, int partition, BOOL dont_wait);
 | 
						|
  int create_partitions (HANDLE mt, long count);
 | 
						|
  int set_partition (HANDLE mt, long count);
 | 
						|
  int write_marks (HANDLE mt, int marktype, DWORD count);
 | 
						|
  int erase (HANDLE mt, int mode);
 | 
						|
  int prepare (HANDLE mt, int action, bool is_auto = false);
 | 
						|
  int set_compression (HANDLE mt, long count);
 | 
						|
  int set_blocksize (HANDLE mt, long count);
 | 
						|
  int get_status (HANDLE mt, struct mtget *get);
 | 
						|
  int set_options (HANDLE mt, long options);
 | 
						|
  int async_wait (HANDLE mt, DWORD *bytes_written);
 | 
						|
 | 
						|
public:
 | 
						|
  void initialize (int num, bool first_time);
 | 
						|
  int get_dp (HANDLE mt);
 | 
						|
  int get_mp (HANDLE mt);
 | 
						|
  int open (HANDLE mt);
 | 
						|
  int close (HANDLE mt, bool rewind);
 | 
						|
  int read (HANDLE mt, HANDLE mt_evt, void *ptr, size_t &ulen);
 | 
						|
  int write (HANDLE mt, HANDLE mt_evt, const void *ptr, size_t &len);
 | 
						|
  int ioctl (HANDLE mt, unsigned int cmd, void *buf);
 | 
						|
  int set_pos (HANDLE mt, int mode, long count, bool sfm_func);
 | 
						|
 | 
						|
  IMPLEMENT_STATUS_FLAG (bool, buffer_writes)
 | 
						|
  IMPLEMENT_STATUS_FLAG (bool, async_writes)
 | 
						|
  IMPLEMENT_STATUS_FLAG (bool, two_fm)
 | 
						|
  IMPLEMENT_STATUS_FLAG (bool, fast_eom)
 | 
						|
  IMPLEMENT_STATUS_FLAG (bool, auto_lock)
 | 
						|
  IMPLEMENT_STATUS_FLAG (bool, sysv)
 | 
						|
  IMPLEMENT_STATUS_FLAG (bool, nowait)
 | 
						|
 | 
						|
  PTAPE_GET_DRIVE_PARAMETERS dp () { return &_dp; }
 | 
						|
  PTAPE_GET_MEDIA_PARAMETERS mp () { return &_mp; }
 | 
						|
  mtinfo_part *part (int num) { return &_part[num]; }
 | 
						|
};
 | 
						|
 | 
						|
class mtinfo
 | 
						|
{
 | 
						|
  DWORD magic;
 | 
						|
  DWORD version;
 | 
						|
  mtinfo_drive _drive[MAX_DRIVE_NUM];
 | 
						|
 | 
						|
public:
 | 
						|
  void initialize ();
 | 
						|
  mtinfo_drive *drive (int num) { return &_drive[num]; }
 | 
						|
};
 | 
						|
 | 
						|
extern HANDLE mt_h;
 | 
						|
extern mtinfo *mt;
 | 
						|
 | 
						|
extern void __stdcall mtinfo_init ();
 |