diff options
author | cvs2svn <> | 2014-02-18 19:58:41 +0000 |
---|---|---|
committer | cvs2svn <> | 2014-02-18 19:58:41 +0000 |
commit | b5279ecc51ff751ccd052fbb7c20efd529575f7e (patch) | |
tree | 64141e96a5d64ae59fb7f410270e4daa41878a03 /winsup/cygserver/bsd_helper.cc | |
parent | a2a48cb593a9b3cc3f5c63c39f52c32db31cec50 (diff) | |
download | cygnal-cygwin-pre-user-db.tar.gz cygnal-cygwin-pre-user-db.tar.bz2 cygnal-cygwin-pre-user-db.zip |
This commit was manufactured by cvs2svn to create tag 'cygwin-pre-user-db'.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 <corinna@vinschen.de> '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
Diffstat (limited to 'winsup/cygserver/bsd_helper.cc')
-rw-r--r-- | winsup/cygserver/bsd_helper.cc | 691 |
1 files changed, 0 insertions, 691 deletions
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 <errno.h> -#define _KERNEL 1 -#define __BSD_VISIBLE 1 -#include <sys/smallprint.h> -#include <sys/cygwin.h> -#include <sys/ipc.h> -#include <sys/param.h> -#include <sys/msg.h> -#include <sys/queue.h> -#include <malloc.h> -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> -#include <ctype.h> - -#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__ */ |