mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-15 11:00:04 +08:00
74d8e12e16
event in the event that the thread was actually in the process of exiting. * pipe.cc (fhandler_pipe::dup): read_state is not supposed to be inheritable. Fix that. * path.cc (path_conv::check): Set symlen = 0 to avoid a compiler warning. * devices.h (devices::parsedisk): Declare new function. * devices.in (devices::parsedisk): Define new function. * dtable.cc (dtable::init_std_file_from_handle): Use device numbers rather than name. * fhandler_proc.cc (format_proc_partitions): Use parsedisk to generate disk names from numeric codes. (This was broken on two of my systems previously and is still broken now)
146 lines
3.4 KiB
Plaintext
146 lines
3.4 KiB
Plaintext
%import {
|
|
#include "winsup.h"
|
|
#include <sys/types.h>
|
|
#include <stdlib.h>
|
|
#include <ctype.h>
|
|
#include <string.h>
|
|
#include "devices.h"
|
|
#include "sys/cygwin.h"
|
|
#include "tty.h"
|
|
#include "pinfo.h"
|
|
typedef const device *KR_device_t;
|
|
}
|
|
%type KR_device_t
|
|
%local {
|
|
const device dev_cygdrive_storage =
|
|
{"/cygdrive", FH_CYGDRIVE, "/cygdrive"};
|
|
|
|
const device dev_fs_storage =
|
|
{"", FH_FS, ""};
|
|
|
|
const device dev_proc_storage =
|
|
{"", FH_PROC, ""};
|
|
|
|
const device dev_registry_storage =
|
|
{"", FH_REGISTRY, ""};
|
|
|
|
const device dev_piper_storage =
|
|
{"", FH_PIPER, ""};
|
|
|
|
const device dev_pipew_storage =
|
|
{"", FH_PIPEW, ""};
|
|
|
|
const device dev_tcp_storage =
|
|
{"", FH_TCP, ""};
|
|
|
|
const device dev_udp_storage =
|
|
{"", FH_UDP, ""};
|
|
|
|
const device dev_stream_storage =
|
|
{"", FH_STREAM, ""};
|
|
|
|
const device dev_dgram_storage =
|
|
{"", FH_DGRAM, ""};
|
|
|
|
const device dev_bad_storage =
|
|
{"", FH_BAD, ""};
|
|
|
|
%storage_here
|
|
}
|
|
%%
|
|
"/dev/tty", FH_TTY, "\\dev\\tty"
|
|
"/dev/tty%(0-63)d", FHDEV(DEV_TTYS_MAJOR, {$1}), "\\dev\\tty{$1}", ttys_dev
|
|
"/dev/console", FH_CONSOLE, "\\dev\\console", console_dev
|
|
"/dev/ttym", FH_TTYM, "\\dev\\ttym", ttym_dev
|
|
"/dev/ptmx", FH_PTYM, "\\dev\\ptmx"
|
|
"/dev/windows", FH_WINDOWS, "\\dev\\windows"
|
|
"/dev/dsp", FH_OSS_DSP, "\\dev\\dsp"
|
|
"/dev/conin", FH_CONIN, "conin"
|
|
"/dev/conout", FH_CONOUT, "conout"
|
|
"/dev/null", FH_NULL, "nul"
|
|
"/dev/zero", FH_ZERO, "\\dev\\zero"
|
|
"/dev/random", FH_RANDOM, "\\dev\\random"
|
|
"/dev/urandom", FH_URANDOM, "\\dev\\urandom", urandom_dev
|
|
"/dev/mem", FH_MEM, "\\dev\\mem"
|
|
"/dev/kmem", FH_KMEM, "\\dev\\mem"
|
|
"/dev/clipboard", FH_CLIPBOARD, "\\dev\\clipboard"
|
|
"/dev/port", FH_PORT, "\\dev\\port"
|
|
"/dev/com%(1-16)d", FHDEV(DEV_SERIAL_MAJOR, {$1}), "\\\\.\\com{$1}"
|
|
"/dev/ttyS%(0-15)d", FHDEV(DEV_SERIAL_MAJOR, {$1 + 1}), "\\\\.\\com{$1 + 1}"
|
|
"/dev/pipe", FH_PIPE, "\\dev\\pipe"
|
|
"/dev/fifo", FH_FIFO, "\\dev\\fifo"
|
|
"/dev/st%(0-127)d", FHDEV(DEV_TAPE_MAJOR, {$1}), "\\Device\\Tape{$1}"
|
|
"/dev/nst%(0-127)d", FHDEV(DEV_TAPE_MAJOR, {$1 + 128}), "\\Device\\Tape{$1}"
|
|
"/dev/fd%(0-15)d", FHDEV(DEV_FLOPPY_MAJOR, {$1}), "\\Device\\Floppy{$1}"
|
|
"/dev/scd%(0-15)d", FHDEV(DEV_CDROM_MAJOR, {$1}), "\\Device\\CdRom{$1}"
|
|
"/dev/sr%(0-15)d", FHDEV(DEV_CDROM_MAJOR, {$1}), "\\Device\\CdRom{$1}"
|
|
"/dev/sd%{a-z}s", FH_SD{uc $1}, "\\Device\\Harddisk{ord($1) - ord('a')}\\Partition0"
|
|
"/dev/sd%{a-z}s%(1-15)d", FH_SD{uc $1} | {$2}, "\\Device\\Harddisk{ord($1) - ord('a')}\\Partition{$2 % 16}"
|
|
%other {return NULL;}
|
|
%%
|
|
void
|
|
device::parse (const char *s)
|
|
{
|
|
size_t len = strlen (s);
|
|
const device *dev = KR_find_keyword (s, len);
|
|
|
|
if (!dev)
|
|
*this = *fs_dev;
|
|
else
|
|
*this = *dev;
|
|
}
|
|
|
|
void
|
|
device::init ()
|
|
{
|
|
/* nothing to do... yet */
|
|
}
|
|
|
|
void
|
|
device::parse (_major_t major, _minor_t minor)
|
|
{
|
|
_dev_t dev = FHDEV (major, minor);
|
|
|
|
devn = 0;
|
|
|
|
for (unsigned i = 0; i < (sizeof (dev_storage) / sizeof (dev_storage[0])); i++)
|
|
if (dev_storage[i].devn == dev)
|
|
{
|
|
*this = dev_storage[i];
|
|
break;
|
|
}
|
|
|
|
if (!*this)
|
|
devn = FHDEV (major, minor);
|
|
return;
|
|
}
|
|
|
|
void
|
|
device::parse (_dev_t dev)
|
|
{
|
|
parse (_major (dev), _minor (dev));
|
|
}
|
|
|
|
void
|
|
device::tty_to_real_device ()
|
|
{
|
|
if (!real_tty_attached (myself))
|
|
*this = myself->ctty < 0 ? dev_bad_storage : *console_dev;
|
|
else
|
|
parse (DEV_TTYS_MAJOR, myself->ctty);
|
|
}
|
|
|
|
void
|
|
device::parsedisk (int drive, int part)
|
|
{
|
|
int base;
|
|
if (drive < ('q' - 'a'))
|
|
base = DEV_SD_MAJOR;
|
|
else
|
|
{
|
|
base = DEV_SD1_MAJOR;
|
|
drive -= 'q' - 'q';
|
|
}
|
|
parse (base, part + (drive * 16));
|
|
}
|