summaryrefslogtreecommitdiffstats
path: root/winsup
diff options
context:
space:
mode:
authorcvs2svn <>2010-04-02 22:36:45 +0000
committercvs2svn <>2010-04-02 22:36:45 +0000
commit833ec8db7a32b62c657fa75fe8390dd6e116675c (patch)
tree6f4dcec7d19e941fc9b5037f70444a7cfde88397 /winsup
parentd8b4cbe896c6c9ecf5fb162d93a2dd33b95501df (diff)
downloadcygnal-cygwin-1_7_3-release.tar.gz
cygnal-cygwin-1_7_3-release.tar.bz2
cygnal-cygwin-1_7_3-release.zip
This commit was manufactured by cvs2svn to create tag 'cygwin-cygwin-1_7_3-release
1_7_3-release'. Sprout from master 2010-03-30 16:20:15 UTC Corinna Vinschen <corinna@vinschen.de> ' * fhandler_socket.cc (fhandler_socket::wait_for_events): Remove call to' Cherrypick from master 2010-04-02 22:36:44 UTC Christopher Faylor <me@cgf.cx> '* fhandler.h (fhandler_base::has_ongoing_io): Declare virtual method.': winsup/cygwin/ChangeLog winsup/cygwin/dtable.cc winsup/cygwin/fhandler.cc winsup/cygwin/fhandler.h winsup/cygwin/fhandler_fifo.cc winsup/cygwin/fhandler_tty.cc winsup/cygwin/include/sys/strace.h winsup/cygwin/nlsfuncs.cc winsup/cygwin/pipe.cc winsup/cygwin/select.cc winsup/cygwin/select.h winsup/cygwin/sigproc.cc winsup/cygwin/strace.cc winsup/cygwin/syscalls.cc winsup/doc/ChangeLog winsup/doc/cygwinenv.sgml winsup/doc/effectively.sgml winsup/doc/faq-using.xml winsup/doc/setup-net.sgml Cherrypick from master 2005-10-28 21:21:08 UTC Jeff Johnston <jjohnstn@redhat.com> '': newlib/libc/string/wcsncpy.c Cherrypick from cygnus 1999-05-03 07:29:06 UTC Richard Henderson <rth@redhat.com> '19990502 sourceware import': README config/mt-d30v config/mt-netware config/mt-ospace etc/add-log.el etc/add-log.vi etc/configbuild.ein etc/configbuild.fig etc/configbuild.jin etc/configbuild.tin etc/configdev.ein etc/configdev.fig etc/configdev.jin etc/configdev.tin include/aout/hppa.h include/coff/sym.h include/fopen-bin.h include/fopen-same.h include/opcode/tahoe.h makefile.vms Delete: djunpack.bat libgloss/ChangeLog libgloss/Makefile.in libgloss/README libgloss/acinclude.m4 libgloss/aclocal.m4 libgloss/arm/Makefile.in libgloss/arm/_exit.c libgloss/arm/_kill.c libgloss/arm/aclocal.m4 libgloss/arm/coff-iq80310.specs libgloss/arm/coff-pid.specs libgloss/arm/coff-rdimon.specs libgloss/arm/coff-rdpmon.specs libgloss/arm/coff-redboot.ld libgloss/arm/coff-redboot.specs libgloss/arm/configure libgloss/arm/configure.in libgloss/arm/crt0.S libgloss/arm/elf-iq80310.specs libgloss/arm/elf-linux.specs libgloss/arm/elf-pid.specs libgloss/arm/elf-rdimon.specs libgloss/arm/elf-rdpmon.specs libgloss/arm/elf-redboot.ld libgloss/arm/elf-redboot.specs libgloss/arm/libcfunc.c libgloss/arm/linux-crt0.c libgloss/arm/linux-syscall.h libgloss/arm/linux-syscalls0.S libgloss/arm/linux-syscalls1.c libgloss/arm/redboot-crt0.S libgloss/arm/redboot-syscalls.c libgloss/arm/swi.h libgloss/arm/syscall.h libgloss/arm/syscalls.c libgloss/arm/trap.S libgloss/bfin/Makefile.in libgloss/bfin/aclocal.m4 libgloss/bfin/basiccrt.S libgloss/bfin/bf512.ld libgloss/bfin/bf514.ld libgloss/bfin/bf516.ld libgloss/bfin/bf518.ld libgloss/bfin/bf522.ld libgloss/bfin/bf523.ld libgloss/bfin/bf524.ld libgloss/bfin/bf525.ld libgloss/bfin/bf526.ld libgloss/bfin/bf527.ld libgloss/bfin/bf531.ld libgloss/bfin/bf532.ld libgloss/bfin/bf533.ld libgloss/bfin/bf534.ld libgloss/bfin/bf536.ld libgloss/bfin/bf537.ld libgloss/bfin/bf538.ld libgloss/bfin/bf539.ld libgloss/bfin/bf542.ld libgloss/bfin/bf544.ld libgloss/bfin/bf547.ld libgloss/bfin/bf548.ld libgloss/bfin/bf549.ld libgloss/bfin/bf561.ld libgloss/bfin/bf561a.ld libgloss/bfin/bf561b.ld libgloss/bfin/bf561m.ld libgloss/bfin/bfin-common-mc.ld libgloss/bfin/bfin-common-sc.ld libgloss/bfin/configure libgloss/bfin/configure.in libgloss/bfin/crt0.S libgloss/bfin/include/blackfin.h libgloss/bfin/include/ccblkfn.h libgloss/bfin/include/cdefBF512.h libgloss/bfin/include/cdefBF514.h libgloss/bfin/include/cdefBF516.h libgloss/bfin/include/cdefBF518.h libgloss/bfin/include/cdefBF51x_base.h libgloss/bfin/include/cdefBF522.h libgloss/bfin/include/cdefBF523.h libgloss/bfin/include/cdefBF524.h libgloss/bfin/include/cdefBF525.h libgloss/bfin/include/cdefBF526.h libgloss/bfin/include/cdefBF527.h libgloss/bfin/include/cdefBF52x_base.h libgloss/bfin/include/cdefBF531.h libgloss/bfin/include/cdefBF532.h libgloss/bfin/include/cdefBF533.h libgloss/bfin/include/cdefBF534.h libgloss/bfin/include/cdefBF535.h libgloss/bfin/include/cdefBF536.h libgloss/bfin/include/cdefBF537.h libgloss/bfin/include/cdefBF538.h libgloss/bfin/include/cdefBF539.h libgloss/bfin/include/cdefBF53x.h libgloss/bfin/include/cdefBF541.h libgloss/bfin/include/cdefBF542.h libgloss/bfin/include/cdefBF542M.h libgloss/bfin/include/cdefBF544.h libgloss/bfin/include/cdefBF544M.h libgloss/bfin/include/cdefBF547.h libgloss/bfin/include/cdefBF547M.h libgloss/bfin/include/cdefBF548.h libgloss/bfin/include/cdefBF548M.h libgloss/bfin/include/cdefBF549.h libgloss/bfin/include/cdefBF549M.h libgloss/bfin/include/cdefBF54x_base.h libgloss/bfin/include/cdefBF561.h libgloss/bfin/include/cdef_LPBlackfin.h libgloss/bfin/include/cdefblackfin.h libgloss/bfin/include/cplb.h libgloss/bfin/include/cplbtab.h libgloss/bfin/include/defBF512.h libgloss/bfin/include/defBF514.h libgloss/bfin/include/defBF516.h libgloss/bfin/include/defBF518.h libgloss/bfin/include/defBF51x_base.h libgloss/bfin/include/defBF522.h libgloss/bfin/include/defBF523.h libgloss/bfin/include/defBF524.h libgloss/bfin/include/defBF525.h libgloss/bfin/include/defBF526.h libgloss/bfin/include/defBF527.h libgloss/bfin/include/defBF52x_base.h libgloss/bfin/include/defBF531.h libgloss/bfin/include/defBF532.h libgloss/bfin/include/defBF533.h libgloss/bfin/include/defBF534.h libgloss/bfin/include/defBF535.h libgloss/bfin/include/defBF536.h libgloss/bfin/include/defBF537.h libgloss/bfin/include/defBF538.h libgloss/bfin/include/defBF539.h libgloss/bfin/include/defBF541.h libgloss/bfin/include/defBF542.h libgloss/bfin/include/defBF542M.h libgloss/bfin/include/defBF544.h libgloss/bfin/include/defBF544M.h libgloss/bfin/include/defBF547.h libgloss/bfin/include/defBF547M.h libgloss/bfin/include/defBF548.h libgloss/bfin/include/defBF548M.h libgloss/bfin/include/defBF549.h libgloss/bfin/include/defBF549M.h libgloss/bfin/include/defBF54x_base.h libgloss/bfin/include/defBF561.h libgloss/bfin/include/def_LPBlackfin.h libgloss/bfin/include/defblackfin.h libgloss/bfin/include/sys/_adi_platform.h libgloss/bfin/include/sys/anomaly_macros_rtl.h libgloss/bfin/include/sys/excause.h libgloss/bfin/include/sys/exception.h libgloss/bfin/include/sys/mc_typedef.h libgloss/bfin/include/sys/platform.h libgloss/bfin/include/sys/pll.h libgloss/bfin/include/sysreg.h libgloss/bfin/syscalls.c libgloss/close.c libgloss/config/default.mh libgloss/config/default.mt libgloss/config/dos.mh libgloss/config/mips.mt libgloss/config/mn10200.mt libgloss/config/mn10300.mt libgloss/config/ppc.mh libgloss/configure libgloss/configure.in libgloss/cris/Makefile.in libgloss/cris/aclocal.m4 libgloss/cris/configure libgloss/cris/configure.in libgloss/cris/crt0.S libgloss/cris/crti.c libgloss/cris/crtn.c libgloss/cris/gensyscalls libgloss/cris/irqtable.S libgloss/cris/lcrt0.c libgloss/cris/linunistd.h libgloss/cris/outbyte.c libgloss/cris/setup.S libgloss/crx/Makefile.in libgloss/crx/_exit.c libgloss/crx/_getenv.c libgloss/crx/_rename.c libgloss/crx/aclocal.m4 libgloss/crx/close.c libgloss/crx/configure libgloss/crx/configure.in libgloss/crx/crt0.S libgloss/crx/crti.S libgloss/crx/crtn.S libgloss/crx/dvz_hndl.c libgloss/crx/flg_hndl.c libgloss/crx/fstat.c libgloss/crx/getpid.c libgloss/crx/iad_hndl.c libgloss/crx/intable.c libgloss/crx/isatty.c libgloss/crx/kill.c libgloss/crx/lseek.c libgloss/crx/open.c libgloss/crx/putnum.c libgloss/crx/read.c libgloss/crx/sbrk.c libgloss/crx/sim.ld libgloss/crx/stat.c libgloss/crx/svc_hndl.c libgloss/crx/time.c libgloss/crx/und_hndl.c libgloss/crx/unlink.c libgloss/crx/write.c libgloss/d30v/Makefile.in libgloss/d30v/aclocal.m4 libgloss/d30v/configure libgloss/d30v/configure.in libgloss/d30v/crt0.S libgloss/d30v/inbyte.c libgloss/d30v/outbyte.c libgloss/d30v/syscalls.c libgloss/debug.c libgloss/debug.h libgloss/doc/Makefile.in libgloss/doc/configure libgloss/doc/configure.in libgloss/doc/porting.texi libgloss/fr30/Makefile.in libgloss/fr30/aclocal.m4 libgloss/fr30/configure libgloss/fr30/configure.in libgloss/fr30/crt0.s libgloss/fr30/syscalls.c libgloss/frv/Makefile.in libgloss/frv/aclocal.m4 libgloss/frv/configure libgloss/frv/configure.in libgloss/frv/crt0.S libgloss/frv/fstat.c libgloss/frv/getpid.c libgloss/frv/isatty.c libgloss/frv/kill.c libgloss/frv/print.c libgloss/frv/putnum.c libgloss/frv/sbrk.c libgloss/frv/sim-close.S libgloss/frv/sim-exit.S libgloss/frv/sim-inbyte.c libgloss/frv/sim-lseek.S libgloss/frv/sim-open.S libgloss/frv/sim-read.S libgloss/frv/sim-time.c libgloss/frv/sim-unlink.S libgloss/frv/sim-write.S libgloss/frv/stat.c libgloss/fstat.c libgloss/getpid.c libgloss/glue.h libgloss/hp74x/Makefile.in libgloss/hp74x/README libgloss/hp74x/aclocal.m4 libgloss/hp74x/checksum.c libgloss/hp74x/configure libgloss/hp74x/configure.in libgloss/hp74x/crt0.s libgloss/hp74x/debugger.h libgloss/hp74x/debugger.s libgloss/hp74x/diagnose.h libgloss/hp74x/hppa-defs.h libgloss/hp74x/hppa.ld libgloss/hp74x/io.c libgloss/hp74x/iva_table.h libgloss/hp74x/iva_table.s libgloss/hp74x/pa_stub.c libgloss/hp74x/test.c libgloss/i386/Makefile.in libgloss/i386/aclocal.m4 libgloss/i386/configure libgloss/i386/configure.in libgloss/i386/cygmon-crt0.S libgloss/i386/cygmon-gmon.c libgloss/i386/cygmon-gmon.h libgloss/i386/cygmon-salib.c libgloss/i386/cygmon-syscall.h libgloss/i386/cygmon.ld libgloss/i960/Makefile.in libgloss/i960/aclocal.m4 libgloss/i960/asm.h libgloss/i960/configure libgloss/i960/configure.in libgloss/i960/crt0.c libgloss/i960/mon-read.c libgloss/i960/mon-syscalls.S libgloss/i960/mon-write.c libgloss/i960/mon960.c libgloss/i960/mon960.ld libgloss/i960/syscall.h libgloss/iq2000/Makefile.in libgloss/iq2000/_exit.c libgloss/iq2000/access.c libgloss/iq2000/aclocal.m4 libgloss/iq2000/chmod.c libgloss/iq2000/chown.c libgloss/iq2000/close.c libgloss/iq2000/configure libgloss/iq2000/configure.in libgloss/iq2000/creat.c libgloss/iq2000/crt0.S libgloss/iq2000/crt1.c libgloss/iq2000/execv.c libgloss/iq2000/execve.c libgloss/iq2000/fork.c libgloss/iq2000/fstat.c libgloss/iq2000/getpid.c libgloss/iq2000/gettime.c libgloss/iq2000/isatty.c libgloss/iq2000/kill.c libgloss/iq2000/lseek.c libgloss/iq2000/open.c libgloss/iq2000/pipe.c libgloss/iq2000/read.c libgloss/iq2000/sbrk.c libgloss/iq2000/sim.ld libgloss/iq2000/stat.c libgloss/iq2000/test.c libgloss/iq2000/time.c libgloss/iq2000/times.c libgloss/iq2000/trap.c libgloss/iq2000/trap.h libgloss/iq2000/unlink.c libgloss/iq2000/utime.c libgloss/iq2000/wait.c libgloss/iq2000/write.c libgloss/isatty.c libgloss/kill.c libgloss/libnosys/Makefile.in libgloss/libnosys/_exit.c libgloss/libnosys/acconfig.h libgloss/libnosys/aclocal.m4 libgloss/libnosys/chown.c libgloss/libnosys/close.c libgloss/libnosys/config.h.in libgloss/libnosys/configure libgloss/libnosys/configure.in libgloss/libnosys/environ.c libgloss/libnosys/errno.c libgloss/libnosys/execve.c libgloss/libnosys/fork.c libgloss/libnosys/fstat.c libgloss/libnosys/getpid.c libgloss/libnosys/gettod.c libgloss/libnosys/isatty.c libgloss/libnosys/kill.c libgloss/libnosys/link.c libgloss/libnosys/lseek.c libgloss/libnosys/open.c libgloss/libnosys/read.c libgloss/libnosys/readlink.c libgloss/libnosys/sbrk.c libgloss/libnosys/stat.c libgloss/libnosys/symlink.c libgloss/libnosys/times.c libgloss/libnosys/unlink.c libgloss/libnosys/wait.c libgloss/libnosys/warning.h libgloss/libnosys/write.c libgloss/lm32/Makefile.in libgloss/lm32/aclocal.m4 libgloss/lm32/configure libgloss/lm32/configure.in libgloss/lm32/crt0.S libgloss/lm32/isatty.c libgloss/lm32/scall.S libgloss/lm32/sim.ld libgloss/lseek.c libgloss/m32c/Makefile.in libgloss/m32c/abort.S libgloss/m32c/aclocal.m4 libgloss/m32c/argv.S libgloss/m32c/argvlen.S libgloss/m32c/chdir.S libgloss/m32c/chmod.S libgloss/m32c/close.S libgloss/m32c/configure libgloss/m32c/configure.in libgloss/m32c/crt0.S libgloss/m32c/crtn.S libgloss/m32c/exit.S libgloss/m32c/fstat.S libgloss/m32c/genscript libgloss/m32c/getpid.S libgloss/m32c/gettimeofday.S libgloss/m32c/heaptop.S libgloss/m32c/isatty.S libgloss/m32c/kill.S libgloss/m32c/link.S libgloss/m32c/lseek.S libgloss/m32c/m32c.tmpl libgloss/m32c/m32csys.h libgloss/m32c/open.S libgloss/m32c/read.S libgloss/m32c/sample.c libgloss/m32c/sbrk.c libgloss/m32c/stat.S libgloss/m32c/time.S libgloss/m32c/times.S libgloss/m32c/unlink.S libgloss/m32c/utime.S libgloss/m32c/varvects.S libgloss/m32c/varvects.h libgloss/m32c/write.S libgloss/m32r/Makefile.in libgloss/m32r/aclocal.m4 libgloss/m32r/chmod.c libgloss/m32r/close.c libgloss/m32r/configure libgloss/m32r/configure.in libgloss/m32r/crt0.S libgloss/m32r/eit.h libgloss/m32r/eva-stub.ld libgloss/m32r/eva.ld libgloss/m32r/exit.c libgloss/m32r/fstat.c libgloss/m32r/getpid.c libgloss/m32r/isatty.c libgloss/m32r/kill.c libgloss/m32r/lseek.c libgloss/m32r/m32r-lib.c libgloss/m32r/m32r-stub.c libgloss/m32r/mon.specs libgloss/m32r/open.c libgloss/m32r/raise.c libgloss/m32r/read.c libgloss/m32r/sbrk.c libgloss/m32r/stat.c libgloss/m32r/trap0.S libgloss/m32r/trapmon0.c libgloss/m32r/unlink.c libgloss/m32r/utime.c libgloss/m32r/write.c libgloss/m68hc11/Makefile.in libgloss/m68hc11/aclocal.m4 libgloss/m68hc11/configure libgloss/m68hc11/configure.in libgloss/m68hc11/crt0.S libgloss/m68hc11/sci-inout.S libgloss/m68hc11/sim-valid-m68hc11.ld libgloss/m68hc11/sim-valid-m68hc12.ld libgloss/m68hc11/syscalls.c libgloss/m68k/Makefile.in libgloss/m68k/README libgloss/m68k/aclocal.m4 libgloss/m68k/asm.h libgloss/m68k/bcc.ld libgloss/m68k/cf-crt0.S libgloss/m68k/cf-crt1.c libgloss/m68k/cf-exit.c libgloss/m68k/cf-hosted.S libgloss/m68k/cf-isrs.c libgloss/m68k/cf-isv.S libgloss/m68k/cf-sbrk.c libgloss/m68k/cf.sc libgloss/m68k/configure libgloss/m68k/configure.in libgloss/m68k/cpu32bug.S libgloss/m68k/cpu32bug.h libgloss/m68k/crt0.S libgloss/m68k/dtor.C libgloss/m68k/fido-_exit.c libgloss/m68k/fido-crt0.S libgloss/m68k/fido-handler.c libgloss/m68k/fido-hosted.S libgloss/m68k/fido-sbrk.c libgloss/m68k/fido.h libgloss/m68k/fido.sc libgloss/m68k/fido_profiling.h libgloss/m68k/idp-inbyte.c libgloss/m68k/idp-outbyte.c libgloss/m68k/idp.ld libgloss/m68k/idpgdb.ld libgloss/m68k/io-close.c libgloss/m68k/io-exit.c libgloss/m68k/io-fstat.c libgloss/m68k/io-gdb.c libgloss/m68k/io-gettimeofday.c libgloss/m68k/io-isatty.c libgloss/m68k/io-lseek.c libgloss/m68k/io-open.c libgloss/m68k/io-read.c libgloss/m68k/io-rename.c libgloss/m68k/io-stat.c libgloss/m68k/io-system.c libgloss/m68k/io-time.c libgloss/m68k/io-unlink.c libgloss/m68k/io-write.c libgloss/m68k/io.h libgloss/m68k/leds.c libgloss/m68k/leds.h libgloss/m68k/mc68681reg.h libgloss/m68k/mc68ec.c libgloss/m68k/mvme-stub.c libgloss/m68k/mvme.S libgloss/m68k/mvme135-asm.S libgloss/m68k/mvme135.ld libgloss/m68k/mvme162.ld libgloss/m68k/mvme162lx-asm.S libgloss/m68k/sbc5204.ld libgloss/m68k/sbc5206.ld libgloss/m68k/sim-abort.c libgloss/m68k/sim-crt0.S libgloss/m68k/sim-errno.c libgloss/m68k/sim-funcs.c libgloss/m68k/sim-inbyte.c libgloss/m68k/sim-print.c libgloss/m68k/sim-sbrk.c libgloss/m68k/sim.ld libgloss/m68k/simulator.S libgloss/m68k/test.c libgloss/mcore/Makefile.in libgloss/mcore/aclocal.m4 libgloss/mcore/close.c libgloss/mcore/cmb-exit.c libgloss/mcore/cmb-inbyte.c libgloss/mcore/cmb-outbyte.c libgloss/mcore/configure libgloss/mcore/configure.in libgloss/mcore/crt0.S libgloss/mcore/elf-cmb.ld libgloss/mcore/elf-cmb.specs libgloss/mcore/fstat.c libgloss/mcore/getpid.c libgloss/mcore/kill.c libgloss/mcore/lseek.c libgloss/mcore/open.c libgloss/mcore/pe-cmb.ld libgloss/mcore/pe-cmb.specs libgloss/mcore/print.c libgloss/mcore/putnum.c libgloss/mcore/raise.c libgloss/mcore/read.c libgloss/mcore/sbrk.c libgloss/mcore/stat.c libgloss/mcore/syscalls.S libgloss/mcore/unlink.c libgloss/mcore/write.c libgloss/mep/Makefile.in libgloss/mep/aclocal.m4 libgloss/mep/configure libgloss/mep/configure.in libgloss/mep/crt0.S libgloss/mep/crtn.S libgloss/mep/default.ld libgloss/mep/fmax.ld libgloss/mep/gcov-io.h libgloss/mep/gmap_default.ld libgloss/mep/h_reset.c libgloss/mep/handlers.c libgloss/mep/isatty.c libgloss/mep/mep-bb.c libgloss/mep/mep-gmon.c libgloss/mep/min.ld libgloss/mep/read.c libgloss/mep/sbrk.c libgloss/mep/sdram-crt0.S libgloss/mep/sim-crt0.S libgloss/mep/sim-crtn.S libgloss/mep/simnovec-crt0.S libgloss/mep/simple.ld libgloss/mep/simsdram-crt0.S libgloss/mep/syscalls.S libgloss/mep/write.c libgloss/microblaze/Makefile.in libgloss/microblaze/_exception_handler.S libgloss/microblaze/_hw_exception_handler.S libgloss/microblaze/_interrupt_handler.S libgloss/microblaze/_program_clean.S libgloss/microblaze/_program_init.S libgloss/microblaze/configure libgloss/microblaze/configure.in libgloss/microblaze/crt0.S libgloss/microblaze/crt1.S libgloss/microblaze/crt2.S libgloss/microblaze/crt3.S libgloss/microblaze/crt4.S libgloss/microblaze/crtinit.S libgloss/microblaze/pgcrtinit.S libgloss/microblaze/sbrk.c libgloss/microblaze/sim-crtinit.S libgloss/microblaze/sim-pgcrtinit.S libgloss/microblaze/timer.c libgloss/microblaze/xil_malloc.c libgloss/microblaze/xil_sbrk.c libgloss/microblaze/xilinx.ld libgloss/mips/Makefile.in libgloss/mips/aclocal.m4 libgloss/mips/array-io.c libgloss/mips/array.ld libgloss/mips/cfe.c libgloss/mips/cfe.ld libgloss/mips/cfe_api.c libgloss/mips/cfe_api.h libgloss/mips/cfe_api_int.h libgloss/mips/cfe_error.h libgloss/mips/cfe_mem.c libgloss/mips/cma101.c libgloss/mips/configure libgloss/mips/configure.in libgloss/mips/crt0.S libgloss/mips/crt0_cfe.S libgloss/mips/crt0_cygmon.S libgloss/mips/cygmon.c libgloss/mips/ddb-kseg0.ld libgloss/mips/ddb.ld libgloss/mips/dtor.C libgloss/mips/dve.ld libgloss/mips/dvemon.c libgloss/mips/entry.S libgloss/mips/idt.ld libgloss/mips/idt32.ld libgloss/mips/idt64.ld libgloss/mips/idtecoff.ld libgloss/mips/idtmon.S libgloss/mips/jmr3904-io.c libgloss/mips/jmr3904app-java.ld libgloss/mips/jmr3904app.ld libgloss/mips/jmr3904dram-java.ld libgloss/mips/jmr3904dram.ld libgloss/mips/lsi.ld libgloss/mips/lsipmon.S libgloss/mips/nullmon.c libgloss/mips/nullmon.ld libgloss/mips/pmon.S libgloss/mips/pmon.ld libgloss/mips/regs.S libgloss/mips/syscalls.c libgloss/mips/test.c libgloss/mips/vr4300.S libgloss/mips/vr5xxx.S libgloss/mn10200/Makefile.in libgloss/mn10200/_exit.c libgloss/mn10200/access.c libgloss/mn10200/aclocal.m4 libgloss/mn10200/chmod.c libgloss/mn10200/chown.c libgloss/mn10200/close.c libgloss/mn10200/configure libgloss/mn10200/configure.in libgloss/mn10200/creat.c libgloss/mn10200/crt0.S libgloss/mn10200/crt1.c libgloss/mn10200/eval.ld libgloss/mn10200/execv.c libgloss/mn10200/execve.c libgloss/mn10200/fork.c libgloss/mn10200/fstat.c libgloss/mn10200/getpid.c libgloss/mn10200/gettime.c libgloss/mn10200/isatty.c libgloss/mn10200/kill.c libgloss/mn10200/lseek.c libgloss/mn10200/open.c libgloss/mn10200/pipe.c libgloss/mn10200/read.c libgloss/mn10200/sbrk.c libgloss/mn10200/sim.ld libgloss/mn10200/stat.c libgloss/mn10200/test.c libgloss/mn10200/time.c libgloss/mn10200/times.c libgloss/mn10200/trap.S libgloss/mn10200/trap.h libgloss/mn10200/unlink.c libgloss/mn10200/utime.c libgloss/mn10200/wait.c libgloss/mn10200/write.c libgloss/mn10300/Makefile.in libgloss/mn10300/_exit.c libgloss/mn10300/access.c libgloss/mn10300/aclocal.m4 libgloss/mn10300/asb2303.ld libgloss/mn10300/asb2305.ld libgloss/mn10300/chmod.c libgloss/mn10300/chown.c libgloss/mn10300/close.c libgloss/mn10300/configure libgloss/mn10300/configure.in libgloss/mn10300/creat.c libgloss/mn10300/crt0-eval.S libgloss/mn10300/crt0.S libgloss/mn10300/crt0_cygmon.S libgloss/mn10300/crt0_redboot.S libgloss/mn10300/crt1.c libgloss/mn10300/cygmon.c libgloss/mn10300/eval.ld libgloss/mn10300/execv.c libgloss/mn10300/execve.c libgloss/mn10300/fork.c libgloss/mn10300/fstat.c libgloss/mn10300/getpid.c libgloss/mn10300/gettime.c libgloss/mn10300/isatty.c libgloss/mn10300/kill.c libgloss/mn10300/lseek.c libgloss/mn10300/open.c libgloss/mn10300/pipe.c libgloss/mn10300/read.c libgloss/mn10300/sbrk.c libgloss/mn10300/sim.ld libgloss/mn10300/stat.c libgloss/mn10300/test.c libgloss/mn10300/time.c libgloss/mn10300/times.c libgloss/mn10300/trap.S libgloss/mn10300/trap.h libgloss/mn10300/unlink.c libgloss/mn10300/utime.c libgloss/mn10300/wait.c libgloss/mn10300/write.c libgloss/moxie/Makefile.in libgloss/moxie/aclocal.m4 libgloss/moxie/configure libgloss/moxie/configure.in libgloss/moxie/crt0.S libgloss/moxie/fstat.c libgloss/moxie/getpid.c libgloss/moxie/isatty.c libgloss/moxie/kill.c libgloss/moxie/moxie-elf-common.ld libgloss/moxie/print.c libgloss/moxie/putnum.c libgloss/moxie/qemu-time.c libgloss/moxie/qemu-write.c libgloss/moxie/qemu.ld libgloss/moxie/sbrk.c libgloss/moxie/sim-close.S libgloss/moxie/sim-exit.S libgloss/moxie/sim-inbyte.c libgloss/moxie/sim-lseek.S libgloss/moxie/sim-lseek.c libgloss/moxie/sim-open.S libgloss/moxie/sim-read.S libgloss/moxie/sim-time.c libgloss/moxie/sim-unlink.S libgloss/moxie/sim-write.S libgloss/moxie/sim.ld libgloss/moxie/stat.c libgloss/mt/16-002.ld libgloss/mt/16-003.ld libgloss/mt/64-001.ld libgloss/mt/Makefile.in libgloss/mt/access.c libgloss/mt/aclocal.m4 libgloss/mt/chmod.c libgloss/mt/close.c libgloss/mt/configure libgloss/mt/configure.in libgloss/mt/crt0-16-002.S libgloss/mt/crt0-16-003.S libgloss/mt/crt0-64-001.S libgloss/mt/crt0-ms2.S libgloss/mt/crt0.S libgloss/mt/exit-16-002.c libgloss/mt/exit-16-003.c libgloss/mt/exit-64-001.c libgloss/mt/exit-ms2.c libgloss/mt/exit.c libgloss/mt/fstat.c libgloss/mt/getpid.c libgloss/mt/gettime.c libgloss/mt/isatty.c libgloss/mt/kill.c libgloss/mt/lseek.c libgloss/mt/ms2.ld libgloss/mt/open.c libgloss/mt/read.c libgloss/mt/sbrk.c libgloss/mt/startup-16-002.S libgloss/mt/startup-16-003.S libgloss/mt/startup-64-001.S libgloss/mt/startup-ms2.S libgloss/mt/stat.c libgloss/mt/time.c libgloss/mt/times.c libgloss/mt/trap.S libgloss/mt/trap.h libgloss/mt/unlink.c libgloss/mt/utime.c libgloss/mt/write.c libgloss/open.c libgloss/pa/Makefile.in libgloss/pa/README libgloss/pa/aclocal.m4 libgloss/pa/configure libgloss/pa/configure.in libgloss/pa/crt0.S libgloss/pa/hp-milli.s libgloss/pa/op50n-io.S libgloss/pa/op50n.h libgloss/pa/op50n.ld libgloss/pa/op50nled.c libgloss/pa/setjmp.S libgloss/pa/test.c libgloss/pa/w89k-io.c libgloss/pa/w89k.h libgloss/pa/w89k.ld libgloss/print.c libgloss/putnum.c libgloss/read.c libgloss/rs6000/Makefile.in libgloss/rs6000/aclocal.m4 libgloss/rs6000/ads-exit.S libgloss/rs6000/ads-io.c libgloss/rs6000/ads.ld libgloss/rs6000/configure libgloss/rs6000/configure.in libgloss/rs6000/crt0.S libgloss/rs6000/mbx-exit.c libgloss/rs6000/mbx-inbyte.c libgloss/rs6000/mbx-outbyte.c libgloss/rs6000/mbx-print.c libgloss/rs6000/mbx.ld libgloss/rs6000/mbx.specs libgloss/rs6000/mcount.S libgloss/rs6000/mvme-errno.c libgloss/rs6000/mvme-exit.S libgloss/rs6000/mvme-inbyte.S libgloss/rs6000/mvme-outbyte.S libgloss/rs6000/mvme-print.c libgloss/rs6000/mvme-read.c libgloss/rs6000/sim-abort.c libgloss/rs6000/sim-crt0.S libgloss/rs6000/sim-errno.c libgloss/rs6000/sim-getrusage.S libgloss/rs6000/sim-inbyte.c libgloss/rs6000/sim-print.c libgloss/rs6000/sim-sbrk.c libgloss/rs6000/simulator.S libgloss/rs6000/sol-cfuncs.c libgloss/rs6000/sol-syscall.S libgloss/rs6000/test.c libgloss/rs6000/xil-crt0.S libgloss/rs6000/xilinx.ld libgloss/rs6000/xilinx440.ld libgloss/rs6000/yellowknife.ld libgloss/rx/Makefile.in libgloss/rx/abort.S libgloss/rx/argv.S libgloss/rx/argvlen.S libgloss/rx/chdir.S libgloss/rx/chmod.S libgloss/rx/close.S libgloss/rx/configure libgloss/rx/configure.in libgloss/rx/crt0.S libgloss/rx/crtn.S libgloss/rx/exit.S libgloss/rx/fstat.S libgloss/rx/gcrt0.S libgloss/rx/getpid.S libgloss/rx/gettimeofday.S libgloss/rx/heaptop.S libgloss/rx/isatty.S libgloss/rx/kill.S libgloss/rx/link.S libgloss/rx/lseek.S libgloss/rx/mcount.c libgloss/rx/open.S libgloss/rx/read.S libgloss/rx/rx-sim.ld libgloss/rx/rx.ld libgloss/rx/rxsys.h libgloss/rx/sbrk.c libgloss/rx/sigprocmask.S libgloss/rx/sleep.S libgloss/rx/stat.S libgloss/rx/time.S libgloss/rx/times.S libgloss/rx/unlink.S libgloss/rx/utime.S libgloss/rx/write.S libgloss/sbrk.c libgloss/sh/sh1lcevb.ld libgloss/sh/sh2lcevb.ld libgloss/sh/sh3bb.ld libgloss/sh/sh3lcevb.ld libgloss/sparc/Makefile.in libgloss/sparc/aclocal.m4 libgloss/sparc/asm.h libgloss/sparc/cache.c libgloss/sparc/configure libgloss/sparc/configure.in libgloss/sparc/crt0-701.S libgloss/sparc/crt0.S libgloss/sparc/cygmon-crt0.S libgloss/sparc/cygmon-salib.c libgloss/sparc/cygmon-sparc64-ld.src libgloss/sparc/cygmon.ld.src libgloss/sparc/dtor.C libgloss/sparc/elfsim.ld libgloss/sparc/erc32-crt0.S libgloss/sparc/erc32-io.c libgloss/sparc/erc32-stub.c libgloss/sparc/erc32.ld libgloss/sparc/ex930.ld libgloss/sparc/ex931.ld libgloss/sparc/ex934.ld libgloss/sparc/fixctors.c libgloss/sparc/libsys/Makefile.in libgloss/sparc/libsys/_exit.S libgloss/sparc/libsys/aclocal.m4 libgloss/sparc/libsys/cerror.S libgloss/sparc/libsys/configure libgloss/sparc/libsys/configure.in libgloss/sparc/libsys/isatty.c libgloss/sparc/libsys/libsys-crt0.S libgloss/sparc/libsys/sbrk.S libgloss/sparc/libsys/syscall.h libgloss/sparc/libsys/syscallasm.h libgloss/sparc/libsys/template.S libgloss/sparc/libsys/template_r.S libgloss/sparc/salib-701.c libgloss/sparc/salib.c libgloss/sparc/slite.h libgloss/sparc/sparc-stub.c libgloss/sparc/sparc86x.ld libgloss/sparc/sparcl-stub.c libgloss/sparc/sparclet-stub.c libgloss/sparc/sparclite.h libgloss/sparc/sysc-701.c libgloss/sparc/syscalls.c libgloss/sparc/test.c libgloss/sparc/traps.S libgloss/sparc/tsc701.ld libgloss/spu/Makefile.in libgloss/spu/access.c libgloss/spu/aclocal.m4 libgloss/spu/chdir.c libgloss/spu/chmod.c libgloss/spu/chown.c libgloss/spu/close.c libgloss/spu/configure libgloss/spu/configure.in libgloss/spu/conv_stat.c libgloss/spu/crt0.S libgloss/spu/crti.S libgloss/spu/crtn.S libgloss/spu/dirfuncs.c libgloss/spu/dup.c libgloss/spu/dup2.c libgloss/spu/exit.c libgloss/spu/fchdir.c libgloss/spu/fchmod.c libgloss/spu/fchown.c libgloss/spu/fdatasync.c libgloss/spu/fstat.c libgloss/spu/fsync.c libgloss/spu/ftruncate.c libgloss/spu/getcwd.c libgloss/spu/getitimer.c libgloss/spu/getpagesize.c libgloss/spu/getpid.c libgloss/spu/gettimeofday.c libgloss/spu/isatty.c libgloss/spu/jsre.h libgloss/spu/kill.c libgloss/spu/lchown.c libgloss/spu/link.c libgloss/spu/linux_getpid.c libgloss/spu/linux_gettid.c libgloss/spu/linux_syscalls.c libgloss/spu/lockf.c libgloss/spu/lseek.c libgloss/spu/lstat.c libgloss/spu/mkdir.c libgloss/spu/mknod.c libgloss/spu/mkstemp.c libgloss/spu/mktemp.c libgloss/spu/mmap_eaddr.c libgloss/spu/mremap_eaddr.c libgloss/spu/msync_eaddr.c libgloss/spu/munmap_eaddr.c libgloss/spu/nanosleep.c libgloss/spu/open.c libgloss/spu/pread.c libgloss/spu/pwrite.c libgloss/spu/read.c libgloss/spu/readlink.c libgloss/spu/readv.c libgloss/spu/rmdir.c libgloss/spu/sbrk.c libgloss/spu/sched_yield.c libgloss/spu/setitimer.c libgloss/spu/shm_open.c libgloss/spu/shm_unlink.c libgloss/spu/stat.c libgloss/spu/symlink.c libgloss/spu/sync.c libgloss/spu/syscalls.c libgloss/spu/times.c libgloss/spu/truncate.c libgloss/spu/umask.c libgloss/spu/unlink.c libgloss/spu/utime.c libgloss/spu/utimes.c libgloss/spu/write.c libgloss/spu/writev.c libgloss/stat.c libgloss/syscall.h libgloss/testsuite/Makefile.in libgloss/testsuite/config/hppa.mt libgloss/testsuite/config/m68k.mt libgloss/testsuite/config/mips.mt libgloss/testsuite/config/support.c libgloss/testsuite/configure.in libgloss/testsuite/lib/libgloss.exp libgloss/testsuite/libgloss.all/.gdbinit libgloss/testsuite/libgloss.all/Makefile.in libgloss/testsuite/libgloss.all/array.c libgloss/testsuite/libgloss.all/configure.in libgloss/testsuite/libgloss.all/div.c libgloss/testsuite/libgloss.all/double.c libgloss/testsuite/libgloss.all/float.c libgloss/testsuite/libgloss.all/func.c libgloss/testsuite/libgloss.all/io.c libgloss/testsuite/libgloss.all/math.c libgloss/testsuite/libgloss.all/memory.c libgloss/testsuite/libgloss.all/misc.c libgloss/testsuite/libgloss.all/printf.c libgloss/testsuite/libgloss.all/struct.c libgloss/testsuite/libgloss.all/varargs.c libgloss/testsuite/libgloss.all/varargs2.c libgloss/unlink.c libgloss/v850/sys/syscall.h libgloss/wince/Makefile.am libgloss/wince/Makefile.in libgloss/wince/aclocal.m4 libgloss/wince/configure libgloss/wince/configure.in libgloss/write.c libgloss/xc16x/Makefile.in libgloss/xc16x/aclocal.m4 libgloss/xc16x/close.S libgloss/xc16x/configure libgloss/xc16x/configure.in libgloss/xc16x/create.c libgloss/xc16x/crt0.S libgloss/xc16x/fstat.S libgloss/xc16x/getchar1.c libgloss/xc16x/isatty.c libgloss/xc16x/lseek.c libgloss/xc16x/mem-layout.c libgloss/xc16x/misc.c libgloss/xc16x/open.c libgloss/xc16x/read.c libgloss/xc16x/sbrk.c libgloss/xc16x/sys/syscall.h libgloss/xc16x/syscalls.c libgloss/xc16x/trap_handle.c libgloss/xc16x/write.c libgloss/xc16x/xc16x.mt libgloss/xstormy16/Makefile.in libgloss/xstormy16/aclocal.m4 libgloss/xstormy16/close.c libgloss/xstormy16/configure libgloss/xstormy16/configure.in libgloss/xstormy16/crt0.s libgloss/xstormy16/crt0_stub.s libgloss/xstormy16/crti.s libgloss/xstormy16/crtn.s libgloss/xstormy16/eva_app.c libgloss/xstormy16/eva_app.ld libgloss/xstormy16/eva_stub.ld libgloss/xstormy16/fstat.c libgloss/xstormy16/getpid.c libgloss/xstormy16/isatty.c libgloss/xstormy16/kill.c libgloss/xstormy16/lseek.c libgloss/xstormy16/open.c libgloss/xstormy16/sim_high.ld libgloss/xstormy16/sim_malloc_start.s libgloss/xstormy16/sim_rom.ld libgloss/xstormy16/stat.c libgloss/xstormy16/syscalls.S libgloss/xstormy16/syscalls.m4 libgloss/xstormy16/unlink.c libgloss/xstormy16/xstormy16_stub.c texinfo/texinfo.tex
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog131
-rw-r--r--winsup/cygwin/dtable.cc10
-rw-r--r--winsup/cygwin/fhandler.cc120
-rw-r--r--winsup/cygwin/fhandler.h53
-rw-r--r--winsup/cygwin/fhandler_fifo.cc5
-rw-r--r--winsup/cygwin/fhandler_tty.cc64
-rw-r--r--winsup/cygwin/include/sys/strace.h3
-rw-r--r--winsup/cygwin/nlsfuncs.cc27
-rw-r--r--winsup/cygwin/pipe.cc14
-rw-r--r--winsup/cygwin/select.cc145
-rw-r--r--winsup/cygwin/select.h7
-rw-r--r--winsup/cygwin/sigproc.cc1
-rw-r--r--winsup/cygwin/strace.cc3
-rw-r--r--winsup/cygwin/syscalls.cc2
-rw-r--r--winsup/doc/ChangeLog11
-rw-r--r--winsup/doc/cygwinenv.sgml2
-rw-r--r--winsup/doc/effectively.sgml10
-rw-r--r--winsup/doc/faq-using.xml10
-rw-r--r--winsup/doc/setup-net.sgml5
19 files changed, 427 insertions, 196 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 3224cf62e..b2c9203a9 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,127 @@
+2010-04-02 Christopher Faylor <me+cygwin@cgf.cx>
+
+ * fhandler.h (fhandler_base::has_ongoing_io): Declare virtual method.
+ * select.cc (peek_pipe): Reorganize slightly. Don't attempt to check a
+ handle if it has ongoing I/O.
+ (select_pipe_info::select_pipe_info): Delete definition.
+ (select_pipe_info::~select_pipe_info): Delete definition.
+ (thread_pipe): Get rid of WFMO call. Reorganize loop.
+ (pipe_cleanup): Remove dependence on destructor.
+ (thread_serial): Reorganize loop.
+ * select.h (select_pipe_info): Empty this class since it no longer has
+ any special requirements (for now).
+
+ * syscalls.cc (readv): Remove an unneeded debug printf.
+
+2010-04-02 Christopher Faylor <me+cygwin@cgf.cx>
+
+ * fhandler.h (fhandler_base::setup_overlapped): Delete virtual
+ declaration.
+ (fhandler_base::destroy_overlapped): Ditto.
+ (fhandler_base_overlapped): Remove now-unneeded friend.
+ (fhandler_base_overlapped::setup_overlapped): Return int, remove
+ parameter.
+ (fhandler_base_overlapped::get_overlapped): Return reference.
+ (fhandler_base_overlapped::fhandler_base_overlapped): Be more assertive
+ about zeroing everything.
+ (fhandler_base_overlapped::fixup_after_fork): Declare new function.
+ (fhandler_base_overlapped::fixup_after_exec): Ditto.
+ (fhandler_base_overlapped::dup): Ditto.
+ (fhandler_base_overlapped::close): Ditto.
+ * fhandler_fifo.cc (fhandler_fifo::dup): Call
+ fhandler_base_overlapped::dup rather than fhandler_base::dup.
+ * pipe.cc (fhandler_pipe::dup): Ditto.
+ (fhandler_pipe::init): Accommodate change in setup_overlapped arguments
+ for "opened_properly" case.
+
+2010-04-02 Christopher Faylor <me+cygwin@cgf.cx>
+
+ * fhandler_fifo.cc (fhandler_fifo::fhandler_fifo): Properly initialize
+ overlapped part of this class.
+
+2010-04-02 Corinna Vinschen <corinna@vinschen.de>
+
+ * fhandler_tty.cc (fhandler_tty_slave::close): Revert previous change.
+
+2010-04-02 Christopher Faylor <me+cygwin@cgf.cx>
+
+ * select.h (select_pipe_info::add_watch_handle): Delete declaration.
+ * select.cc (select_pipe_info::add_watch_handle): Delete definition.
+ (fhandler_pipe::select_read): Delete call to add_watch_handle.
+ (fhandler_pipe::select_write): Ditto.
+ (fhandler_pipe::select_except): Ditto.
+
+2010-04-02 Christopher Faylor <me+cygwin@cgf.cx>
+
+ * dtable.cc (dtable::init_std_file_from_handle): Avoid adding fh to
+ fdtab until we know that it is good.
+ * fhandler_tty.cc (fhandler_tty_slave::fhandler_tty_slave): Handle
+ error conditions more consistently. Avoid handle leakage on error.
+
+2010-04-02 Corinna Vinschen <corinna@vinschen.de>
+
+ * fhandler_tty.cc (fhandler_tty_slave::close): Avoid potential crash
+ if former open call has been unsuccessful.
+
+2010-04-01 Corinna Vinschen <corinna@vinschen.de>
+
+ * nlsfuncs.cc: Fix indentation.
+
+2010-04-01 Corinna Vinschen <corinna@vinschen.de>
+
+ * nlsfuncs.cc (rebase_locale_buf): New helper function to rebase
+ function pointers in locale structures. Explain why this is necessary.
+ (__set_lc_time_from_win): Use rebase_locale_buf after realloc.
+ (__set_lc_numeric_from_win): Ditto.
+ (__set_lc_monetary_from_win): Ditto.
+
+2010-03-31 Christopher Faylor <me+cygwin@cgf.cx>
+
+ * sigproc.cc (wait_sig): Make sure that strace is activated on
+ __SIGSTRACE by calling new strace::activate function.
+ * strace.cc (strace::activate): Rename from strace::strace.
+ * strace.h (strace::activate): Define new function.
+ (strace::strace): Call activate.
+
+2010-03-31 Christopher Faylor <me+cygwin@cgf.cx>
+
+ * fhandler.h (fhandler_base_overlapped): Temporarily (?) make
+ select_pipe_info a friend until the fhandler_tty intertangling can be
+ worked out.
+ * select.cc (select_pipe_info::add_watch_handle): Don't inspect the
+ overlapped event if we're not waiting for I/O.
+ (fhandler_tty_common::select_*): Change to standard function. Don't do
+ kludgy fhandler_pipe coercion.
+
+2010-03-31 Christopher Faylor <me+cygwin@cgf.cx>
+
+ * fhandler.cc (fhandler_base::dup): Call setup_overlapped
+ unconditionally.
+ (fhandler_base::fork_fixup): Ditto.
+ (fhandler_base::fixup_after_fork): Ditto.
+ (fhandler_base::fixup_after_exec): Ditto.
+ (fhandler_base_overlapped::setup_overlapped): Move to this class from
+ fhandler_base.
+ (handler_base_overlapped::destroy_overlapped): Ditto.
+ (fhandler_base_overlapped::wait_overlapped): Ditto. Track when we
+ expect pending I/O.
+ (fhandler_base_overlapped::read_overlapped): Move to this class from
+ fhandler_base. Return error if ongoing I/O.
+ (fhandler_base_overlapped::write_overlapped): Ditto.
+ (fhandler_base_overlapped::has_ongoing_io): Semi-reinstate previous
+ function.
+ * fhandler.h (fhandler_base::wait_overlapped): Move to
+ fhandler_base_overlapped class.
+ (fhandler_base::write_overlapped): Ditto.
+ (fhandler_base::get_overlapped): Ditto.
+ (fhandler_base::get_overlapped_buffer): Ditto.
+ (fhandler_base_overlapped): New class.
+ (fhandler_pipe): Inherit from fhandler_base_overlapped. Remove
+ overlapped stuff as a result.
+ (fhandler_fifo): Ditto.
+ * pipe.cc (fhandler_pipe::fhandler_pipe): Initialize fhandler_base_overlapped.
+ (pipe): Put a descriptive name in the fhandler.
+
2010-03-30 Corinna Vinschen <corinna@vinschen.de>
* fhandler_socket.cc (fhandler_socket::wait_for_events): Remove call to
@@ -5,11 +129,12 @@
2010-03-30 Thomas Wolff <towo@towo.net>
- * fhandler.h (class dev_console): Drop vt100_graphics_mode_active.
- Add flags vt100_graphics_mode_G0, vt100_graphics_mode_G1 and
- iso_2022_G1.
+ * fhandler.h (class dev_console): Drop vt100_graphics_mode_active. Add
+ flags vt100_graphics_mode_G0, vt100_graphics_mode_G1 and iso_2022_G1.
* fhandler_console.cc: Throughout, tune VT100 graphics mode switching
to follow ISO 2022 strictly.
+ (fhandler_console::write) Reset VT100 graphic mode flags on terminal
+ full reset (ESC c).
2010-03-30 Corinna Vinschen <corinna@vinschen.de>
diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc
index f0738adc2..2076ac998 100644
--- a/winsup/cygwin/dtable.cc
+++ b/winsup/cygwin/dtable.cc
@@ -350,9 +350,6 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle)
else
fh = build_fh_name (name);
- if (fh)
- cygheap->fdtab[fd] = fh;
-
if (name[0])
{
bin = fh->pc_binmode ();
@@ -389,11 +386,12 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle)
This needs further investigation but the workaround not to close
the handles will have a marginal hit of three extra handles per
process at most. */
- if (fh->init (dev == FH_CONSOLE && wincap.has_console_handle_problem ()
+ if (!fh->init (dev == FH_CONSOLE && wincap.has_console_handle_problem ()
? INVALID_HANDLE_VALUE : handle, access, bin))
- set_std_handle (fd);
- else
api_fatal ("couldn't initialize fd %d for %s", fd, fh->get_name ());
+
+ cygheap->fdtab[fd] = fh;
+ set_std_handle (fd);
paranoid_printf ("fd %d, handle %p", fd, handle);
}
}
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index 0e0981fdc..714c46ad0 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -1037,10 +1037,17 @@ fhandler_base::close ()
__seterrno ();
}
- destroy_overlapped ();
return res;
}
+
+int
+fhandler_base_overlapped::close ()
+{
+ destroy_overlapped ();
+ return fhandler_base::close ();
+}
+
int
fhandler_base::ioctl (unsigned int cmd, void *buf)
{
@@ -1162,11 +1169,17 @@ fhandler_base::dup (fhandler_base *child)
VerifyHandle (nh);
child->set_io_handle (nh);
}
- if (get_overlapped ())
- child->setup_overlapped ();
return 0;
}
+int
+fhandler_base_overlapped::dup (fhandler_base *child)
+{
+ int res = fhandler_base::dup (child) ||
+ ((fhandler_base_overlapped *) child)->setup_overlapped ();
+ return res;
+}
+
int fhandler_base::fcntl (int cmd, void *arg)
{
int res;
@@ -1335,8 +1348,6 @@ fhandler_base::fork_fixup (HANDLE parent, HANDLE &h, const char *name)
VerifyHandle (h);
res = true;
}
- if (get_overlapped ())
- setup_overlapped ();
return res;
}
@@ -1355,22 +1366,31 @@ fhandler_base::fixup_after_fork (HANDLE parent)
debug_printf ("inheriting '%s' from parent", get_name ());
if (!nohandle ())
fork_fixup (parent, io_handle, "io_handle");
- if (get_overlapped ())
- setup_overlapped ();
/* POSIX locks are not inherited across fork. */
if (unique_id)
del_my_locks (after_fork);
}
void
+fhandler_base_overlapped::fixup_after_fork (HANDLE parent)
+{
+ setup_overlapped ();
+ fhandler_base::fixup_after_fork (parent);
+}
+
+void
fhandler_base::fixup_after_exec ()
{
debug_printf ("here for '%s'", get_name ());
- if (get_overlapped ())
- setup_overlapped ();
if (unique_id && close_on_exec ())
del_my_locks (after_exec);
}
+void
+fhandler_base_overlapped::fixup_after_exec ()
+{
+ setup_overlapped ();
+ fhandler_base::fixup_after_exec ();
+}
bool
fhandler_base::is_nonblocking ()
@@ -1644,27 +1664,18 @@ fhandler_base::fpathconf (int v)
/* Overlapped I/O */
-bool
-fhandler_base::setup_overlapped (bool doit)
+int
+fhandler_base_overlapped::setup_overlapped ()
{
OVERLAPPED *ov = get_overlapped_buffer ();
memset (ov, 0, sizeof (*ov));
- bool res;
- if (doit)
- {
- set_overlapped (ov);
- res = !!(ov->hEvent = CreateEvent (&sec_none_nih, true, true, NULL));
- }
- else
- {
- set_overlapped (NULL);
- res = false;
- }
- return res;
+ set_overlapped (ov);
+ ov->hEvent = CreateEvent (&sec_none_nih, true, true, NULL);
+ return ov->hEvent ? 0 : -1;
}
void
-fhandler_base::destroy_overlapped ()
+fhandler_base_overlapped::destroy_overlapped ()
{
OVERLAPPED *ov = get_overlapped ();
if (ov && ov->hEvent)
@@ -1672,10 +1683,26 @@ fhandler_base::destroy_overlapped ()
CloseHandle (ov->hEvent);
ov->hEvent = NULL;
}
+ io_pending = false;
+ get_overlapped () = NULL;
+}
+
+bool
+fhandler_base_overlapped::has_ongoing_io ()
+{
+ if (!io_pending)
+ return false;
+ if (WaitForSingleObject (get_overlapped ()->hEvent, 0) != WAIT_OBJECT_0)
+ {
+ set_errno (EAGAIN);
+ return true;
+ }
+ io_pending = false;
+ return false;
}
int
-fhandler_base::wait_overlapped (bool inres, bool writing, DWORD *bytes, DWORD len)
+fhandler_base_overlapped::wait_overlapped (bool inres, bool writing, DWORD *bytes, DWORD len)
{
if (!get_overlapped ())
return inres;
@@ -1687,6 +1714,7 @@ fhandler_base::wait_overlapped (bool inres, bool writing, DWORD *bytes, DWORD le
{
if (inres || err == ERROR_IO_PENDING)
{
+ io_pending = err == ERROR_IO_PENDING;
if (writing && !inres)
*bytes = len; /* This really isn't true but it seems like
this is a corner-case for linux's
@@ -1758,32 +1786,38 @@ fhandler_base::wait_overlapped (bool inres, bool writing, DWORD *bytes, DWORD le
}
void __stdcall
-fhandler_base::read_overlapped (void *ptr, size_t& len)
+fhandler_base_overlapped::read_overlapped (void *ptr, size_t& len)
{
DWORD nbytes;
- while (1)
- {
- bool res = ReadFile (get_handle (), ptr, len, &nbytes,
- get_overlapped ());
- int wres = wait_overlapped (res, false, &nbytes);
- if (wres || !_my_tls.call_signal_handler ())
- break;
- }
+ if (has_ongoing_io ())
+ nbytes = (DWORD) -1;
+ else
+ while (1)
+ {
+ bool res = ReadFile (get_handle (), ptr, len, &nbytes,
+ get_overlapped ());
+ int wres = wait_overlapped (res, false, &nbytes);
+ if (wres || !_my_tls.call_signal_handler ())
+ break;
+ }
len = (size_t) nbytes;
}
ssize_t __stdcall
-fhandler_base::write_overlapped (const void *ptr, size_t len)
+fhandler_base_overlapped::write_overlapped (const void *ptr, size_t len)
{
DWORD nbytes;
- while (1)
- {
- bool res = WriteFile (get_output_handle (), ptr, len, &nbytes,
- get_overlapped ());
- int wres = wait_overlapped (res, true, &nbytes, (size_t) len);
- if (wres || !_my_tls.call_signal_handler ())
- break;
- }
+ if (has_ongoing_io ())
+ nbytes = (DWORD) -1;
+ else
+ while (1)
+ {
+ bool res = WriteFile (get_output_handle (), ptr, len, &nbytes,
+ get_overlapped ());
+ int wres = wait_overlapped (res, true, &nbytes, (size_t) len);
+ if (wres || !_my_tls.call_signal_handler ())
+ break;
+ }
debug_printf ("returning %u", nbytes);
return nbytes;
}
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index 3d1b46bf4..26a7585d7 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -150,9 +150,6 @@ class fhandler_base
void del_my_locks (del_lock_called_from);
HANDLE read_state;
- int wait_overlapped (bool, bool, DWORD *, DWORD = 0) __attribute__ ((regparm (3)));
- bool setup_overlapped (bool doit = true) __attribute__ ((regparm (2)));
- void destroy_overlapped () __attribute__ ((regparm (1)));
public:
class fhandler_base *archetype;
@@ -310,9 +307,7 @@ class fhandler_base
virtual int fcntl (int cmd, void *);
virtual char const *ttyname () { return get_name (); }
virtual void __stdcall read (void *ptr, size_t& len) __attribute__ ((regparm (3)));
- virtual void __stdcall read_overlapped (void *ptr, size_t& len) __attribute__ ((regparm (3)));
virtual ssize_t __stdcall write (const void *ptr, size_t len);
- virtual ssize_t __stdcall write_overlapped (const void *ptr, size_t len);
virtual ssize_t __stdcall readv (const struct iovec *, int iovcnt, ssize_t tot = -1);
virtual ssize_t __stdcall writev (const struct iovec *, int iovcnt, ssize_t tot = -1);
virtual ssize_t __stdcall pread (void *, size_t, _off64_t) __attribute__ ((regparm (3)));
@@ -354,9 +349,6 @@ class fhandler_base
virtual void __stdcall raw_read (void *ptr, size_t& ulen);
virtual ssize_t __stdcall raw_write (const void *ptr, size_t ulen);
- virtual OVERLAPPED *get_overlapped () {return NULL;}
- virtual OVERLAPPED *get_overlapped_buffer () {return NULL;}
- virtual void set_overlapped (OVERLAPPED *) {}
/* Virtual accessor functions to hide the fact
that some fd's have two handles. */
@@ -394,6 +386,7 @@ class fhandler_base
bool issymlink () {return pc.issymlink ();}
bool device_access_denied (int) __attribute__ ((regparm (2)));
int fhaccess (int flags, bool) __attribute__ ((regparm (3)));
+ virtual bool has_ongoing_io () {return false;}
};
class fhandler_mailslot : public fhandler_base
@@ -558,18 +551,41 @@ class fhandler_socket: public fhandler_base
bool is_slow () {return true;}
};
-class fhandler_pipe: public fhandler_base
+class fhandler_base_overlapped: public fhandler_base
{
-private:
- pid_t popen_pid;
+protected:
+ bool io_pending;
OVERLAPPED io_status;
OVERLAPPED *overlapped;
public:
- fhandler_pipe ();
-
- OVERLAPPED *get_overlapped () {return overlapped;}
+ int wait_overlapped (bool, bool, DWORD *, DWORD = 0) __attribute__ ((regparm (3)));
+ int setup_overlapped () __attribute__ ((regparm (1)));
+ void destroy_overlapped () __attribute__ ((regparm (1)));
+ void __stdcall read_overlapped (void *ptr, size_t& len) __attribute__ ((regparm (3)));
+ ssize_t __stdcall write_overlapped (const void *ptr, size_t len);
+ OVERLAPPED *&get_overlapped () {return overlapped;}
OVERLAPPED *get_overlapped_buffer () {return &io_status;}
void set_overlapped (OVERLAPPED *ov) {overlapped = ov;}
+ fhandler_base_overlapped (): io_pending (false), overlapped (NULL)
+ {
+ memset (&io_status, 0, sizeof io_status);
+ }
+ bool has_ongoing_io ();
+
+ void fixup_after_fork (HANDLE);
+ void fixup_after_exec ();
+
+ int close ();
+ int dup (fhandler_base *child);
+};
+
+class fhandler_pipe: public fhandler_base_overlapped
+{
+private:
+ pid_t popen_pid;
+public:
+ fhandler_pipe ();
+
bool ispipe() const { return true; }
@@ -595,7 +611,7 @@ public:
friend class fhandler_fifo;
};
-class fhandler_fifo: public fhandler_base
+class fhandler_fifo: public fhandler_base_overlapped
{
enum fifo_state
{
@@ -611,7 +627,6 @@ class fhandler_fifo: public fhandler_base
fifo_state wait_state;
HANDLE dummy_client;
HANDLE open_nonserver (const char *, unsigned, LPSECURITY_ATTRIBUTES);
- OVERLAPPED io_status;
bool wait (bool) __attribute__ ((regparm (1)));
char *fifo_name (char *) __attribute__ ((regparm (2)));
public:
@@ -624,8 +639,6 @@ public:
bool isfifo () const { return true; }
void set_close_on_exec (bool val);
int __stdcall fstatvfs (struct statvfs *buf) __attribute__ ((regparm (2)));
- OVERLAPPED *get_overlapped () {return &io_status;}
- OVERLAPPED *get_overlapped_buffer () {return &io_status;}
select_record *select_read (select_stuff *);
select_record *select_write (select_stuff *);
select_record *select_except (select_stuff *);
@@ -906,7 +919,9 @@ class dev_console
unsigned rarg;
bool saw_question_mark;
bool saw_greater_than_sign;
- bool vt100_graphics_mode_active;
+ bool vt100_graphics_mode_G0;
+ bool vt100_graphics_mode_G1;
+ bool iso_2022_G1;
bool alternate_charset_active;
bool metabit;
diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc
index b4a78d422..92394dabf 100644
--- a/winsup/cygwin/fhandler_fifo.cc
+++ b/winsup/cygwin/fhandler_fifo.cc
@@ -22,9 +22,8 @@
#include "shared_info.h"
fhandler_fifo::fhandler_fifo ():
- wait_state (fifo_unknown), dummy_client (NULL)
+ fhandler_base_overlapped (), wait_state (fifo_unknown), dummy_client (NULL)
{
- get_overlapped ()->hEvent = NULL;
need_fork_fixup (true);
}
@@ -305,7 +304,7 @@ fhandler_fifo::close ()
int
fhandler_fifo::dup (fhandler_base *child)
{
- int res = fhandler_base::dup (child);
+ int res = fhandler_base_overlapped::dup (child);
fhandler_fifo *fifo_child = (fhandler_fifo *) child;
if (res == 0 && dummy_client)
{
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index 4e4dc5338..7e8254c3c 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -450,6 +450,20 @@ fhandler_tty_slave::fhandler_tty_slave ()
int
fhandler_tty_slave::open (int flags, mode_t)
{
+ HANDLE tty_owner, from_master_local, to_master_local;
+ HANDLE *handles[] =
+ {
+ &from_master_local, &input_available_event, &input_mutex, &inuse,
+ &ioctl_done_event, &ioctl_request_event, &output_done_event,
+ &output_mutex, &to_master_local, &tty_owner,
+ NULL
+ };
+
+ const char *errmsg = NULL;
+
+ for (HANDLE **h = handles; *h; h++)
+ **h = NULL;
+
if (get_device () == FH_TTY)
dev().tty_to_real_device ();
fhandler_tty_slave *arch = (fhandler_tty_slave *) cygheap->fdtab.find_archetype (pc.dev);
@@ -480,22 +494,19 @@ fhandler_tty_slave::open (int flags, mode_t)
if (!(output_mutex = get_ttyp ()->open_output_mutex ()))
{
- termios_printf ("open output mutex failed, %E");
- __seterrno ();
- return 0;
+ errmsg = "open output mutex failed, %E";
+ goto err;
}
if (!(input_mutex = get_ttyp ()->open_input_mutex ()))
{
- termios_printf ("open input mutex failed, %E");
- __seterrno ();
- return 0;
+ errmsg = "open input mutex failed, %E";
+ goto err;
}
shared_name (buf, INPUT_AVAILABLE_EVENT, get_unit ());
if (!(input_available_event = OpenEvent (EVENT_ALL_ACCESS, TRUE, buf)))
{
- termios_printf ("open input event failed, %E");
- __seterrno ();
- return 0;
+ errmsg = "open input event failed, %E";
+ goto err;
}
/* The ioctl events may or may not exist. See output_done_event,
@@ -515,30 +526,26 @@ fhandler_tty_slave::open (int flags, mode_t)
if (!get_ttyp ()->from_master || !get_ttyp ()->to_master)
{
- termios_printf ("tty handles have been closed");
+ errmsg = "tty handles have been closed";
set_errno (EACCES);
- return 0;
+ goto err_no_errno;
}
- HANDLE from_master_local;
- HANDLE to_master_local;
- from_master_local = to_master_local = NULL;
-
if (cygserver_running == CYGSERVER_UNAVAIL
|| !cygserver_attach_tty (&from_master_local, &to_master_local))
{
if (get_ttyp ()->master_pid < 0)
{
+ errmsg = "*** master is closed";
set_errno (EAGAIN);
- termios_printf ("*** master is closed");
- return 0;
+ goto err_no_errno;
}
pinfo p (get_ttyp ()->master_pid);
if (!p)
{
+ errmsg = "*** couldn't find tty master";
set_errno (EAGAIN);
- termios_printf ("*** couldn't find tty master");
- return 0;
+ goto err_no_errno;
}
termios_printf ("cannot dup handles via server. using old method.");
HANDLE tty_owner = OpenProcess (PROCESS_DUP_HANDLE, FALSE,
@@ -548,7 +555,7 @@ fhandler_tty_slave::open (int flags, mode_t)
termios_printf ("can't open tty (%d) handle process %d",
get_unit (), get_ttyp ()->master_pid);
__seterrno ();
- return 0;
+ goto err_no_msg;
}
if (!DuplicateHandle (tty_owner, get_ttyp ()->from_master,
@@ -558,7 +565,7 @@ fhandler_tty_slave::open (int flags, mode_t)
termios_printf ("can't duplicate input from %u/%p, %E",
get_ttyp ()->master_pid, get_ttyp ()->from_master);
__seterrno ();
- return 0;
+ goto err_no_msg;
}
VerifyHandle (from_master_local);
@@ -566,9 +573,8 @@ fhandler_tty_slave::open (int flags, mode_t)
GetCurrentProcess (), &to_master_local, 0, TRUE,
DUPLICATE_SAME_ACCESS))
{
- termios_printf ("can't duplicate output, %E");
- __seterrno ();
- return 0;
+ errmsg = "can't duplicate output, %E";
+ goto err;
}
VerifyHandle (to_master_local);
CloseHandle (tty_owner);
@@ -601,6 +607,16 @@ out:
myself->set_ctty (get_ttyp (), flags, arch);
return 1;
+
+err:
+ __seterrno ();
+err_no_errno:
+ termios_printf (errmsg);
+err_no_msg:
+ for (HANDLE **h = handles; *h; h++)
+ if (**h && **h != INVALID_HANDLE_VALUE)
+ CloseHandle (**h);
+ return 0;
}
int
diff --git a/winsup/cygwin/include/sys/strace.h b/winsup/cygwin/include/sys/strace.h
index 683cde0a6..376cf7ac6 100644
--- a/winsup/cygwin/include/sys/strace.h
+++ b/winsup/cygwin/include/sys/strace.h
@@ -39,7 +39,8 @@ class strace
void write (unsigned category, const char *buf, int count);
unsigned char _active;
public:
- strace ();
+ void activate ();
+ strace () {activate ();}
int microseconds ();
int version;
int lmicrosec;
diff --git a/winsup/cygwin/nlsfuncs.cc b/winsup/cygwin/nlsfuncs.cc
index 3f2279a18..498b36008 100644
--- a/winsup/cygwin/nlsfuncs.cc
+++ b/winsup/cygwin/nlsfuncs.cc
@@ -325,6 +325,21 @@ locale_cmp (const void *a, const void *b)
return strcmp (*la, *lb);
}
+/* Helper function to workaround reallocs which move blocks even if they shrink.
+ Cygwin's realloc is not doing this, but tcsh's, for instance. All lc_foo
+ structures consist entirely of pointers so they are practically pointer
+ arrays. What we do here is just treat the lc_foo pointers as char ** and
+ rebase all char * pointers within, up to the given size of the structure. */
+static void
+rebase_locale_buf (const void *ptrv, const char *newbase, const char *oldbase,
+ const void *ptrvend)
+{
+ const char **ptrs = (const char **) ptrv;
+ const char **ptrsend = (const char **) ptrvend;
+ while (ptrs < ptrsend)
+ *ptrs++ += newbase - oldbase;
+}
+
static char *
__getlocaleinfo (LCID lcid, LCTYPE type, char **ptr, size_t size,
wctomb_p f_wctomb, const char *charset)
@@ -625,6 +640,9 @@ __set_lc_time_from_win (const char *name, struct lc_time_T *_time_locale,
era = NULL;
else
{
+ if (tmp != new_lc_time_buf)
+ rebase_locale_buf (_time_locale, tmp, new_lc_time_buf,
+ _time_locale + 1);
lc_time_ptr = tmp + (lc_time_ptr - new_lc_time_buf);
new_lc_time_buf = tmp;
lc_time_end = new_lc_time_buf + len;
@@ -674,6 +692,9 @@ __set_lc_time_from_win (const char *name, struct lc_time_T *_time_locale,
free (new_lc_time_buf);
return -1;
}
+ if (tmp != new_lc_time_buf)
+ rebase_locale_buf (_time_locale, tmp, new_lc_time_buf,
+ _time_locale + 1);
if (*lc_time_buf)
free (*lc_time_buf);
*lc_time_buf = tmp;
@@ -717,6 +738,9 @@ __set_lc_numeric_from_win (const char *name,
free (new_lc_numeric_buf);
return -1;
}
+ if (tmp != new_lc_numeric_buf)
+ rebase_locale_buf (_numeric_locale, tmp, new_lc_numeric_buf,
+ _numeric_locale + 1);
if (*lc_numeric_buf)
free (*lc_numeric_buf);
*lc_numeric_buf = tmp;
@@ -816,6 +840,9 @@ __set_lc_monetary_from_win (const char *name,
free (new_lc_monetary_buf);
return -1;
}
+ if (tmp != new_lc_monetary_buf)
+ rebase_locale_buf (_monetary_locale, tmp, new_lc_monetary_buf,
+ _monetary_locale + 1);
if (*lc_monetary_buf)
free (*lc_monetary_buf);
*lc_monetary_buf = tmp;
diff --git a/winsup/cygwin/pipe.cc b/winsup/cygwin/pipe.cc
index 5194856bc..29bd73205 100644
--- a/winsup/cygwin/pipe.cc
+++ b/winsup/cygwin/pipe.cc
@@ -24,7 +24,7 @@ details. */
#include "shared_info.h"
fhandler_pipe::fhandler_pipe ()
- : fhandler_base (), popen_pid (0), overlapped (NULL)
+ : fhandler_base_overlapped (), popen_pid (0)
{
need_fork_fixup (true);
uninterruptible_io (true);
@@ -54,7 +54,10 @@ fhandler_pipe::init (HANDLE f, DWORD a, mode_t mode)
a &= ~FILE_CREATE_PIPE_INSTANCE;
fhandler_base::init (f, a, mode);
close_on_exec (mode & O_CLOEXEC);
- setup_overlapped (opened_properly);
+ if (opened_properly)
+ setup_overlapped ();
+ else
+ destroy_overlapped ();
return 1;
}
@@ -185,7 +188,7 @@ fhandler_pipe::dup (fhandler_base *child)
ftp->set_popen_pid (0);
int res;
- if (get_handle () && fhandler_base::dup (child))
+ if (get_handle () && fhandler_base_overlapped::dup (child))
res = -1;
else
res = 0;
@@ -378,6 +381,11 @@ pipe (int filedes[2])
{
cygheap_fdnew fdin;
cygheap_fdnew fdout (fdin, false);
+ char buf[sizeof ("/dev/fd/pipe:[2147483647]")];
+ __small_sprintf (buf, "/dev/fd/pipe:[%d]", (int) fdin);
+ fhs[0]->pc.set_normalized_path (buf);
+ __small_sprintf (buf, "pipe:[%d]", (int) fdout);
+ fhs[1]->pc.set_normalized_path (buf);
fdin = fhs[0];
fdout = fhs[1];
filedes[0] = fdin;
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index e1906cb14..41636d179 100644
--- a/winsup/cygwin/select.cc
+++ b/winsup/cygwin/select.cc
@@ -1,7 +1,7 @@
/* select.cc
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007, 2008, 2009 Red Hat, Inc.
+ 2005, 2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
This file is part of Cygwin.
@@ -429,12 +429,17 @@ no_verify (select_record *, fd_set *, fd_set *, fd_set *)
static int
peek_pipe (select_record *s, bool from_select)
{
+ HANDLE h;
+ set_handle_or_return_if_not_open (h, s);
+
int n = 0;
int gotone = 0;
- fhandler_base *fh = s->fh;
+ fhandler_base *fh = (fhandler_base *) s->fh;
- HANDLE h;
- set_handle_or_return_if_not_open (h, s);
+ /* Don't check if this is a non-blocking fd and I/O is still active.
+ That could give a false-positive with peek_pipe and friends. */
+ if (fh->has_ongoing_io ())
+ return 0;
/* Don't perform complicated tests if we don't need to. */
if (!s->read_selected && !s->except_selected)
@@ -577,72 +582,35 @@ out:
static int start_thread_pipe (select_record *me, select_stuff *stuff);
-select_pipe_info::select_pipe_info ()
-{
- n = 1;
- w4[0] = CreateEvent (&sec_none_nih, true, false, NULL);
-}
-
-select_pipe_info::~select_pipe_info ()
-{
- if (thread)
- {
- SetEvent (w4[0]);
- stop_thread = true;
- thread->detach ();
- }
- ForceCloseHandle (w4[0]);
-}
-
-void
-select_pipe_info::add_watch_handle (fhandler_pipe *fh)
-{
- if (fh->get_overlapped () && fh->get_overlapped ()->hEvent)
- w4[n++] = fh->get_overlapped ()->hEvent;
-}
-
static DWORD WINAPI
thread_pipe (void *arg)
{
select_pipe_info *pi = (select_pipe_info *) arg;
- bool gotone = false;
DWORD sleep_time = 0;
+ bool looping = true;
- for (;;)
+ while (looping)
{
- select_record *s = pi->start;
- if (pi->n > 1)
- switch (WaitForMultipleObjects (pi->n, pi->w4, false, INFINITE))
- {
- case WAIT_OBJECT_0:
- goto out;
- default:
- break;
- }
- while ((s = s->next))
+ for (select_record *s = pi->start; (s = s->next); )
if (s->startup == start_thread_pipe)
{
if (peek_pipe (s, true))
- gotone = true;
+ looping = false;
if (pi->stop_thread)
{
select_printf ("stopping");
- goto out;
+ looping = false;
+ break;
}
}
- /* Paranoid check */
- if (pi->stop_thread)
- {
- select_printf ("stopping from outer loop");
- break;
- }
- if (gotone)
+ if (!looping)
break;
Sleep (sleep_time >> 3);
if (sleep_time < 80)
++sleep_time;
+ if (pi->stop_thread)
+ break;
}
-out:
return 0;
}
@@ -667,9 +635,12 @@ start_thread_pipe (select_record *me, select_stuff *stuff)
static void
pipe_cleanup (select_record *, select_stuff *stuff)
{
- if (stuff->device_specific_pipe)
+ select_pipe_info *pi = (select_pipe_info *) stuff->device_specific_pipe;
+ if (pi && pi->thread)
{
- delete stuff->device_specific_pipe;
+ pi->stop_thread = true;
+ pi->thread->detach ();
+ delete pi;
stuff->device_specific_pipe = NULL;
}
}
@@ -691,7 +662,6 @@ fhandler_pipe::select_read (select_stuff *ss)
if (!ss->device_specific_pipe
&& (ss->device_specific_pipe = new select_pipe_info) == NULL)
return NULL;
- ss->device_specific_pipe->add_watch_handle (this);
select_record *s = ss->start.next;
s->startup = start_thread_pipe;
@@ -709,7 +679,6 @@ fhandler_pipe::select_write (select_stuff *ss)
if (!ss->device_specific_pipe
&& (ss->device_specific_pipe = new select_pipe_info) == NULL)
return NULL;
- ss->device_specific_pipe->add_watch_handle (this);
select_record *s = ss->start.next;
s->startup = start_thread_pipe;
s->peek = peek_pipe;
@@ -726,7 +695,6 @@ fhandler_pipe::select_except (select_stuff *ss)
if (!ss->device_specific_pipe
&& (ss->device_specific_pipe = new select_pipe_info) == NULL)
return NULL;
- ss->device_specific_pipe->add_watch_handle (this);
select_record *s = ss->start.next;
s->startup = start_thread_pipe;
s->peek = peek_pipe;
@@ -906,19 +874,50 @@ fhandler_console::select_except (select_stuff *ss)
select_record *
fhandler_tty_common::select_read (select_stuff *ss)
{
- return ((fhandler_pipe *) this)->fhandler_pipe::select_read (ss);
+ if (!ss->device_specific_pipe
+ && (ss->device_specific_pipe = new select_pipe_info) == NULL)
+ return NULL;
+
+ select_record *s = ss->start.next;
+ s->startup = start_thread_pipe;
+ s->peek = peek_pipe;
+ s->verify = verify_ok;
+ s->cleanup = pipe_cleanup;
+ s->read_selected = true;
+ s->read_ready = false;
+ return s;
}
select_record *
fhandler_tty_common::select_write (select_stuff *ss)
{
- return ((fhandler_pipe *) this)->fhandler_pipe::select_write (ss);
+ if (!ss->device_specific_pipe
+ && (ss->device_specific_pipe = new select_pipe_info) == NULL)
+ return NULL;
+ select_record *s = ss->start.next;
+ s->startup = start_thread_pipe;
+ s->peek = peek_pipe;
+ s->verify = verify_ok;
+ s->cleanup = pipe_cleanup;
+ s->write_selected = true;
+ s->write_ready = false;
+ return s;
}
select_record *
fhandler_tty_common::select_except (select_stuff *ss)
{
- return ((fhandler_pipe *) this)->fhandler_pipe::select_except (ss);
+ if (!ss->device_specific_pipe
+ && (ss->device_specific_pipe = new select_pipe_info) == NULL)
+ return NULL;
+ select_record *s = ss->start.next;
+ s->startup = start_thread_pipe;
+ s->peek = peek_pipe;
+ s->verify = verify_ok;
+ s->cleanup = pipe_cleanup;
+ s->except_selected = true;
+ s->except_ready = false;
+ return s;
}
static int
@@ -1098,25 +1097,23 @@ static DWORD WINAPI
thread_serial (void *arg)
{
select_serial_info *si = (select_serial_info *) arg;
- bool gotone = false;
+ bool looping = true;
- for (;;)
- {
- select_record *s = si->start;
- while ((s = s->next))
- if (s->startup == start_thread_serial)
- {
- if (peek_serial (s, true))
- gotone = true;
- }
- if (si->stop_thread)
+ while (looping)
+ for (select_record *s = si->start; (s = s->next); )
+ if (s->startup != start_thread_serial)
+ continue;
+ else
{
- select_printf ("stopping");
- break;
+ if (peek_serial (s, true))
+ looping = false;
+ if (si->stop_thread)
+ {
+ select_printf ("stopping");
+ looping = false;
+ break;
+ }
}
- if (gotone)
- break;
- }
select_printf ("exiting");
return 0;
diff --git a/winsup/cygwin/select.h b/winsup/cygwin/select.h
index 743222ebd..8734b1e04 100644
--- a/winsup/cygwin/select.h
+++ b/winsup/cygwin/select.h
@@ -1,7 +1,7 @@
/* select.h
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007, 2008, 2009 Red Hat, Inc.
+ 2005, 2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
This file is part of Cygwin.
@@ -49,11 +49,6 @@ struct select_info
struct select_pipe_info: public select_info
{
- DWORD n;
- HANDLE w4[MAXIMUM_WAIT_OBJECTS];
- select_pipe_info ();
- ~select_pipe_info ();
- void add_watch_handle (fhandler_pipe *);
};
struct select_socket_info: public select_info
diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc
index cb70568fa..74e96ce30 100644
--- a/winsup/cygwin/sigproc.cc
+++ b/winsup/cygwin/sigproc.cc
@@ -1224,6 +1224,7 @@ wait_sig (VOID *)
talktome (&pack.si);
break;
case __SIGSTRACE:
+ strace.activate ();
strace.hello ();
break;
case __SIGPENDING:
diff --git a/winsup/cygwin/strace.cc b/winsup/cygwin/strace.cc
index fb62e29dc..beba5b335 100644
--- a/winsup/cygwin/strace.cc
+++ b/winsup/cygwin/strace.cc
@@ -31,7 +31,8 @@ class strace NO_COPY strace;
#ifndef NOSTRACE
-strace::strace ()
+void
+strace::activate ()
{
if (!dynamically_loaded && !_active && being_debugged ())
{
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index 96cf16dde..65bab2b10 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -913,7 +913,7 @@ readv (int fd, const struct iovec *const iov, const int iovcnt)
fd, iov, iovcnt, wait ? "" : "non", sigcatchers);
if (wait && (!cfd->is_slow () || cfd->uninterruptible_io ()))
- debug_printf ("no need to call ready_for_read");
+ /* no need to call ready_for_read */;
else if (!cfd->ready_for_read (fd, wait))
{
res = -1;
diff --git a/winsup/doc/ChangeLog b/winsup/doc/ChangeLog
index 10a0f2286..d8f31aafc 100644
--- a/winsup/doc/ChangeLog
+++ b/winsup/doc/ChangeLog
@@ -1,3 +1,14 @@
+2010-04-01 Charles Wilson <cygwin@cwilson.fastmail.fm>
+
+ * setup-net.sgml: Remove more mentions of rxvt.
+
+2010-03-31 Christopher Faylor <me+cygwin@cgf.cx>
+
+ * cygwinenv.sgml: Remove/deprecate mention of rxvt.
+ * effectively.sgml: Ditto.
+ * faq-using.xml: Ditto.
+ * setup-net.sgml: Ditto.
+
2010-03-29 Corinna Vinschen <corinna@vinschen.de>
* new-features.sgml (ov-new1.7.3): New section.
diff --git a/winsup/doc/cygwinenv.sgml b/winsup/doc/cygwinenv.sgml
index 23e4d64fc..ea1f0747f 100644
--- a/winsup/doc/cygwinenv.sgml
+++ b/winsup/doc/cygwinenv.sgml
@@ -97,7 +97,7 @@ Note that this has been changed such that ^D works as
expected instead of ^Z, and is settable via <command>stty</command>.
This option must be specified before starting a Cygwin shell
and it cannot be changed in the shell. It should not be set when using
-other terminals (i.e., rxvt or xterm).
+other terminals (i.e., mintty or xterm).
</para>
</listitem>
diff --git a/winsup/doc/effectively.sgml b/winsup/doc/effectively.sgml
index 945414b6a..73d9d2847 100644
--- a/winsup/doc/effectively.sgml
+++ b/winsup/doc/effectively.sgml
@@ -87,10 +87,12 @@ Windows programs, use a DOS prompt, running only the occasional Cygwin
command or script. Next would be to run <command>bash</command> within
a default DOS box. To make Cygwin more Unix compatible in this case,
set <envar>CYGWIN=tty</envar> (see <xref linkend="using-cygwinenv"></xref>).
-Alternatively, the optional <systemitem>rxvt</systemitem> package provides
-a native-Windows version of the popular X11 terminal emulator (it is not
-necessary to set <envar>CYGWIN=tty</envar> with <command>rxvt</command>).
-Using <command>rxvt.exe</command> provides the most Unix-like environment,
+Alternatively, the optional <systemitem>mintty</systemitem> package
+provides a terminal emulator similar to such X11 programs as
+<command>xterm</command> (it is not necessary to set
+<envar>CYGWIN=tty</envar> with <command>mintty</command> nor is it
+necessary to be running <systemitem>/Cygwin/X</systemitem>). Using
+<command>mintty.exe</command> provides the most Unix-like environment,
but expect some compatibility problems with Windows programs.
</para>
diff --git a/winsup/doc/faq-using.xml b/winsup/doc/faq-using.xml
index d8fbcf382..f013703b0 100644
--- a/winsup/doc/faq-using.xml
+++ b/winsup/doc/faq-using.xml
@@ -580,8 +580,8 @@ for more details.
<question><para>How can I copy and paste into Cygwin console windows?</para></question>
<answer>
-<para>First, consider using rxvt or mintty instead of the standard console
-window. In rxvt/mintty, selecting with the left-mouse also copies,
+<para>First, consider using mintty instead of the standard console
+window. In mintty, selecting with the left-mouse also copies,
and middle-mouse pastes. It couldn't be easier!
</para>
<para>In Windows's console window, open the properties dialog.
@@ -946,9 +946,9 @@ Emacs or XEmacs from Cygwin Setup.
<question><para>Is there a better alternative to the standard console window?</para></question>
<answer>
-<para>Yes! Use rxvt or mintty instead. Both are optional packages in
-Cygwin Setup. You can use rxvt with or without X11, while mintty is a
-Cygwin application providing a native GUI.
+<para>Yes! Use <command>mintty</command> instead. <command>mintty</command> is an optional packages in
+Cygwin Setup. <command>mintty</command> is a Cygwin application providing a native GUI without
+the need of X11.
</para>
</answer></qandaentry>
diff --git a/winsup/doc/setup-net.sgml b/winsup/doc/setup-net.sgml
index 55099ff09..6c224dc77 100644
--- a/winsup/doc/setup-net.sgml
+++ b/winsup/doc/setup-net.sgml
@@ -215,8 +215,9 @@ shows progress bars for the current task and total remaining disk space.
<para>
You may choose to install shortcuts on the Desktop and/or Start Menu
to start a <literal>bash</literal> shell. If you prefer to use a different
-shell or the native Windows version of <literal>rxvt</literal>, you can
-use these shortcuts as a guide to creating your own.
+shell or terminal emulator such as <literal>mintty</literal> or
+<literal>xterm</literal>, you can use these shortcuts as a guide to
+creating your own.
</para>
</sect2>