From b5279ecc51ff751ccd052fbb7c20efd529575f7e Mon Sep 17 00:00:00 2001 From: cvs2svn <> Date: Tue, 18 Feb 2014 19:58:41 +0000 Subject: This commit was manufactured by cvs2svn to create tag 'cygwin-pre-user-db'. Sprout from cygwin-1_7_29-release-branchpoint 2014-02-18 19:58:40 UTC cvs2svn 'This commit was manufactured by cvs2svn to create branch 'cygwin-1_7_29' Cherrypick from master 2014-02-08 22:25:11 UTC Corinna Vinschen 'Fix ChangeLog': winsup/cygwin/ChangeLog winsup/cygwin/miscfuncs.cc winsup/cygwin/miscfuncs.h winsup/cygwin/mount.cc Delete: winsup/COPYING winsup/CYGWIN_LICENSE winsup/ChangeLog winsup/Makefile.common winsup/Makefile.in winsup/README winsup/acinclude.m4 winsup/aclocal.m4 winsup/autogen.sh winsup/c++wrap winsup/ccwrap winsup/config.guess winsup/config.sub winsup/configure winsup/configure.ac winsup/configure.cygwin winsup/cygserver/ChangeLog winsup/cygserver/ChangeLog.64bit winsup/cygserver/Makefile.in winsup/cygserver/README winsup/cygserver/aclocal.m4 winsup/cygserver/autogen.sh winsup/cygserver/bsd_helper.cc winsup/cygserver/bsd_helper.h winsup/cygserver/bsd_log.cc winsup/cygserver/bsd_log.h winsup/cygserver/bsd_mutex.cc winsup/cygserver/bsd_mutex.h winsup/cygserver/client.cc winsup/cygserver/configure winsup/cygserver/configure.ac winsup/cygserver/cygserver-config winsup/cygserver/cygserver.cc winsup/cygserver/cygserver.conf winsup/cygserver/msg.cc winsup/cygserver/process.cc winsup/cygserver/process.h winsup/cygserver/sem.cc winsup/cygserver/setpwd.cc winsup/cygserver/shm.cc winsup/cygserver/sysv_msg.cc winsup/cygserver/sysv_sem.cc winsup/cygserver/sysv_shm.cc winsup/cygserver/threaded_queue.cc winsup/cygserver/threaded_queue.h winsup/cygserver/transport.cc winsup/cygserver/transport.h winsup/cygserver/transport_pipes.cc winsup/cygserver/transport_pipes.h winsup/cygserver/woutsup.h winsup/cygwin/release/1.7.29 winsup/doc/.cvsignore winsup/doc/ChangeLog winsup/doc/Makefile.in winsup/doc/README winsup/doc/Wishlist winsup/doc/aclocal.m4 winsup/doc/bodysnatcher.pl winsup/doc/configure winsup/doc/configure.ac winsup/doc/cygserver.xml winsup/doc/cygwin-api.in.xml winsup/doc/cygwin-ug-net.xml winsup/doc/cygwin.xsl winsup/doc/cygwinenv.xml winsup/doc/dll.xml winsup/doc/doctool.c winsup/doc/doctool.txt winsup/doc/effectively.xml winsup/doc/faq-api.xml winsup/doc/faq-copyright.xml winsup/doc/faq-programming.xml winsup/doc/faq-resources.xml winsup/doc/faq-setup.xml winsup/doc/faq-using.xml winsup/doc/faq-what.xml winsup/doc/faq.xml winsup/doc/fhandler-tut.txt winsup/doc/filemodes.xml winsup/doc/fo.xsl winsup/doc/gcc.xml winsup/doc/gdb.xml winsup/doc/highlights.xml winsup/doc/legal.xml winsup/doc/new-features.xml winsup/doc/ntsec.xml winsup/doc/ov-ex-unix.xml winsup/doc/ov-ex-win.xml winsup/doc/overview.xml winsup/doc/pathnames.xml winsup/doc/programming.xml winsup/doc/setup-env.xml winsup/doc/setup-files.xml winsup/doc/setup-locale.xml winsup/doc/setup-maxmem.xml winsup/doc/setup-net.xml winsup/doc/specialnames.xml winsup/doc/textbinary.xml winsup/doc/ug-info.xml winsup/doc/using.xml winsup/doc/windres.xml winsup/doc/xidepend winsup/install-sh winsup/lsaauth/ChangeLog winsup/lsaauth/ChangeLog.64bit winsup/lsaauth/Makefile.in winsup/lsaauth/aclocal.m4 winsup/lsaauth/configure winsup/lsaauth/configure.ac winsup/lsaauth/cyglsa-config winsup/lsaauth/cyglsa.c winsup/lsaauth/cyglsa.din winsup/lsaauth/cyglsa64.def winsup/testsuite/ChangeLog winsup/testsuite/Makefile.in winsup/testsuite/README winsup/testsuite/aclocal.m4 winsup/testsuite/config/default.exp winsup/testsuite/configure winsup/testsuite/configure.ac winsup/testsuite/cygrun.c winsup/testsuite/libltp/include/dataascii.h winsup/testsuite/libltp/include/databin.h winsup/testsuite/libltp/include/file_lock.h winsup/testsuite/libltp/include/forker.h winsup/testsuite/libltp/include/open_flags.h winsup/testsuite/libltp/include/pattern.h winsup/testsuite/libltp/include/random_range.h winsup/testsuite/libltp/include/rmobj.h winsup/testsuite/libltp/include/search_path.h winsup/testsuite/libltp/include/str_to_bytes.h winsup/testsuite/libltp/include/string_to_tokens.h winsup/testsuite/libltp/include/test.h winsup/testsuite/libltp/include/tlibio.h winsup/testsuite/libltp/include/usctest.h winsup/testsuite/libltp/include/write_log.h winsup/testsuite/libltp/lib/dataascii.c winsup/testsuite/libltp/lib/databin.c winsup/testsuite/libltp/lib/datapid.c winsup/testsuite/libltp/lib/forker.c winsup/testsuite/libltp/lib/get_high_address.c winsup/testsuite/libltp/lib/libtestsuite.c winsup/testsuite/libltp/lib/open_flags.c winsup/testsuite/libltp/lib/parse_opts.c winsup/testsuite/libltp/lib/pattern.c winsup/testsuite/libltp/lib/rmobj.c winsup/testsuite/libltp/lib/search_path.c winsup/testsuite/libltp/lib/str_to_bytes.c winsup/testsuite/libltp/lib/string_to_tokens.c winsup/testsuite/libltp/lib/tst_res.c winsup/testsuite/libltp/lib/tst_sig.c winsup/testsuite/libltp/lib/tst_tmpdir.c winsup/testsuite/libltp/lib/write_log.c winsup/testsuite/winsup.api/checksignal.c winsup/testsuite/winsup.api/crlf.c winsup/testsuite/winsup.api/cygload.cc winsup/testsuite/winsup.api/cygload.exp winsup/testsuite/winsup.api/cygload.h winsup/testsuite/winsup.api/devdsp.c winsup/testsuite/winsup.api/devdsp_okay.h winsup/testsuite/winsup.api/devzero.c winsup/testsuite/winsup.api/iospeed.c winsup/testsuite/winsup.api/known_bugs.tcl winsup/testsuite/winsup.api/ltp/access01.c winsup/testsuite/winsup.api/ltp/access03.c winsup/testsuite/winsup.api/ltp/access04.c winsup/testsuite/winsup.api/ltp/access05.c winsup/testsuite/winsup.api/ltp/alarm01.c winsup/testsuite/winsup.api/ltp/alarm02.c winsup/testsuite/winsup.api/ltp/alarm03.c winsup/testsuite/winsup.api/ltp/alarm07.c winsup/testsuite/winsup.api/ltp/asyncio02.c winsup/testsuite/winsup.api/ltp/chdir02.c winsup/testsuite/winsup.api/ltp/chdir04.c winsup/testsuite/winsup.api/ltp/chmod01.c winsup/testsuite/winsup.api/ltp/chmod02.c winsup/testsuite/winsup.api/ltp/chown01.c winsup/testsuite/winsup.api/ltp/close01.c winsup/testsuite/winsup.api/ltp/close02.c winsup/testsuite/winsup.api/ltp/close08.c winsup/testsuite/winsup.api/ltp/creat01.c winsup/testsuite/winsup.api/ltp/creat03.c winsup/testsuite/winsup.api/ltp/creat09.c winsup/testsuite/winsup.api/ltp/dup01.c winsup/testsuite/winsup.api/ltp/dup02.c winsup/testsuite/winsup.api/ltp/dup03.c winsup/testsuite/winsup.api/ltp/dup04.c winsup/testsuite/winsup.api/ltp/dup05.c winsup/testsuite/winsup.api/ltp/execl01.c winsup/testsuite/winsup.api/ltp/execle01.c winsup/testsuite/winsup.api/ltp/execlp01.c winsup/testsuite/winsup.api/ltp/execv01.c winsup/testsuite/winsup.api/ltp/execve01.c winsup/testsuite/winsup.api/ltp/execvp01.c winsup/testsuite/winsup.api/ltp/exit01.c winsup/testsuite/winsup.api/ltp/exit02.c winsup/testsuite/winsup.api/ltp/fchdir01.c winsup/testsuite/winsup.api/ltp/fchdir02.c winsup/testsuite/winsup.api/ltp/fchmod01.c winsup/testsuite/winsup.api/ltp/fchown01.c winsup/testsuite/winsup.api/ltp/fcntl02.c winsup/testsuite/winsup.api/ltp/fcntl03.c winsup/testsuite/winsup.api/ltp/fcntl04.c winsup/testsuite/winsup.api/ltp/fcntl05.c winsup/testsuite/winsup.api/ltp/fcntl07.c winsup/testsuite/winsup.api/ltp/fcntl07B.c winsup/testsuite/winsup.api/ltp/fcntl08.c winsup/testsuite/winsup.api/ltp/fcntl09.c winsup/testsuite/winsup.api/ltp/fcntl10.c winsup/testsuite/winsup.api/ltp/fork01.c winsup/testsuite/winsup.api/ltp/fork02.c winsup/testsuite/winsup.api/ltp/fork03.c winsup/testsuite/winsup.api/ltp/fork04.c winsup/testsuite/winsup.api/ltp/fork06.c winsup/testsuite/winsup.api/ltp/fork07.c winsup/testsuite/winsup.api/ltp/fork09.c winsup/testsuite/winsup.api/ltp/fork10.c winsup/testsuite/winsup.api/ltp/fork11.c winsup/testsuite/winsup.api/ltp/fpathconf01.c winsup/testsuite/winsup.api/ltp/fstat01.c winsup/testsuite/winsup.api/ltp/fstat02.c winsup/testsuite/winsup.api/ltp/fstat03.c winsup/testsuite/winsup.api/ltp/fstat04.c winsup/testsuite/winsup.api/ltp/fsync01.c winsup/testsuite/winsup.api/ltp/ftruncate01.c winsup/testsuite/winsup.api/ltp/ftruncate02.c winsup/testsuite/winsup.api/ltp/ftruncate03.c winsup/testsuite/winsup.api/ltp/getegid01.c winsup/testsuite/winsup.api/ltp/geteuid01.c winsup/testsuite/winsup.api/ltp/getgid01.c winsup/testsuite/winsup.api/ltp/getgid02.c winsup/testsuite/winsup.api/ltp/getgid03.c winsup/testsuite/winsup.api/ltp/getgroups01.c winsup/testsuite/winsup.api/ltp/getgroups02.c winsup/testsuite/winsup.api/ltp/gethostid01.c winsup/testsuite/winsup.api/ltp/gethostname01.c winsup/testsuite/winsup.api/ltp/getpgid01.c winsup/testsuite/winsup.api/ltp/getpgid02.c winsup/testsuite/winsup.api/ltp/getpgrp01.c winsup/testsuite/winsup.api/ltp/getpid01.c winsup/testsuite/winsup.api/ltp/getpid02.c winsup/testsuite/winsup.api/ltp/getppid01.c winsup/testsuite/winsup.api/ltp/getppid02.c winsup/testsuite/winsup.api/ltp/getuid01.c winsup/testsuite/winsup.api/ltp/getuid02.c winsup/testsuite/winsup.api/ltp/getuid03.c winsup/testsuite/winsup.api/ltp/kill01.c winsup/testsuite/winsup.api/ltp/kill02.c winsup/testsuite/winsup.api/ltp/kill03.c winsup/testsuite/winsup.api/ltp/kill04.c winsup/testsuite/winsup.api/ltp/kill09.c winsup/testsuite/winsup.api/ltp/link02.c winsup/testsuite/winsup.api/ltp/link03.c winsup/testsuite/winsup.api/ltp/link04.c winsup/testsuite/winsup.api/ltp/link05.c winsup/testsuite/winsup.api/ltp/lseek01.c winsup/testsuite/winsup.api/ltp/lseek02.c winsup/testsuite/winsup.api/ltp/lseek03.c winsup/testsuite/winsup.api/ltp/lseek04.c winsup/testsuite/winsup.api/ltp/lseek05.c winsup/testsuite/winsup.api/ltp/lseek06.c winsup/testsuite/winsup.api/ltp/lseek07.c winsup/testsuite/winsup.api/ltp/lseek08.c winsup/testsuite/winsup.api/ltp/lseek09.c winsup/testsuite/winsup.api/ltp/lseek10.c winsup/testsuite/winsup.api/ltp/lstat02.c winsup/testsuite/winsup.api/ltp/mkdir01.c winsup/testsuite/winsup.api/ltp/mkdir08.c winsup/testsuite/winsup.api/ltp/mknod01.c winsup/testsuite/winsup.api/ltp/mmap001.c winsup/testsuite/winsup.api/ltp/mmap02.c winsup/testsuite/winsup.api/ltp/mmap03.c winsup/testsuite/winsup.api/ltp/mmap04.c winsup/testsuite/winsup.api/ltp/mmap05.c winsup/testsuite/winsup.api/ltp/mmap06.c winsup/testsuite/winsup.api/ltp/mmap07.c winsup/testsuite/winsup.api/ltp/mmap08.c winsup/testsuite/winsup.api/ltp/munmap01.c winsup/testsuite/winsup.api/ltp/munmap02.c winsup/testsuite/winsup.api/ltp/nice05.c winsup/testsuite/winsup.api/ltp/open02.c winsup/testsuite/winsup.api/ltp/open03.c winsup/testsuite/winsup.api/ltp/pathconf01.c winsup/testsuite/winsup.api/ltp/pause01.c winsup/testsuite/winsup.api/ltp/pipe01.c winsup/testsuite/winsup.api/ltp/pipe08.c winsup/testsuite/winsup.api/ltp/pipe09.c winsup/testsuite/winsup.api/ltp/pipe10.c winsup/testsuite/winsup.api/ltp/pipe11.c winsup/testsuite/winsup.api/ltp/poll01.c winsup/testsuite/winsup.api/ltp/read01.c winsup/testsuite/winsup.api/ltp/read04.c winsup/testsuite/winsup.api/ltp/readdir01.c winsup/testsuite/winsup.api/ltp/readlink01.c winsup/testsuite/winsup.api/ltp/readlink02.c winsup/testsuite/winsup.api/ltp/readlink03.c winsup/testsuite/winsup.api/ltp/rename01.c winsup/testsuite/winsup.api/ltp/rename02.c winsup/testsuite/winsup.api/ltp/rename08.c winsup/testsuite/winsup.api/ltp/rename10.c winsup/testsuite/winsup.api/ltp/rmdir01.c winsup/testsuite/winsup.api/ltp/rmdir04.c winsup/testsuite/winsup.api/ltp/rmdir05.c winsup/testsuite/winsup.api/ltp/sbrk01.c winsup/testsuite/winsup.api/ltp/select01.c winsup/testsuite/winsup.api/ltp/select02.c winsup/testsuite/winsup.api/ltp/select03.c winsup/testsuite/winsup.api/ltp/setgid01.c winsup/testsuite/winsup.api/ltp/setgroups01.c winsup/testsuite/winsup.api/ltp/setpgid01.c winsup/testsuite/winsup.api/ltp/setregid01.c winsup/testsuite/winsup.api/ltp/setreuid01.c winsup/testsuite/winsup.api/ltp/setuid01.c winsup/testsuite/winsup.api/ltp/setuid02.c winsup/testsuite/winsup.api/ltp/signal03.c winsup/testsuite/winsup.api/ltp/stat01.c winsup/testsuite/winsup.api/ltp/stat02.c winsup/testsuite/winsup.api/ltp/stat03.c winsup/testsuite/winsup.api/ltp/stat05.c winsup/testsuite/winsup.api/ltp/stat06.c winsup/testsuite/winsup.api/ltp/symlink01.c winsup/testsuite/winsup.api/ltp/symlink02.c winsup/testsuite/winsup.api/ltp/symlink03.c winsup/testsuite/winsup.api/ltp/symlink04.c winsup/testsuite/winsup.api/ltp/symlink05.c winsup/testsuite/winsup.api/ltp/sync01.c winsup/testsuite/winsup.api/ltp/sync02.c winsup/testsuite/winsup.api/ltp/time01.c winsup/testsuite/winsup.api/ltp/time02.c winsup/testsuite/winsup.api/ltp/times01.c winsup/testsuite/winsup.api/ltp/times02.c winsup/testsuite/winsup.api/ltp/times03.c winsup/testsuite/winsup.api/ltp/truncate01.c winsup/testsuite/winsup.api/ltp/truncate02.c winsup/testsuite/winsup.api/ltp/ulimit01.c winsup/testsuite/winsup.api/ltp/umask01.c winsup/testsuite/winsup.api/ltp/umask02.c winsup/testsuite/winsup.api/ltp/umask03.c winsup/testsuite/winsup.api/ltp/uname01.c winsup/testsuite/winsup.api/ltp/unlink05.c winsup/testsuite/winsup.api/ltp/unlink06.c winsup/testsuite/winsup.api/ltp/unlink07.c winsup/testsuite/winsup.api/ltp/unlink08.c winsup/testsuite/winsup.api/ltp/vfork01.c winsup/testsuite/winsup.api/ltp/wait02.c winsup/testsuite/winsup.api/ltp/wait401.c winsup/testsuite/winsup.api/ltp/wait402.c winsup/testsuite/winsup.api/ltp/write01.c winsup/testsuite/winsup.api/ltp/write02.c winsup/testsuite/winsup.api/ltp/write03.c winsup/testsuite/winsup.api/mmaptest01.c winsup/testsuite/winsup.api/mmaptest02.c winsup/testsuite/winsup.api/mmaptest03.c winsup/testsuite/winsup.api/mmaptest04.c winsup/testsuite/winsup.api/msgtest.c winsup/testsuite/winsup.api/nullgetcwd.c winsup/testsuite/winsup.api/pthread/cancel1.c winsup/testsuite/winsup.api/pthread/cancel10.c winsup/testsuite/winsup.api/pthread/cancel11.c winsup/testsuite/winsup.api/pthread/cancel12.c winsup/testsuite/winsup.api/pthread/cancel2.c winsup/testsuite/winsup.api/pthread/cancel3.c winsup/testsuite/winsup.api/pthread/cancel4.c winsup/testsuite/winsup.api/pthread/cancel5.c winsup/testsuite/winsup.api/pthread/cancel6.c winsup/testsuite/winsup.api/pthread/cancel7.c winsup/testsuite/winsup.api/pthread/cancel8.c winsup/testsuite/winsup.api/pthread/cancel9.c winsup/testsuite/winsup.api/pthread/cleanup2.c winsup/testsuite/winsup.api/pthread/cleanup3.c winsup/testsuite/winsup.api/pthread/condvar1.c winsup/testsuite/winsup.api/pthread/condvar2.c winsup/testsuite/winsup.api/pthread/condvar2_1.c winsup/testsuite/winsup.api/pthread/condvar3.c winsup/testsuite/winsup.api/pthread/condvar3_1.c winsup/testsuite/winsup.api/pthread/condvar3_2.c winsup/testsuite/winsup.api/pthread/condvar3_3.c winsup/testsuite/winsup.api/pthread/condvar4.c winsup/testsuite/winsup.api/pthread/condvar5.c winsup/testsuite/winsup.api/pthread/condvar6.c winsup/testsuite/winsup.api/pthread/condvar7.c winsup/testsuite/winsup.api/pthread/condvar8.c winsup/testsuite/winsup.api/pthread/condvar9.c winsup/testsuite/winsup.api/pthread/count1.c winsup/testsuite/winsup.api/pthread/create1.c winsup/testsuite/winsup.api/pthread/create2.c winsup/testsuite/winsup.api/pthread/equal1.c winsup/testsuite/winsup.api/pthread/exit1.c winsup/testsuite/winsup.api/pthread/exit2.c winsup/testsuite/winsup.api/pthread/exit3.c winsup/testsuite/winsup.api/pthread/inherit1.c winsup/testsuite/winsup.api/pthread/join0.c winsup/testsuite/winsup.api/pthread/join1.c winsup/testsuite/winsup.api/pthread/join2.c winsup/testsuite/winsup.api/pthread/mainthreadexits.c winsup/testsuite/winsup.api/pthread/mutex1.c winsup/testsuite/winsup.api/pthread/mutex1d.c winsup/testsuite/winsup.api/pthread/mutex1e.c winsup/testsuite/winsup.api/pthread/mutex1n.c winsup/testsuite/winsup.api/pthread/mutex1r.c winsup/testsuite/winsup.api/pthread/mutex2.c winsup/testsuite/winsup.api/pthread/mutex3.c winsup/testsuite/winsup.api/pthread/mutex4.c winsup/testsuite/winsup.api/pthread/mutex5.c winsup/testsuite/winsup.api/pthread/mutex6d.c winsup/testsuite/winsup.api/pthread/mutex6e.c winsup/testsuite/winsup.api/pthread/mutex6n.c winsup/testsuite/winsup.api/pthread/mutex6r.c winsup/testsuite/winsup.api/pthread/mutex7.c winsup/testsuite/winsup.api/pthread/mutex7d.c winsup/testsuite/winsup.api/pthread/mutex7e.c winsup/testsuite/winsup.api/pthread/mutex7n.c winsup/testsuite/winsup.api/pthread/mutex7r.c winsup/testsuite/winsup.api/pthread/mutex8e.c winsup/testsuite/winsup.api/pthread/mutex8n.c winsup/testsuite/winsup.api/pthread/mutex8r.c winsup/testsuite/winsup.api/pthread/once1.c winsup/testsuite/winsup.api/pthread/priority1.c winsup/testsuite/winsup.api/pthread/priority2.c winsup/testsuite/winsup.api/pthread/rwlock1.c winsup/testsuite/winsup.api/pthread/rwlock2.c winsup/testsuite/winsup.api/pthread/rwlock3.c winsup/testsuite/winsup.api/pthread/rwlock4.c winsup/testsuite/winsup.api/pthread/rwlock5.c winsup/testsuite/winsup.api/pthread/rwlock6.c winsup/testsuite/winsup.api/pthread/rwlock7.c winsup/testsuite/winsup.api/pthread/self1.c winsup/testsuite/winsup.api/pthread/self2.c winsup/testsuite/winsup.api/pthread/test.h winsup/testsuite/winsup.api/pthread/threadidafterfork.c winsup/testsuite/winsup.api/pthread/tsd1.c winsup/testsuite/winsup.api/resethand.c winsup/testsuite/winsup.api/samples/sample-fail.c winsup/testsuite/winsup.api/samples/sample-miscompile.c winsup/testsuite/winsup.api/samples/sample-pass.c winsup/testsuite/winsup.api/semtest.c winsup/testsuite/winsup.api/shmtest.c winsup/testsuite/winsup.api/sigchld.c winsup/testsuite/winsup.api/signal-into-win32-api.c winsup/testsuite/winsup.api/systemcall.c winsup/testsuite/winsup.api/user_malloc.c winsup/testsuite/winsup.api/waitpid.c winsup/testsuite/winsup.api/winsup.exp winsup/utils/COPYING.dumper winsup/utils/ChangeLog winsup/utils/ChangeLog-2000 winsup/utils/ChangeLog.64bit winsup/utils/Makefile.in winsup/utils/aclocal.m4 winsup/utils/autogen.sh winsup/utils/bloda.cc winsup/utils/configure winsup/utils/configure.ac winsup/utils/cygcheck.cc winsup/utils/cygpath.cc winsup/utils/cygwin-console-helper.cc winsup/utils/dump_setup.cc winsup/utils/dumper.cc winsup/utils/dumper.h winsup/utils/getconf.c winsup/utils/getfacl.c winsup/utils/kill.cc winsup/utils/ldd.cc winsup/utils/ldh.cc winsup/utils/loadlib.h winsup/utils/locale.cc winsup/utils/minidumper.cc winsup/utils/mkgroup.c winsup/utils/mkpasswd.c winsup/utils/module_info.cc winsup/utils/mount.cc winsup/utils/parse_pe.cc winsup/utils/passwd.c winsup/utils/path.cc winsup/utils/path.h winsup/utils/pldd.c winsup/utils/ps.cc winsup/utils/regtool.cc winsup/utils/setfacl.c winsup/utils/setmetamode.c winsup/utils/ssp.c winsup/utils/ssp.txt winsup/utils/strace.cc winsup/utils/testsuite.cc winsup/utils/testsuite.h winsup/utils/tzset.c winsup/utils/umount.cc winsup/utils/utils.xml winsup/utils/wide_path.h --- winsup/cygserver/bsd_helper.cc | 691 ----------------------------------------- 1 file changed, 691 deletions(-) delete mode 100644 winsup/cygserver/bsd_helper.cc (limited to 'winsup/cygserver/bsd_helper.cc') diff --git a/winsup/cygserver/bsd_helper.cc b/winsup/cygserver/bsd_helper.cc deleted file mode 100644 index 718c587c3..000000000 --- a/winsup/cygserver/bsd_helper.cc +++ /dev/null @@ -1,691 +0,0 @@ -/* bsd_helper.cc - - Copyright 2003, 2004, 2005, 2007, 2012 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. */ -#ifdef __OUTSIDE_CYGWIN__ -#include "woutsup.h" -#include -#define _KERNEL 1 -#define __BSD_VISIBLE 1 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cygserver.h" -#include "process.h" -#include "cygserver_ipc.h" -#include "cygserver_msg.h" -#include "cygserver_sem.h" -#include "cygserver_shm.h" - -/* - * Copy a piece of memory from the client process into the server process. - * Returns an error code. - */ -int -win_copyin (struct thread *td, const void *client_src, - void *server_tgt, size_t len) -{ - if (!ReadProcessMemory (td->client->handle (), client_src, server_tgt, - len, NULL)) - return cygwin_internal (CW_GET_ERRNO_FROM_WINERROR, - GetLastError (), EINVAL); - return 0; -} - -/* - * Copy a piece of memory from the server process into the client process. - * Returns an error code. - */ -int -win_copyout (struct thread *td, const void *server_src, - void *client_tgt, size_t len) -{ - if (!WriteProcessMemory (td->client->handle (), client_tgt, server_src, - len, NULL)) - return cygwin_internal (CW_GET_ERRNO_FROM_WINERROR, - GetLastError (), EINVAL); - return 0; -} - -#define enter_critical_section(c) _enter_critical_section((c),__FILE__,__LINE__) -static void -_enter_critical_section (LPCRITICAL_SECTION pcs, const char *file, int line) -{ - _log (file, line, LOG_DEBUG, "Try enter critical section(%p)", pcs); - EnterCriticalSection (pcs); - _log (file, line, LOG_DEBUG, "Entered critical section(%p)", pcs); -} - -#define leave_critical_section(c) _leave_critical_section((c),__FILE__,__LINE__) -static void -_leave_critical_section (LPCRITICAL_SECTION pcs, const char *file, int line) -{ - LeaveCriticalSection (pcs); - _log (file, line, LOG_DEBUG, "Left critical section(%p)", pcs); -} - -CRITICAL_SECTION ipcht_cs; - -struct ipc_hookthread_storage { - HANDLE process_hdl; - proc ipcblk; -}; - -struct ipc_hookthread { - SLIST_ENTRY (ipc_hookthread) sht_next; - HANDLE thread; - DWORD winpid; - struct vmspace vmspace; -}; -static SLIST_HEAD (, ipc_hookthread) ipcht_list; /* list of hook threads */ - -static HANDLE ipcexit_event; - -struct vmspace * -ipc_p_vmspace (struct proc *proc) -{ - struct vmspace *ret = NULL; - ipc_hookthread *ipcht_entry; - enter_critical_section (&ipcht_cs); - SLIST_FOREACH (ipcht_entry, &ipcht_list, sht_next) - { - if (ipcht_entry->winpid == proc->winpid) - { - ret = proc->p_vmspace = &ipcht_entry->vmspace; - break; - } - } - leave_critical_section (&ipcht_cs); - return ret; -} - -static DWORD WINAPI -ipcexit_hookthread (const LPVOID param) -{ - ipc_hookthread_storage *shs = (ipc_hookthread_storage *) param; - HANDLE obj[2] = { ipcexit_event, shs->process_hdl }; - switch (WaitForMultipleObjects (2, obj, FALSE, INFINITE)) - { - case WAIT_OBJECT_0: - /* Cygserver shutdown. */ - /*FALLTHRU*/ - case WAIT_OBJECT_0 + 1: - /* Process exited. Call semexit_myhook to handle SEM_UNDOs for the - exiting process and shmexit_myhook to keep track of shared - memory. */ - if (Giant.owner == shs->ipcblk.winpid) - mtx_unlock (&Giant); - if (support_semaphores == TUN_TRUE) - semexit_myhook (NULL, &shs->ipcblk); - if (support_sharedmem == TUN_TRUE) - { - _mtx_lock (&Giant, shs->ipcblk.winpid, __FILE__, __LINE__); - ipc_p_vmspace (&shs->ipcblk); - shmexit_myhook (shs->ipcblk.p_vmspace); - mtx_unlock (&Giant); - } - break; - default: - /* FIXME: Panic? */ - break; - } - CloseHandle (shs->process_hdl); - ipc_hookthread *ipcht_entry, *sav_entry; - enter_critical_section (&ipcht_cs); - SLIST_FOREACH_SAFE (ipcht_entry, &ipcht_list, sht_next, sav_entry) - { - if (ipcht_entry->winpid == shs->ipcblk.winpid) - { - SLIST_REMOVE (&ipcht_list, ipcht_entry, ipc_hookthread, sht_next); - CloseHandle (ipcht_entry->thread); - delete ipcht_entry; - } - } - leave_critical_section (&ipcht_cs); - delete shs; - return 0; -} - -/* Deletes all pending hook threads. Called by ipcunload() which in turn - is called by the cygserver main routine. */ -static void -ipcexit_dispose_hookthreads (void) -{ - SetEvent (ipcexit_event); - ipc_hookthread *ipcht_entry; - enter_critical_section (&ipcht_cs); - SLIST_FOREACH (ipcht_entry, &ipcht_list, sht_next) - { - WaitForSingleObject (ipcht_entry->thread, 1000); - /* Don't bother removing the linked list on cygserver shutdown. */ - /* FIXME: Error handling? */ - } - leave_critical_section (&ipcht_cs); -} - -/* Creates the per process wait thread. Called by semget() under locked - Giant mutex condition. */ -int -ipcexit_creat_hookthread (struct thread *td) -{ - ipc_hookthread *ipcht_entry; - int ret = -1; - enter_critical_section (&ipcht_cs); - SLIST_FOREACH (ipcht_entry, &ipcht_list, sht_next) - { - if (ipcht_entry->winpid == td->ipcblk->winpid) - ret = 0; - } - leave_critical_section (&ipcht_cs); - if (!ret) - return 0; - - DWORD tid; - ipc_hookthread_storage *shs = new ipc_hookthread_storage; - if (!DuplicateHandle (GetCurrentProcess (), td->client->handle (), - GetCurrentProcess (), &shs->process_hdl, - 0, FALSE, DUPLICATE_SAME_ACCESS)) - { - log (LOG_CRIT, "failed to duplicate process handle, error = %lu", - GetLastError ()); - return cygwin_internal (CW_GET_ERRNO_FROM_WINERROR, - GetLastError (), ENOMEM); - } - shs->ipcblk = *td->ipcblk; - HANDLE thread = CreateThread (NULL, 0, ipcexit_hookthread, shs, 0, &tid); - if (!thread) - { - log (LOG_CRIT, "failed to create thread, error = %lu", GetLastError ()); - return cygwin_internal (CW_GET_ERRNO_FROM_WINERROR, - GetLastError (), ENOMEM); - } - ipcht_entry = new ipc_hookthread; - ipcht_entry->thread = thread; - ipcht_entry->winpid = td->ipcblk->winpid; - ipcht_entry->vmspace.vm_map = NULL; - ipcht_entry->vmspace.vm_shm = NULL; - enter_critical_section (&ipcht_cs); - SLIST_INSERT_HEAD (&ipcht_list, ipcht_entry, sht_next); - leave_critical_section (&ipcht_cs); - return 0; -} - -/* - * Need the admins group SID to compare with groups in client token. - */ -PSID admininstrator_group_sid; - -static void -init_admin_sid (void) -{ - SID_IDENTIFIER_AUTHORITY nt_auth = {SECURITY_NT_AUTHORITY}; - if (! AllocateAndInitializeSid (&nt_auth, 2, 32, 544, 0, 0, 0, 0, 0, 0, - &admininstrator_group_sid)) - panic ("failed to create well known sids, error = %lu", - GetLastError ()); -} - -SECURITY_DESCRIPTOR sec_all_nih_sd; -SECURITY_ATTRIBUTES sec_all_nih = { sizeof (SECURITY_ATTRIBUTES), - &sec_all_nih_sd, - FALSE }; - -void -securityinit () -{ - InitializeSecurityDescriptor (&sec_all_nih_sd, SECURITY_DESCRIPTOR_REVISION); - SetSecurityDescriptorDacl (&sec_all_nih_sd, TRUE, 0, FALSE); - init_admin_sid (); -} - -/* Global vars, determining whether the IPC stuff should be started or not. */ -tun_bool_t support_sharedmem = TUN_UNDEF; -tun_bool_t support_msgqueues = TUN_UNDEF; -tun_bool_t support_semaphores = TUN_UNDEF; - -void -ipcinit () -{ - mtx_init (&Giant, "Giant", NULL, MTX_DEF); - msleep_init (); - ipcexit_event = CreateEvent (NULL, TRUE, FALSE, NULL); - if (!ipcexit_event) - panic ("Failed to create ipcexit event object"); - InitializeCriticalSection (&ipcht_cs); - if (support_msgqueues == TUN_TRUE) - msginit (); - if (support_semaphores == TUN_TRUE) - seminit (); - if (support_sharedmem == TUN_TRUE) - shminit (); -} - -int -ipcunload () -{ - ipcexit_dispose_hookthreads (); - CloseHandle (ipcexit_event); - wakeup_all (); - if (support_semaphores == TUN_TRUE) - semunload (); - if (support_sharedmem == TUN_TRUE) - shmunload (); - if (support_msgqueues == TUN_TRUE) - msgunload (); - mtx_destroy (&Giant); - return 0; -} - -/* - * Helper function to find a gid in a list of gids. - */ -static bool -is_grp_member (gid_t grp, gid_t *grplist, int listsize) -{ - if (grplist) - for (; listsize > 0; --listsize) - if (grp == grplist[listsize - 1]) - return true; - return false; -} - -/* - * Helper function to get a specific token information from a token. - * This function mallocs the necessary buffer spcae by itself. It - * must be free'd by the calling function. - */ -void * -get_token_info (HANDLE tok, TOKEN_INFORMATION_CLASS tic) -{ - void *buf; - DWORD size; - - if (!GetTokenInformation (tok, tic, NULL, 0, &size) - && GetLastError () != ERROR_INSUFFICIENT_BUFFER) - return NULL; - if (!(buf = malloc (size))) - return NULL; - if (!GetTokenInformation (tok, tic, buf, size, &size)) - { - free (buf); - return NULL; - } - return buf; -} - -/* - * Check if client user helds "mode" permission when accessing object - * associated with "perm" permission record. - * Returns an error code. - */ -int -ipcperm (struct thread *td, ipc_perm *perm, unsigned int mode) -{ - proc *p = td->ipcblk; - - if (!suser (td)) - return 0; - if (mode & IPC_M) - { - return (p->uid != perm->cuid && p->uid != perm->uid) - ? EACCES : 0; - } - if (p->uid != perm->cuid && p->uid != perm->uid) - { - /* If the user is a member of the creator or owner group, test - against group bits, otherwise against other bits. */ - mode >>= p->gid != perm->gid && p->gid != perm->cgid - && !is_grp_member (perm->gid, p->gidlist, p->gidcnt) - && !is_grp_member (perm->cgid, p->gidlist, p->gidcnt) - ? 6 : 3; - } - return (mode & perm->mode) != mode ? EACCES : 0; -} - -/* - * Check for client user being superuser. - * Returns an error code. - */ -int -suser (struct thread *td) -{ - /* This value has been set at ImpersonateNamedPipeClient() time - using the token information. See adjust_identity_info() below. */ - return td->ipcblk->is_admin ? 0 : EACCES; -} - -/* - * Retrieves user and group info from impersonated token and creates the - * correct uid, gid, gidlist and is_admin entries in p from that. - */ -bool -adjust_identity_info (struct proc *p) -{ - HANDLE tok; - - if (!OpenThreadToken (GetCurrentThread (), TOKEN_READ, TRUE, &tok)) - { - debug ("Failed to open worker thread access token for pid %d, winpid %d", - p->cygpid, p->winpid); - return false; - } - - /* Get uid from user SID in token. */ - PTOKEN_USER user; - if (!(user = (PTOKEN_USER)get_token_info (tok, TokenUser))) - goto faulty; - p->uid = cygwin_internal (CW_GET_UID_FROM_SID, user->User.Sid); - free (user); - if (p->uid == (uid_t)-1) - log (LOG_WARNING, "WARNING: User not found in /etc/passwd! Using uid -1!"); - - /* Get gid from primary group SID in token. */ - PTOKEN_PRIMARY_GROUP pgrp; - if (!(pgrp = (PTOKEN_PRIMARY_GROUP)get_token_info (tok, TokenPrimaryGroup))) - goto faulty; - p->gid = cygwin_internal (CW_GET_GID_FROM_SID, pgrp->PrimaryGroup); - free (pgrp); - if (p->gid == (gid_t)-1) - log (LOG_WARNING,"WARNING: Group not found in /etc/group! Using gid -1!"); - - /* Generate gid list from token group's SID list. Also look if the token - has an enabled admin group SID. That means, the process has admin - privileges. That knowledge is used in suser(). */ - PTOKEN_GROUPS gsids; - if (!(gsids = (PTOKEN_GROUPS)get_token_info (tok, TokenGroups))) - goto faulty; - if (gsids->GroupCount) - { - p->gidlist = (gid_t *) calloc (gsids->GroupCount, sizeof (gid_t)); - if (p->gidlist) - p->gidcnt = gsids->GroupCount; - } - for (DWORD i = 0; i < gsids->GroupCount; ++i) - { - if (p->gidlist) - p->gidlist[i] = cygwin_internal (CW_GET_GID_FROM_SID, - gsids->Groups[i].Sid); - if (EqualSid (gsids->Groups[i].Sid, admininstrator_group_sid) - && (gsids->Groups[i].Attributes & SE_GROUP_ENABLED)) - p->is_admin = true; - } - free (gsids); - - CloseHandle (tok); - return true; - -faulty: - CloseHandle (tok); - log (LOG_CRIT, "Failed to get token information for pid %d, winpid %d", - p->cygpid, p->winpid); - return false; -} - -/* - * Windows wrapper implementation of the VM functions called by sysv_shm.cc. - */ - -vm_object_t -_vm_pager_allocate (int size, int shmflg) -{ - /* Create the file mapping object with full access for everyone. This is - necessary to allow later calls to shmctl(..., IPC_SET,...) to - change the access rights and ownership of a shared memory region. - The access rights are tested at the beginning of every shm... function. - Note that this does not influence the actual read or write access - defined in a call to shmat. */ - vm_object_t object = CreateFileMapping (INVALID_HANDLE_VALUE, &sec_all_nih, - PAGE_READWRITE, 0, size, NULL); - if (!object) - panic ("CreateFileMapping in _vm_pager_allocate failed, %lu", GetLastError ()); - return object; -} - -vm_object_t -vm_object_duplicate (struct thread *td, vm_object_t object) -{ - vm_object_t dup_object; - if (!DuplicateHandle (GetCurrentProcess (), object, - td->client->handle (), &dup_object, - 0, TRUE, DUPLICATE_SAME_ACCESS)) - panic ("!DuplicateHandle in vm_object_duplicate failed, %lu", GetLastError ()); - return dup_object; -} - -void -vm_object_deallocate (vm_object_t object) -{ - if (object) - CloseHandle (object); -} - -/* - * Tunable parameters are read from a system wide cygserver.conf file. - * On the first call to tunable_int_fetch, the file is read and the - * parameters are set accordingly. Each parameter has default, max and - * min settings. - */ - -enum tun_params_type { - TUN_NULL, - TUN_INT, - TUN_BOOL -}; - -union tun_value { - long ival; - tun_bool_t bval; -}; - -struct tun_struct { - const char *name; - tun_params_type type; - union tun_value value; - union tun_value min; - union tun_value max; - void (*check_func)(tun_struct *, char *, const char *); -}; - -static void -default_tun_check (tun_struct *that, char *value, const char *fname) -{ - char *c = NULL; - tun_value val; - switch (that->type) - { - case TUN_INT: - val.ival = strtoul (value, &c, 10); - if (!val.ival || (c && *c)) - panic ("Error in config file %s: Value of parameter %s malformed", - fname, that->name); - if (val.ival < that->min.ival || val.ival > that->max.ival) - panic ("Error in config file %s: Value of parameter %s must be " - "between %lu and %lu", - fname, that->name, that->min.ival, that->max.ival); - if (that->value.ival) - panic ("Error in config file %s: Parameter %s set twice.\n", - fname, that->name); - that->value.ival = val.ival; - break; - case TUN_BOOL: - if (!strcasecmp (value, "no") || !strcasecmp (value, "n") - || !strcasecmp (value, "false") || !strcasecmp (value, "f") - || !strcasecmp (value, "0")) - val.bval = TUN_FALSE; - else if (!strcasecmp (value, "yes") || !strcasecmp (value, "y") - || !strcasecmp (value, "true") || !strcasecmp (value, "t") - || !strcasecmp (value, "1")) - val.bval = TUN_TRUE; - else - panic ("Error in config file %s: Value of parameter %s malformed\n" - "Allowed values: \"yes\", \"no\", \"y\", \"n\", \"true\", \"false\", \"t\", \"f\", \"1\" and \"0\"", fname, that->name); - that->value.bval = val.bval; - break; - default: - /* Shouldn't happen. */ - panic ("Internal error: Wrong type of tunable parameter"); - break; - } -} - -static tun_struct tunable_params[] = -{ - /* SRV */ - { "kern.srv.cleanup_threads", TUN_INT, {0}, {1}, {32}, default_tun_check}, - { "kern.srv.request_threads", TUN_INT, {0}, {1}, {310}, default_tun_check}, - { "kern.srv.process_cache_size", TUN_INT, {0}, {1}, {310}, default_tun_check}, - { "kern.srv.sharedmem", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check}, - { "kern.srv.msgqueues", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check}, - { "kern.srv.semaphores", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check}, - - /* LOG */ - { "kern.log.syslog", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check}, - { "kern.log.stderr", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check}, - { "kern.log.debug", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check}, - { "kern.log.level", TUN_INT, {0}, {1}, {7}, default_tun_check}, - - /* MSG */ - { "kern.ipc.msgseg", TUN_INT, {0}, {256}, {65535}, default_tun_check}, - { "kern.ipc.msgssz", TUN_INT, {0}, {8}, {1024}, default_tun_check}, - { "kern.ipc.msgmnb", TUN_INT, {0}, {1}, {65535}, default_tun_check}, - { "kern.ipc.msgmni", TUN_INT, {0}, {1}, {1024}, default_tun_check}, - { "kern.ipc.msgtql", TUN_INT, {0}, {1}, {1024}, default_tun_check}, - - /* SEM */ - //{ "kern.ipc.semmap", TUN_INT, {0}, {1}, {1024}, default_tun_check}, - { "kern.ipc.semmni", TUN_INT, {0}, {1}, {1024}, default_tun_check}, - { "kern.ipc.semmns", TUN_INT, {0}, {1}, {1024}, default_tun_check}, - { "kern.ipc.semmnu", TUN_INT, {0}, {1}, {1024}, default_tun_check}, - { "kern.ipc.semmsl", TUN_INT, {0}, {1}, {1024}, default_tun_check}, - { "kern.ipc.semopm", TUN_INT, {0}, {1}, {1024}, default_tun_check}, - { "kern.ipc.semume", TUN_INT, {0}, {1}, {1024}, default_tun_check}, - //{ "kern.ipc.semusz", TUN_INT, {0}, {1}, {1024}, default_tun_check}, - { "kern.ipc.semvmx", TUN_INT, {0}, {1}, {32767}, default_tun_check}, - { "kern.ipc.semaem", TUN_INT, {0}, {1}, {32767}, default_tun_check}, - - /* SHM */ - { "kern.ipc.shmmaxpgs", TUN_INT, {0}, {1}, {32767}, default_tun_check}, - //{ "kern.ipc.shmmin", TUN_INT, {0}, {1}, {32767}, default_tun_check}, - { "kern.ipc.shmmni", TUN_INT, {0}, {1}, {32767}, default_tun_check}, - { "kern.ipc.shmseg", TUN_INT, {0}, {1}, {32767}, default_tun_check}, - { "kern.ipc.shm_allow_removed", TUN_BOOL, {TUN_UNDEF}, {TUN_FALSE}, {TUN_TRUE}, default_tun_check}, - //{ "kern.ipc.shm_use_phys", TUN_INT, {0}, {1}, {32767}, default_tun_check}, - { NULL, TUN_NULL, {0}, {0}, {0}, NULL} -}; - -#define skip_whitespace(c) while (*(c) && isspace (*(c))) ++(c) -#define skip_nonwhitespace(c) while (*(c) && !isspace (*(c)) && *(c) != '#') ++(c) -#define end_of_content(c) (!*(c) || *(c) == '#') - -void -tunable_param_init (const char *config_file, bool force) -{ - FILE *fp = fopen (config_file, "rt"); - if (!fp) - { - if (force) - panic ("can't open config file %s\n", config_file); - return; - } - char line[1024]; - while (fgets (line, 1024, fp)) - { - char *c = strrchr (line, '\n'); - if (!c) - panic ("Line too long in confg file %s\n", config_file); - /* Overwrite trailing NL. */ - *c = '\0'; - c = line; - skip_whitespace (c); - if (end_of_content (c)) - continue; - /* So we are on the first character of a parameter name. */ - char *name = c; - /* Find end of name. */ - skip_nonwhitespace (c); - if (end_of_content (c)) - { - *c++ = '\0'; - panic ("Error in config file %s: Parameter %s has no value.\n", - config_file, name); - } - /* Mark end of name. */ - *c++ = '\0'; - skip_whitespace (c); - if (end_of_content (c)) - panic ("Error in config file %s: Parameter %s has no value.\n", - config_file, name); - /* Now we are on the first character of a parameter's value. */ - char *value = c; - /* This only works for simple parameters. If complex string parameters - are added at one point, the scanning routine must be changed here. */ - /* Find end of value. */ - skip_nonwhitespace (c); - /* Mark end of value. */ - *c++ = '\0'; - /* Now look if name is one from our list. */ - tun_struct *s; - for (s = &tunable_params[0]; s->name; ++s) - if (!strcmp (name, s->name)) - { - /* Now read value and check for validity. check_func doesn't - return on error. */ - s->check_func (s, value, config_file); - break; - } - if (!s->name) - panic ("Error in config file %s: Unknown parameter %s.\n", - config_file, name); - } - fclose (fp); -} - -void -tunable_int_fetch (const char *name, int32_t *tunable_target) -{ - tun_struct *s; - for (s = &tunable_params[0]; s->name; ++s) - if (!strcmp (name, s->name)) - break; - if (!s) /* Not found */ - return; - if (s->type != TUN_INT) /* Wrong type */ - return; - if (!s->value.ival) /* Not set in config file */ - return; - *tunable_target = s->value.ival; - debug ("\nSet %s to %lu\n", name, *tunable_target); -} - -void -tunable_bool_fetch (const char *name, tun_bool_t *tunable_target) -{ - tun_struct *s; - const char *tun_bool_val_string[] = { "undefined", "no", "yes" }; - for (s = &tunable_params[0]; s->name; ++s) - if (!strcmp (name, s->name)) - break; - if (!s) /* Not found */ - return; - if (s->type != TUN_BOOL) /* Wrong type */ - return; - if (!s->value.ival) /* Not set in config file */ - return; - *tunable_target = s->value.bval; - debug ("\nSet %s to %s\n", name, tun_bool_val_string[*tunable_target]); -} -#endif /* __OUTSIDE_CYGWIN__ */ -- cgit v1.2.3