2005-04-06  Christopher Faylor  <cgf@timesys.com>

	* net.cc (cygwin_getservbyname): Return (possibly NULL) return value of
	dup_ent rather than assuming that tls buffer is valid.
	(cygwin_getservbyport): Ditto.
	(cygwin_gethostbyname): Ditto.
	(cygwin_gethostbyaddr): Ditto.

2005-04-05  Christopher Faylor  <cgf@timesys.com>

	* cygtls.cc (_cygtls::remove): Don't free or close stuff if we're being
	called in a "non-standard" way.

2005-04-05  Christopher Faylor  <cgf@timesys.com>

	* sync.h (muto::initforce): Delete flawed implementation.
	* pwdgrp.h (pwdgrp::pglock): Make static.
	* grp.cc (pwdgrp::pwdgrp): Eliminate use of initforce.

2005-04-05  Christopher Faylor  <cgf@timesys.com>

	* sync.h (muto::initforce): Force initialization even when name !=
	NULL.
	* grp.cc (pwdgrp::pwdgrp): Use initforce since the enclosing structure
	is !NO_COPY.

2005-04-05  Christopher Faylor  <cgf@timesys.com>

	* sync.h (muto::operator int): New operator.
	(locker): Remove unused class.
	(new_muto): Delete.
	(new_muto1): Ditto.
	(new_muto_name): Ditto.
	* cygheap.cc (cygheap_setup_for_child): Reflect use of static storage
	for muto rather than pointer.
	(_csbrk): Ditto.
	(_cmalloc): Ditto.
	(_cmalloc): Ditto.
	(_cfree): Ditto.
	* cygheap.h (cwdstuff::cwd_lock): Ditto.
	(cwdstuff::get_drive): Ditto.
	* cygmalloc.h (__malloc_lock): Ditto.
	(__malloc_unlock): Ditto.
	* cygtls.cc (sentry::lock): Ditto.
	(sentry::sentry): Ditto.
	(~sentry): Ditto.
	(_cygtls::init): Ditto.
	* dcrt0.cc: Ditto.
	(cygwin_atexit): Ditto.
	(cygwin_exit): Ditto.
	* debug.cc (lock_debug::locker): Ditto.
	(lock_debug::lock_debug): Ditto.
	(lock_debug::unlock): Ditto.
	(debug_init): Ditto.
	* dtable.cc (dtable::init_lock): Ditto.
	* dtable.h (dtable::lock_cs): Ditto.
	(dtable::lock): Ditto.
	(dtable::unlock): Ditto.
	* exceptions.cc (mask_sync): Ditto.
	(sighold): Ditto.
	(set_process_mask_delta): Ditto.
	(set_signal_mask): Ditto.
	(events_init): Ditto.
	* grp.cc (pwdgrp::pwdgrp): Ditto.
	* malloc_wrapper.cc (mallock): Ditto.
	(malloc_init): Ditto.
	* path.cc (cwdstuff::cwd_lock): Ditto.
	(cwdstuff::get_hash): Ditto.
	(cwdstuff::get_hash): Ditto.
	(cwdstuff::init): Ditto.
	(cwdstuff::set): Ditto.
	(cwdstuff::get): Ditto.
	* pwdgrp.h (pwdgrp::pglock): Ditto.
	(pwdgrp::refresh): Ditto.
	* sigproc.cc (sync_proc_subproc): Ditto.
	(get_proc_lock): Ditto.
	(proc_subproc): Ditto.
	(_cygtls::remove_wq): Ditto.
	(proc_terminate): Ditto.
	(sigproc_init): Ditto.
	* timer.cc (lock_timer_tracker::protect): Ditto.
	(lock_timer_tracker::lock_timer_tracker): Ditto.
	(lock_timer_tracker::~lock_timer_tracker): Ditto.
	* wininfo.cc (wininfo::_lock;): Ditto.
	(wininfo::winthread): Ditto.
	(operator HWND): Ditto.
	(wininfo::lock): Ditto.
	(wininfo::release): Ditto.
	* wininfo.h (wininfo::_lock;): Ditto.

2005-04-04  Christopher Faylor  <cgf@timesys.com>

	* path.cc (path_conv::check): Only check for PC_NO_ACCESS_CHECK in end
	component.

2005-04-04  Corinna Vinschen  <corinna@vinschen.de>

	* dcrt0.cc (dll_crt0_1): Don't call set_cygwin_privileges on 9x.

	* fhandler.h (enum change_state): Add.
	(fhandler_base::status): Add a bit to has_changed flag.
	(fhandler_base::has_changed): Implement with type change_state.
	* fhandler.cc (fhandler_base::raw_write): Accommodate type change
	of has_changed.
	* fhandler_disk_file.cc )fhandler_disk_file::touch_ctime): Also
	touch modification time if has_changed == data_changed.
	(fhandler_disk_file::fchmod): Also open on 9x, otherwise we can't
	touch ctime.  Accommodate type change of has_changed.
	(fhandler_disk_file::fchown): Accommodate type change of has_changed.
	(fhandler_disk_file::facl): Ditto.
	(fhandler_disk_file::ftruncate): Ditto.
	(fhandler_disk_file::link): Ditto.
	(fhandler_base::open_fs): Ditto.

2005-04-03  Corinna Vinschen  <corinna@vinschen.de>

	* cygheap.cc (cygheap_init): Accommodate set_process_privilege change.
	* cygheap.h (cygheap_user::curr_primary_token): New member.
	(cygheap_user::primary_token): New method.
	(cygheap_user::deimpersonate): Always revert to processes'
	impersonation token.
	(cygheap_user::reimpersonate): Set processes' or setuid token as
	necessary.
	(cygheap_user::has_impersonation_tokens): Look for curr_primary_token
	value.
	(cygheap_user::close_impersonation_tokens): Close curr_primary_token
	here if necessary.  Don't reset token values to NO_IMPERSONATION since
	that's done in uinfo_init anyway.
	(init_cygheap::luid): New LUID array keeping privilege LUIDs.
	* cygtls.cc (_cygtls::init_thread): Call cygheap->user.reimpersonate.
	* dcrt0.cc (hProcToken): New global variable to keep process token.
	(hProcImpToken): Ditto for process impersonation token.
	(dll_crt0_0): Open process token here once.  Duplicate to create
	hProcImpToken.
	(dll_crt0_1): Call set_cygwin_privileges.
	* environ.cc (allow_ntea): Drop duplicate declaration.
	(allow_smbntsec): Ditto.
	(set_traverse): Only set allow_traverse here.
	(environ_init): Ditto.
	* fhandler_disk_file.cc (fhandler_disk_file::fchmod): Drop call to
	enable_restore_privilege.
	(fhandler_disk_file::fchown): Ditto.
	(fhandler_disk_file::facl): Ditto.
	* fork.cc (fork_child): Move call to cygheap->user.reimpersonate after
	syn with parent. Call set_cygwin_privileges.
	* grp.cc (internal_getgroups): Use hProcImpToken instead of opening
	process token.
	* path.cc (fs_info::update): Bypass traverse checking when retrieving
	volume information using push/pop_thread_privileges.
	* registry.cc (load_registry_hive): Drop setting restore privilege
	since it's already set if available.
	* sec_helper.cc: Include cygtls.h.
	(cygpriv): Privilege string array.
	(privilege_luid): New function, evaluate LUID from cygpriv_idx.
	(privilege_luid_by_name): New function, evaluate LUID from privilege
	string.
	(privilege_name): New function, evaluate privilege string from
	cygpriv_idx.
	(set_privilege): New static function called by set_process_privilege
	and set_thread_privilege.  Call privilege_luid to get privilege LUID.
	Fix bug in return value evaluation. Improve debug output.
	(set_cygwin_privileges): New function.
	(set_process_privilege): Remove.
	(enable_restore_privilege): Remove.
	* security.cc (allow_traverse): New global variable.
	(sys_privs): Change type to cygpriv_idx and store privilege indices
	instead of strings.
	(SYSTEM_PRIVILEGES_COUNT): Renamed from SYSTEM_PERMISSION_COUNT.
	(get_system_priv_list): Don't use numerical constant in malloc call.
	Use privilege_luid to get privilege LUIDs.
	(get_priv_list): Call privilege_luid_by_name to get LUIDs. Improve
	inner privilege LUID comparison loop.
	(create_token): Enable create token privilege using
	push/pop_self_privileges. Use hProcToken instead of opening process
	token. Use default DACL when duplicating token.
	(subauth): Enable tcb privilege using push/pop_self_privileges.
	Use sec_none instead of homw made security attributes when duplicating
	token.
	(check_file_access): Don't duplicate access token, use active
	impersonation token as is.
	* security.h (enum cygpriv_idx): New enumeration type enumerating
	possible privileges.
	(privilege_luid): Declare new function.
	(privilege_luid_by_name): Ditto.
	(privilege_name): Ditto.
	(allow_traverse): Declare.
	(set_privilege): Declare function.
	(set_process_privilege): Define as macro.
	(enable_restore_privilege): Remove declaration.
	(_push_thread_privilege): Define macro.
	(push_thread_privilege): Ditto.
	(pop_thread_privilege): Ditto.
	(pop_self_privilege): Ditto.
	* spawn.cc (spawn_guts): Use cygheap->user.primary_token instead of
	cygheap->user.token.
	* syscalls.cc (statvfs): Bypass traverse checking when retrieving
	volume information using push/pop_thread_privileges. Rearrange code
	to simplify push/pop bracketing.
	(seteuid32): Use hProcToken instead of opening process token. Call
	cygheap->user.deimpersonate instead of RevertToSelf.  Create
	impersonation token from primary internal or external token.  Set
	cygheap->user.curr_primary_token and cygheap->user.current_token
	privileges once here.  Drop "failed" and "failed_ptok" labels. 
	Drop setting DefaultDacl of process token.
	(setegid32): Use hProcToken and hProcImpToken instead of opening
	process token. Always reimpersonate afterwards.
	* uinfo.cc (cygheap_user::init): Use hProcToken instead of opening
	process token.
	(internal_getlogin): Ditto. Set hProcImpToken, too.
	(uinfo_init): Initialize cygheap->user.curr_primary_token.
	* winsup.h (hProcToken): Declare.
	(hProcImpToken): Declare.

2005-04-03  Corinna Vinschen  <corinna@vinschen.de>

	Unify usage of CYG_MAX_PATH throughout.  Change buffers from
	size CYG_MAX_PATH + 1 to CYG_MAX_PATH.  Change length tests
	accordingly.

2005-04-02  Christopher Faylor  <cgf@timesys.com>

	* include/cygwin/version.h: Bump DLL minor number to 15.

2005-04-01  Corinna Vinschen  <corinna@vinschen.de>

	* fork.cc (fork_child): Add missing __stdcall.

2005-04-01  Christopher Faylor  <cgf@timesys.com>

	* sigproc.cc (create_signal_arrive): New (temporary?) function to
	create signal_arrived event.
	(sigproc_init): Use create_signal_arrived.
	* fork.cc (fork_child): Create signal_arrived early.

2005-04-01  Corinna Vinschen  <corinna@vinschen.de>

	* fork.cc (fork_child): Fixup SYSV IPC shared memory before fixing
	up fdtab.

2005-03-31  Corinna Vinschen  <corinna@vinschen.de>

	* gentls_offsets: Add '-m32' flag to native compiler call to satisfy
	cross platform builds.

2005-03-31  Corinna Vinschen  <corinna@vinschen.de>

	* errno.cc (NO_SYSTEM_RESOURCES): Map to EAGAIN.
	(NONPAGED_SYSTEM_RESOURCES): Ditto.
	(PAGED_SYSTEM_RESOURCES): Ditto.
	(WORKING_SET_QUOTA): Ditto.
	(PAGEFILE_QUOTA): Ditto.
	(COMMITMENT_LIMIT): Ditto.

2005-03-30  Christopher Faylor  <cgf@timesys.com>

	* environ.cc (spenvs): Re-force SYSTEMROOT to always be included in
	environment.
	(build_env): Ditto.

2005-03-30  Christopher Faylor  <cgf@timesys.com>

	* environ.cc (spenv::retrieve): Revert most of previous change.
	(build_env): Ditto.  Rework to track environment variables which need
	to always be in the windows environment in a separate array.

2005-03-30  Igor Pechtchanski  <pechtcha@cs.nyu.edu>

	* path.cc (symlink_info::case_check): Ignore trailing characters
	in paths when comparing case.

2005-03-30  Christopher Faylor  <cgf@timesys.com>

	* environ.h (win_env::immediate): Declare new field.
	(win_env::operator = ): Declare new operator.
	(win_env::reset): Declare new function.
	(win_env::~win_env): Declare new destructor.
	(getwinenv): Add optional third argument to declaration.
	* environ.cc (conv_envvars): Accommodate immediate field.
	(win_env::operator =): Define new operator.
	(win_env::~win_env): Define new destructor.
	(win_env::add_cache): Add value to environment immediately if
	"immediate" is set.
	(getwinenv): Accept optional third argument which will be used to store
	"cached" values to avoid overwriting real cache.
	(spenv::force): Declare new field.
	(spenvs): Accommodate force field.  Add "PATH=" with force set to true.
	(spenv::retrieve): Avoid duping anything if we're not building an
	envblock.
	(build_env): Ditto.  Use size of potentially constructed new
	environment block to determine if we need to create an environment
	block.  Pass getwinenv temporary storage to avoid inappropriately
	overwriting the environment cache.

2005-03-29  Eric Blake  <ebb9@byu.net>

	* include/limits.h (NAME_MAX): New define.
	(PATH_MAX): POSIX allows PATH_MAX to include trailing NUL.

2005-03-29  Corinna Vinschen  <corinna@vinschen.de>

	* path.cc (is_floppy): Make externally available.
	* path.h (is_floppy): Declare.
	* syscalls.cc (sync): Check for floppies on A: and B: in guid case.
	Don't call setmntent in non-guid case but evaluate drive bit mask
	locally.

2005-03-29  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_process.cc: Re-add exename.

2005-03-28  Christopher Faylor  <cgf@timesys.com>

	* include/ctype.h: Accommodate building in newlib.

2005-03-28  Christopher Faylor  <cgf@timesys.com>

	* timer.cc (getitimer): Check that ovalue is a valid pointer, not just
	NULL.

2005-03-28  Christopher Faylor  <cgf@timesys.com>

	* timer.cc (timer_tracker::settime): Set times to zero when just
	cancelling a timer.

2005-03-28  Christopher Faylor  <cgf@timesys.com>

	* cygthread.cc (cygthread::detach): Revert to just waiting for thread
	event since waiting for anything else is racy.
	* timer.cc (timer_tracker::hcancel): Rename from cancel.
	(timer_tracker::cancel): New method.
	(timer_tracker::th): Remove.
	(timer_tracker::~timer_tracker): Call cancel method.
	(timer_tracker::timer_tracker): Ditto.
	(timer_tracker::timer_tracker): Always, clear cancel, even though it is
	probably not strictly necessary for ttstart.
	(timer_thread): Accommodate cancel -> hcancel rename.
	(timer_tracker::settime): Ditto.
	(timer_tracker::gettime): Ditto.
	(timer_delete): Ditto.

	* cygwin.din: Export _ctype_.
	* include/ctype.h: Mark that _ctype_ is imported.

2005-03-28  Christopher Faylor  <cgf@timesys.com>

	* timer.cc (timer_tracker::timer_tracker): Eliminate simple
	constructor.
	(ttstart): Fully initialize.

	* errno.cc: Fix typo introduced in previous change.

2005-03-28  Eric Blake  <ebb9@byu.net>

	* errno.cc (FILENAME_EXCED_RANGE): Map to ENAMETOOLONG.

2005-03-27  Christopher Faylor  <cgf@timesys.com>

	* signal.cc (nanosleep): Revert tv_sec < 0 check as it is fixed
	properly in the below change to hires.h.

2005-03-27  Pierre Humblet <pierre.humblet@ieee.org>

	* times.cc (hires_ms::usecs): Compare the difference.
	* hires.h: Add parentheses to HIRES_DELAY_MAX.

2005-03-26  Christopher Faylor  <cgf@timesys.com>

	* timer.cc (nanosleep): Treat tv_sec < 0 as invalid.

	* include/search.h: Make declarations consistent with newlib.

2005-03-26  Pierre Humblet <pierre.humblet@ieee.org>
	    Christopher Faylor <cgf@timesys.com>

	* wininfo.h (wininfo::timer_active): Delete.
	(wininfo::itv): Ditto.
	(wininfo::start_time): Ditto.
	(wininfo::window_started): Ditto.
	(wininfo::getitimer): Ditto.
	(wininfo::setitimer): Ditto.
	(wininfo::wininfo): Ditto.
	(wininfo::lock): New method.
	(wininfo::release): Ditto.
	* window.cc:  Use new lock/acquire wininfo methods throughout.
	 (wininfo::wininfo): Delete
	(wininfo::getitimer): Ditto.
	(wininfo::setitimer): Ditto.
	(getitimer): Ditto.
	(setitimer): Ditto.
	(ualarm): Ditto.
	(alarm): Ditto.
	(wininfo::lock): Define new function.
	(wininfo::release): Ditto.
	(wininfo::process): Delete WM_TIMER handling.
	* timer.cc (struct timetracker): Delete it, flags.  Add it_interval,
	interval_us, sleepto_us, running, init_muto(), syncthread, and
	gettime().
	(ttstart): Make NO_COPY.
	(lock_timer_tracker): New class.
	(timer_tracker::timer_tracker): Distinguish ttstart case.
	(timer_tracker::~timer_tracker): New destructor.  Clean out events, and
	reset magic.
	(timer_tracker::init_muto): New method.
	(to_us): Round up as per POSIX.
	(timer_thread): Reorganize to match timer_tracker::settime and
	timer_tracker::gettime.  Call sig_send without wait.  Call
	auto_release.
	(timer_tracker::settime): Reorganize logic to avoid race.  Call gettime
	to recover old value.
	(timer_tracker::gettime): New method.
	(timer_create): Properly set errno on invalid timerid.  Use new
	lock_timer_tracker method.
	(timer_delete): Ditto.  Simplify code slightly.
	(timer_gettime): New function.
	(fixup_timers_after_fork): Reinit ttstart.
	(getitimer): New implementation.
	(setitimer): Ditto.
	(ualarm): Ditto.
	(alarm): Ditto.
	* cygwin.din: Export timer_gettime.
	* winsup.h: Remove has has_visible_window_station declaration.

2005-03-26  Christopher Faylor  <cgf@timesys.com>

	* Makefile.in (DLL_OFILES): Add lsearch.o.
	* cygthread.h (cygthread::notify_detached): New element.
	(cygthread::cygthread): Take optional fourth argument signifying event
	to signal on thread completion.
	* cygthread.cc (cygthread::stub): Signal notify_detached event, if it
	exists.
	(cygthread::cygthread): Initialize notify_detached from fourth argument.
	(cygthread::detach): Wait for notify_detached field is present.

	* lsearch.cc: New file.
	* search.h: Ditto.
	* include/cygwin/version.h: Bump API minor number to 126.
	* cygwin.din: Export lsearch, lfind.

2005-03-23  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.h (fhandler_socket::secret_event): Remove.
	(fhandler_socket::af_local_set_secret): New function combining former
	set_connect_secret and get_connect_secret into one function.
	(fhandler_socket::af_local_setblocking): Rename from eid_setblocking.
	(fhandler_socket::af_local_unsetblocking): Rename from
	eid_unsetblocking.
	(fhandler_socket::af_local_set_cred): New method.
	(fhandler_socket::af_local_copy): New method.
	(fhandler_socket::af_local_recv_secret): New method.
	(fhandler_socket::af_local_send_secret): New method.
	(fhandler_socket::af_local_recv_cred): Rename from eid_recv.
	(fhandler_socket::af_local_send_cred): Rename from eid_send.
	(fhandler_socket::af_local_accept): New method.
	(fhandler_socket::af_local_set_sockpair_cred): Rename from
	set_socketpair_eids.
	(fhandler_socket::eid_accept): Remove.
	(fhandler_socket::eid_connect): Remove.
	(fhandler_socket::set_connect_secret): Remove.
	(fhandler_socket::get_connect_secret): Remove.
	(fhandler_socket::create_secret_event): Remove.
	(fhandler_socket::check_peer_secret_event): Remove.
	(fhandler_socket::signal_secret_event): Remove.
	(fhandler_socket::close_secret_event): Remove.
	(fhandler_socket::sec_event_accept): Remove.
	(fhandler_socket::sec_event_connect): Remove.
	* fhandler_socket.cc (secret_event_name): Remove.
	(fhandler_socket::af_local_set_sockpair_cred): Rename from
	set_socketpair_eids.
	(fhandler_socket::af_local_setblocking): Rename from eid_setblocking.
	(fhandler_socket::af_local_unsetblocking): Rename from
	eid_unsetblocking.
	(fhandler_socket::af_local_recv_secret): New function to receive
	AF_LOCAL connect secret over socket itself.
	(fhandler_socket::af_local_send_secret): New function to send AF_LOCAL
	connect secret over socket itself.
	(fhandler_socket::af_local_recv_cred): Rename from eid_recv.
	(fhandler_socket::af_local_send_cred): Rename from eid_send.
	(fhandler_socket::eid_connect): Remove.
	(fhandler_socket::af_local_connect): Take over connect side handling
	of AF_LOCAL secret and credential handshake.
	(fhandler_socket::eid_accept): Remove.
	(fhandler_socket::af_local_accept): New method, take over accept side
	handling of AF_LOCAL secret and credential handshake.
	(fhandler_socket::af_local_set_cred): New method, set eid credentials
	to start values.
	(fhandler_socket::af_local_copy): New method, copy secret and
	credentials to another socket.
	(fhandler_socket::af_local_set_secret): New function combining former
	set_connect_secret and get_connect_secret into one function.
	(fhandler_socket::create_secret_event): Remove.
	(fhandler_socket::signal_secret_event): Remove.
	(fhandler_socket::close_secret_event): Remove.
	(fhandler_socket::check_peer_secret_event): Remove.
	(fhandler_socket::sec_event_connect): Remove.
	(fhandler_socket::sec_event_accept): Remove.
	(fhandler_socket::fixup_after_fork): Drop secret_event handling.
	(fhandler_socket::bind): Call af_local_set_secret.
	(fhandler_socket::connect): Call af_local_set_cred and af_local_connect.
	(fhandler_socket::listen): Call af_local_set_cred.
	(fhandler_socket::accept): Call af_local_copy and af_local_accept on
	accepted socket.
	(fhandler_socket::close): Don't call close_secret_event.
	(fhandler_socket::set_close_on_exec): Don't set secret_event
	inheritance.
	* net.cc (cygwin_getsockopt): Add debug output.
	(socketpair): Call af_local_set_sockpair_cred instead of
	set_socketpair_eids.
	* select.cc (set_bits): Drop AF_LOCAL special handling in case
	of except bit set.

2005-03-23  Christopher Faylor  <cgf@timesys.com>

	* include/ctype.h: Always define macros when inside cygwin.
	(isblank): New macro.

2005-03-23  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.h (fhandler_socket::eid_connect): Make private.
	(fhandler_socket::set_connect_secret): Ditto.
	(fhandler_socket::get_connect_secret): Ditto.
	(fhandler_socket::create_secret_event): Ditto. Remove secret argument.
	(fhandler_socket::check_peer_secret_event): Ditto.
	(fhandler_socket::signal_secret_event): Make private.
	(fhandler_socket::close_secret_event): Ditto.
	(fhandler_socket::sec_event_accept): New private method.
	(fhandler_socket::sec_event_connect): Ditto.
	(fhandler_socket::af_local_connect): New public method.
	* fhandler_socket.cc: Use 'struct sockaddr' and 'struct sockaddr_in'
	rather than just 'sockaddr' and 'sockaddr_in' throughout.
	(fhandler_socket::eid_connect): Drop AF_LOCAL/SOCK_STREAM test.
	(fhandler_socket::create_secret_event): Remove secret argument.
	Always use connect_secret instead.
	(fhandler_socket::check_peer_secret_event): Ditto.
	(fhandler_socket::sec_event_connect): New method, combining entire
	secret event handshake on connect side.
	(fhandler_socket::af_local_connect): New method, combining secret
	event handshake and eid credential transaction on connect side, to
	be called from select.
	(fhandler_socket::sec_event_accept): New method, combining entire
	secret event handshake on accept side.
	(fhandler_socket::connect): Drop secret, use connect_secret instead.
	Move entire secret event handshake to sec_event_connect.
	(fhandler_socket::accept): Move entire secret event handshake to
	sec_event_accept.
	* select.cc (set_bits): Just call af_local_connect here.

2005-03-23  Christopher Faylor  <cgf@timesys.com>

	* include/cygwin/version.h: Change comment for most recent API version
	bump to reflect new additions to the DLL and to remove change obsoleted
	by the previous checkin.

2005-03-23  Christopher Faylor  <cgf@timesys.com>

	* include/ctype.h: New file.
	* ctype.cc: Ditto.
	* Makefile.in: Add ctype.o to DLL_OFILES.
	* cygwin.din: Remove _ctype_ptr (for now?).

2005-03-22  Christopher Faylor  <cgf@timesys.com>

	* Makefile.in (DLL_OFILES): Add hookapi.o.  Eliminate some cruft.
	* cygheap.h (cygheap_types): Add new enum: HEAP_1_HOOK.
	(hook_chain): New struct.
	(init_cygheap::hooks): Define new element.
	* cygheap.cc (cygheap_fixup_in_child): Zero hook chain on exec.
	* dcrt0.cc (dll_crt0_1): Call ld_preload just before calling main function.
	* external.cc (cygwin_internal): Implement CW_HOOK.
	* fork.cc (fork_child): Call fixup_hooks_after_fork.
	* init.cc (cygwin_hmodule): Reinstate after a long absence.
	* include/sys/cygwin.h: Define CW_HOOK.
	* hookapi.cc: New file.

	* select.cc (start_thread_socket): Add debugging output.

	* fhandler_disk_file.cc (fhandler_disk_file::fchmod): gcc 4.x
	accommodation.

	* fhandler_socket.cc (fhandler_socket::connect): Make sure that err is
	initialized.

2005-03-22  Corinna Vinschen  <corinna@vinschen.de>

	* cygwin.din (__ctype_ptr): Export.
	* include/cygwin/version.h: Bump API minor version.

2005-03-21  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.h (class cygthread): Remove forward declaration.

2005-03-21  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.h (class cygthread): Forward declare.
	(fhandler_socket::sec_pipe): Remove.
	(fhandler_socket::eid_pipe_name): Remove.
	(fhandler_socket::eid_setblocking): New private method.
	(fhandler_socket::eid_unsetblocking): Ditto
	(fhandler_socket::eid_recv): Ditto
	(fhandler_socket::eid_send): Ditto
	(fhandler_socket::eid_accept): Ditto
	(fhandler_socket::eid_connect): New public method.
	* fhandler_socket.cc (ASYNC_MASK): Move to beginning of file.
	(fhandler_socket::eid_pipe_name): Remove.
	(fhandler_socket::set_socketpair_eids): Move down to fhandler_socket
	methods.
	(fhandler_socket::fhandler_socket): Drop initializing sec_pipe.
	(fhandler_socket::~fhandler_socket): Drop closing sec_pipe.
	(fhandler_socket::eid_setblocking): New method.
	(fhandler_socket::eid_unsetblocking): New method.
	(fhandler_socket::eid_recv): New method.
	(fhandler_socket::eid_send): New method.
	(fhandler_socket::eid_connect): New method.
	(fhandler_socket::eid_accept): New method.
	(fhandler_socket::dup): Drop sec_pipe handling.
	(fhandler_socket::connect): Fix WinSock error handling. Prepare
	eid credential transaction. Call eid_connect on successful connect.
	(fhandler_socket::listen): Drop creating sec_pipe.
	(fhandler_socket::accept): Slightly simplify code. Call eid_accept
	on accepted socket.
	(fhandler_socket::getpeereid): Reshuffle code for readability. Fix
	test for invalid pid.
	* select.cc (set_bits): Call eid_connect on successfully connected
	socket.

2005-03-19  Christopher Faylor  <cgf@timesys.com>

	* child_info.h (fork_info): Use different method to alias variable.
	(spawn_info): Ditto.
	* cxx.cc (__cxa_guard_acquire): New function (needed for gcc 4.x).
	(__cxa_guard_release): Ditto.
	* devices.in: Make sure stuff is correctly bracketed (for gcc 4.x).
	* devices.cc: Regenerate.
	* fhandler.h (fhandler_disk_file::fchmod): Avoid left coercion (for gcc
	4.x).
	* smallprint.c (__rn): Declare as __fastcall since gcc 4.x complains
	about use of regparm, for some reason.
	* sync.h (sync::init_lock): Remove.
	* sync.cc (sync::init_lock): Ditto.

2005-03-18  Christopher Faylor  <cgf@timesys.com>

	* net.cc (cygwin_getprotobyname): Don't try to be fancy with return
	values.
	(cygwin_getprotobynumber): Ditto.

2005-03-17  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_disk_file.cc (fhandler_disk_file::utimes): Handle opening
	directories under 9x gracefully.

2005-03-17  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_socket.cc (fhandler_socket::connect): Always set sun_path
	in case of a successful or pending connect.
	(fhandler_socket::accept): Don't run secret event and eid credential
	transactions if OS accept returned WSAEWOULDBLOCK.

2005-03-16  Christopher Faylor  <cgf@timesys.com>

	* fhandler_tape.cc (get_ll): This is a generally useful function so
	move it
	* winsup.h (get_ll): to here.
	* security.cc (get_token_group_sidlist): Use get_ll to figure out the
	long long version of the luid since QuadPart is not part of the
	standard Windows API.

2005-03-16  Christopher Faylor  <cgf@timesys.com>

	* dir.cc: Rename opendir_* to dirent_* throughout.
	(opendir_states): Move and rename.
	* fhandler.h (dirent_states): to here.
	* fhandler_disk_file.cc (fhandler_disk_file::readdir): Use raw readdir
	when skipping through entries since it is keeping track of "." and
	"..".
	(fhandler_cygdrive::seekdir): Use fhandler_disk_file::readdir to do
	everything.
	* fhandler_virtual.cc (fhandler_virtual::opendir): Set flag indicating
	that we provide .  and ..
	(fhandler_virtual::seekdir): Ditto.
	(fhandler_virtual::rewinddir): Ditto.
	* fhandler_registry.cc (fhandler_registry::rewinddir): Ditto.

2005-03-16  Christopher Faylor  <cgf@timesys.com>

	* cygtls.cc (free_local): New macro.
	(_cygtls::remove): Use free_local to free known-malloced local
	variables.
	* cygtls.h: Mark some variables as "malloced".
	* net.cc (enum struct_type): Rename from is_* to t_* for clarity.
	(dump_protoent): Delete.
	(dup_ent): New macro.
	(__dup_ent): Renamed from dup_ent.  Change arguments for convenience.
	Replace first argument with newly alloced value.  Allocate a rounded
	number of bytes in an attempt to try to reuse space.  Subsume
	"dump_protent".
	(cygwin_getprotobyname): Simplify using new dup_ent functionality.
	(cygwin_getprotobynumber): Ditto.
	(cygwin_getservbyname): Ditto.
	(cygwin_getservbyport): Ditto.
	(cygwin_gethostname): Ditto.
	(cygwin_gethostbyname): Ditto.
	* tlsoffsets.h: Regenerate.

	* syslog.cc (openlog): Use NULL rather than 0, for consistency with the
	rest of cygwin.
	(pass_handler::initialize): Use unbuffered I/O in pass one.

2005-03-15  Christopher Faylor  <cgf@timesys.com>

	* errno.cc (errmap): Correct typo in previous change.

2005-03-15  Christopher Faylor  <cgf@timesys.com>

	* cygtls.cc (_cygtls::remove): Free process_ident, if it exists.

	* errno.cc (errmap): ERROR_DISK_CORRUPT -> EIO.

2005-03-11  Christopher Faylor  <cgf@timesys.com>

	* path.h (pathconv_arg): Define PC_NO_ACCESS_CHECK.
	(path_types): Define PATH_NO_ACCESS_CHECK == PC_NO_ACCESS_CHECK.
	* path.cc (symlink_info::check_sysfile): Move to symlink_info class and
	eliminate arguments that are part of class.  Use set_error.
	(symlink_info::check_shortcut): Ditto.
	(symlink_info::set_error): New function.
	(path_conv::check): Pass PC_NO_ACCESS_CHECK to symlink_info::check.
	(symlink_info::check): Preserve PC_NO_ACCESS_CHECK in pflags.  Use
	set_error.

2005-03-10  Corinna Vinschen  <corinna@vinschen.de>

	* path.cc (is_floppy): New function.
	(setmntent): Drop floppy drives on A: and B: from logical drive DWORD.
	* syscalls.cc (sync): Don't sync floppies on A: and B:.

2005-03-10  Christopher Faylor  <cgf@timesys.com>

	* autoload.cc (LoadDLLprime): Use nocopy segment or forked processes
	will not initialize properly.

2005-03-10  Christopher Faylor  <cgf@timesys.com>

	* autoload.cc (LoadDLLprime): Scrap use of .linkonce and just use an
	ifdef guard to load .foo_init into data segment.

	* dcrt0.cc (initial_env): Allow colon or space as CYGWIN_DEBUG
	separator for consistency.

2005-03-09  Christopher Faylor  <cgf@timesys.com>

	* pinfo.h (pinfo::pinfo): Clear more elements in the constructor.

2005-03-09  Christopher Faylor  <cgf@timesys.com>

	* net.cc (dup_ent): Revert older stupid test for null.  Don't copy name
	if it is NULL.

2005-03-09  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_socket.cc (fhandler_socket::eid_pipe_name): Fix format
	string.
	(fhandler_socket::connect): Set sun_path before running eid credential
	transaction.  Run transaction only if OS connect was successful.
	(fhandler_socket::accept): Run transaction only if OS accept was
	successful.

2005-03-09  Corinna Vinschen  <corinna@vinschen.de>

	* signal.cc (sigprocmask): Rename first parameter to "how".
	(handle_sigprocmask): Ditto.  Check "how" for being a valid "how" value.
	Fix call order in case of wrong "how" value.

2005-03-09  Christopher Faylor  <cgf@timesys.com>

	* net.cc (dup_ent): Revert previous stupid change.

2005-03-09  Christopher Faylor  <cgf@timesys.com>

	* net.cc (dup_ent): Avoid dereferencing a null pointer in a debug_printf.

2005-03-09  Christopher Faylor  <cgf@timesys.com>

	* path.cc (path_conv::check): Treat ENOSHARE similarly to ENOENT when
	determining if there was a problem with a symlink.

2005-03-08  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_socket.cc (fhandler_socket::listen): Don't limit the number
	of pipe instances.

2005-03-08  Christopher Faylor  <cgf@timesys.com>

	* pinfo.cc (pinfo::exit): Right shift exit value by eight when not
	started in a cygwin environment.

2005-03-07  Corinna Vinschen  <corinna@vinschen.de>

	* mmap.cc (mmap64): Handle MAP_AUTOGROW flag.
	(fhandler_disk_file::mmap): Ditto. Clean conditional for readability.
	* include/sys/mman.h: Add MAP_AUTOGROW flag.
	* include/cygwin/version.h: Bump API minor version.

2005-03-08  Christopher Faylor  <cgf@timesys.com>

	* dcrt0.cc (dll_crt0_0): Eliminate muto::init call.
	* sync.h (locker): New, currently unused class.
	(muto::init): Eliminate.
	* sync.cc (muto::init): Ditto.
	(muto::init): Eliminate critical section lock and instead use name as a
	guard to prevent against multiple attempts to initialize the same muto.

	* pinfo.cc (pinfo::init): Set myself procinfo when not execing and pid
	matches windows pid or cygwin pid.

2005-03-06  Pavel Tsekov  <ptsekov@gmx.net>

	* path.cc (mount_info::read_cygdrive_info_from_registry): Use the user
	prefix if it exists.

2005-03-06  Christopher Faylor  <cgf@timesys.com>

	* sync.h (sync::init_lock): Declare new static member.
	(sync::init()): Declare new static function.
	* sync.cc (sync::init): Define.
	(sync::init): Lock attempt to initialize a muto to stop multiple
	threads from colliding.
	* dcrt0.cc (dll_crt0_0): Initialize muto environment.

2005-03-06  Christopher Faylor  <cgf@timesys.com>

	* path.cc (special_name): Reorganize to always detect the use of
	special names first, before detecting special characters.

2005-03-04  Christopher Faylor  <cgf@timesys.com>

	* fhandler_clipboard.cc: Use int for cygnativeformat rather than UINT
	as that is what is returned by GetPriorityClipboardFormat.
	(fhandler_dev_clipboard::read): Ditto for the format variable.

2005-03-04  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.cc (fhandler_base::open_9x): Satisfy query_open values.

2005-03-04  Pierre Humblet <pierre.humblet@ieee.org>

	* fhandler_socket.cc (fhandler_socket::ioctl): Only cancel
	WSAAsyncSelect when async mode is on.

2005-03-03  Corinna Vinschen  <corinna@vinschen.de>

	* cygwin.din (utmpxname): Export.
	* syscalls.cc (utmpxname): Create export alias to utmpname.
	* include/utmpx.h: Define ut_name and ut_xtime if not already defined.
	(utmpxname): Add prototype.
	* include/sys/utmp.h: Only define ut_name if not already defined.
	* include/cygwin/version.h: Bump API minor version.

2005-03-03  Christopher Faylor  <cgf@timesys.com>

	* cygthread.cc (cygthread::detach): Use a slightly higher priority when
	waiting for thread signalling.

2005-03-02  Christopher Faylor  <cgf@timesys.com>

	* autoload.cc (std_dll_init): Save and restore fpu control register
	around LoadAddress to prevent loaded dlls (like msvcrt.dll) from
	setting unwanted stuff.

2005-03-02  Christopher Faylor  <cgf@timesys.com>

	* cygtls.cc (_cygtls::remove): Don't attempt any removal activities if
	exitsock is zero.

2005-03-02  Christopher Faylor  <cgf@timesys.com>

	* cygtls.cc (_cygtls::init_thread): Move exitsock setting later.  It
	should always be set.
	(_cygtls::remove): Detect zero exitsock.  Not quite sure why this is needed.

2005-03-02  Christopher Faylor  <cgf@timesys.com>

	* autoload.cc (LoadDLLprime): Mask error code to low-order 16 bits.
	(noload): Preserve sign when returning error code.

2005-03-02  Christopher Faylor  <cgf@timesys.com>

	* spawn.cc (do_cleanup): Properly restore SIGINT/SIGQUIT even if they
	had previously been SIG_DFL.

2005-03-01  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_disk_file.cc (fhandler_disk_file::touch_ctime): Replace
	GetSystemTime/SystemTimeToFileTime with GetSystemTimeAsFileTime.
	* times.cc (time_as_timestruc_t): Ditto.
	(time): Ditto.

2005-03-01  Christopher Faylor  <cgf@timesys.com>

	* include/cygwin/version.h: Bump DLL minor number to 14.

2005-03-01  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_clipboard.cc (fhandler_dev_clipboard::write): Never set
	errno to 0.
	(fhandler_dev_clipboard::read): Ditto.
	* fhandler_windows.cc (fhandler_windows::read): Ditto.
	* scandir.cc (scandir): Ditto.
	* syscalls.cc (_fstat64_r): Ditto.
	(_fstat_r): Ditto.
	(_stat64_r): Ditto.
	(_stat_r): Ditto.

	* mmap.cc (mmap64): Fix /dev/zero mapping.

2005-02-28  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.h (class fhandler_socket): Declare new method
	set_socketpair_eids.
	* fhandler_socket.cc (fhandler_socket::set_socketpair_eids): New method.
	(fhandler_socket::dup): Duplicate sec_pipe if necessary.
	(fhandler_socket::listen): Only create sec_pipe if named pipes are
	available. Initialized sec_peer_pid to 0 as on Linux.
	(fhandler_socket::connect): Only run eid credential transaction if
	named pipes are available.  Fake otherwise. Initialized sec_peer_pid
	to 0 as on Linux.
	(fhandler_socket::accept): Ditto.
	(fhandler_socket::close): Move closing sec_pipe handle from here...
	(fhandler_socket::~fhandler_socket): ... to here.
	* net.cc (socketpair): Set eid credentials by calling
	fhandler_socket::set_socketpair_eids() on both socket ends.
	* wincap.h (wincaps::has_named_pipes): New element.
	* wincap.cc: Implement above element throughout.

2005-02-26  Christopher Faylor  <cgf@timesys.com>

	* sigproc.cc (_pinfo::set_ctty): Move function
	* pinfo.cc (_pinfo::set_ctty): to here.

	* fhandler_mem.cc (fhandler_dev_mem::fstat): Don't fill out structure
	if this is an on-disk device rather than an "auto" device.
	* fhandler_raw.cc (fhandler_dev_raw::fstat): Ditto.

	* path.cc (normalize_posix_path): Don't treat a standalone '//' as
	introducing a UNC path.
	(normalize_win32_path): Ditto.

2005-02-26  Christopher Faylor  <cgf@timesys.com>

	* debug.cc (delete_handle): Report on handle value in debugging output.

	* pinfo.h (_pinfo::exists): Declare "new" function.
	(_pinfo::kill): Ditto.
	* fhandler_termios.cc (tty_min::kill_pgrp): Use _pinfo::exists rather
	than proc_exists.
	* pinfo.cc (pinfo::init): Ditto.  Don't do a low_priority_sleep(0) when
	looping to find exec'ed procinfo.
	(pinfo::release): Be more careful about unmapping and closing.
	* signal.cc (_pinfo::kill): Rename from kill_worker.  Accommodate entry
	into _pinfo class.
	(kill0): Use _pinfo::kill rather than kill_worker.
	(kill_pgrp): Ditto.  Use _pinfo::exists rather than proc_exists.
	* sigproc.cc (_pinfo::exists): Rename from proc_exists.
	(pid_exists): Use _pinfo::exists rather than proc_exists.
	(remove_proc): Ditto.
	* sigproc.h (proc_exists): Delete declaration.

2005-02-25  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.h (class fhandler_base): Declare fixup_mmap_after_fork
	with additional flags parameter.  Change offset parameter to _off64_t.
	(class fhandler_disk_file): Ditto.
	(class fhandler_dev_mem): Ditto.
	* fhandler_mem.cc (fhandler_dev_mem::fixup_mmap_after_fork):
	Accommodate new parameters.
	* mmap.cc: Include ntdll.h.
	(class mmap_record): Add flags member.
	(mmap_record::mmap_record): Add flags parameter.
	(mmap_record::get_flags): New method.
	(class map): Add next_anon_addr member to store next anonymous mapping
	address suggestion.
	(map::get_next_anon_addr): New method.
	(map::set_next_anon_addr): New method.
	(mmap64): Don't align offset and length to granularity in case of
	MAP_ANONYMOUS on NT.  Check for already existing mapping only on 9x.
	Call mmap_record::mmap_record with additional flags argument.
	(fhandler_base::fixup_mmap_after_fork): Accommodate new parameters.
	(fhandler_disk_file::mmap): Use NtMapViewOfSection with
	AT_ROUND_TO_PAGE flag for anonymous mappings on NT.  If addr is NULL,
	try to map adjacent to previous mapping.
	(fhandler_disk_file::fixup_mmap_after_fork): Add flags argument.
	Change offset parameter to _off64_t.  Use NtMapViewOfSection to
	re-create anonymous mappings on NT.
	(fixup_mmaps_after_fork): Accommodate new parameters when calling
	fhandler's fixup_mmaps_after_fork function.
	* ntdll.h (AT_ROUND_TO_PAGE): New define.

2005-02-25  Corinna Vinschen  <corinna@vinschen.de>

	* mmap.cc (mmap64): Handle anonymous MAP_FIXED request on
	non-granulation boundary.

2005-02-25  Corinna Vinschen  <corinna@vinschen.de>

	* mmap.cc (class mmap_record): Declare new map_pages method with
	address parameter.
	(mmap_record::map_pages): New method with address parameter.
	(mmap64): Evaluate access mode before checking if already existing
	mapping can be used.
	Only use existing mapping if requested access mode matches the one
	in the existing mapping.
	Add check for existing mapping for anonymous MAP_FIXED case.

2005-02-23  Corinna Vinschen  <corinna@vinschen.de>

	* localtime.cc: Implement setting __tzrule's offset member using
	newlib's __gettzinfo () interface.
	(__tzrule): Remove.
	(timezone): Define as long according to POSIX.

2005-02-23  Eric Blake  <ebb9@byu.net>

	* devices.in (parsedisk): Fix typo.
	* devices.cc: Regenerate.

2005-02-23  Corinna Vinschen  <corinna@vinschen.de>

	* cygwin.din (getpeereid): Export.
	* fhandler.h (class fhandler_socket): Add pipe and id members to
	exchange eid credentials for AF_LOCAL sockets.
	(eid_pipe_name): Declare new method.
	(getpeereid): Ditto.
	* fhandler_socket.cc (fhandler_socket::eid_pipe_name): New method.
	(fhandler_socket::fhandler_socket): Initialize sec_pipe.
	(fhandler_socket::connect): Exchange eid credentials with accepting
	socket process.
	(fhandler_socket::listen): Prepare eid credential transaction.
	(fhandler_socket::accept): Exchange eid credentials with connecting
	socket process.
	(fhandler_socket::close): Close eid credentials pipe if open.
	(fhandler_socket::getpeereid): New method.
	* net.cc (cygwin_getsockopt): Add SO_PEERCRED handling.
	(getpeereid): New function.
	* include/asm/socket.h (SO_PEERCRED): Define.
	* include/cygwin/socket.h (struct ucred): Define new type.
	* include/cygwin/version.h: Bump API minor version.

2005-02-23  Corinna Vinschen  <corinna@vinschen.de>

	* include/sys/statvfs.h (ST_RDONLY): Define.
	(ST_NOSUID): Define.

2005-02-23  Corinna Vinschen  <corinna@vinschen.de>

	* cygwin.din (fstatvfs): Export.
	(statvfs): Export.
	* syscalls.cc: Include sys/statvfs.h.
	(statvfs): New function.  Move statfs functionality here.
	(fstatvfs): New function.
	(statfs): Just call statvfs and copy structure.  Check validity of
	incoming struct statfs pointer.
	* include/cygwin/types.h (fsblkcnt_t): Define.
	(fsfilcnt_t): Define.
	* include/cygwin/version.h: Bump API minor version.
	* include/sys/statvfs.h: New file.

2005-02-23  Corinna Vinschen  <corinna@vinschen.de>

	* devices.h: Switch FH_ZERO and FH_PORT as on Linux.  Add FH_FULL.
	* devices.in: Add /dev/full.
	* devices.cc: Regenerate.
	* dtable.cc (build_fh_pc): Add FH_FULL.
	* fhandler.cc (fhandler_base::fstat): Set FH_FULL permission bits
	correctly.
	* fhandler_zero.cc (fhandler_dev_zero::write): Set errno to ENOSPC
	and return -1 if device is FH_FULL.

2005-02-22  Christopher Faylor  <cgf@timesys.com>

	* fhandler_disk_file.cc (fhandler_cygdrive::closedir): Return 0 when
	closing cygdrive_root.

2005-02-22  Corinna Vinschen  <corinna@vinschen.de>

	* cygwin.din (basename): Export.
	(dirname): Export.
	* path.cc (basename): New function.
	(dirname): New function.
	* include/libgen.h: New file.
	* include/cygwin/version.h: Bump API minor version.

2005-02-22  Corinna Vinschen  <corinna@vinschen.de>

	* select.cc (peek_pipe): Disable new pipe code until there's
	a working substitute.

2005-02-22  Corinna Vinschen  <corinna@vinschen.de>

	* cygwin.din (fdatasync): Export.
	* fhandler.cc (fhandler_base::fsync): Return with EINVAL if no
	handle is available.
	* syscalls.cc (fdatasync): Create export alias to fsync.
	* include/cygwin/version.h: Bump API minor version.

2005-02-20  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.h (fhandler_base::fstat_helper): Declare with additional
	dwVolumeSerialNumber argument.  Drop default values for last three
	arguments.
	* fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Pass
	dwVolumeSerialNumber from GetFileInformationByHandle to fstat_helper.
	(fhandler_base::fstat_by_name): Pass pc.volser () to fstat_helper.
	Accommodate dropping default values for last three arguments of
	fstat_helper.
	(fhandler_base::fstat_helper): Add dwVolumeSerialNumber argument.
	Use for st_dev member unless 0 in which case pc.volser () is used.

2005-02-20  Corinna Vinschen  <corinna@vinschen.de>

	* autoload.cc (FindFirstVolumeA): Add.
	(FindNextVolumeA): Add.
	(FindVolumeClose): Add.
	(GetVolumePathNamesForVolumeNameA): Add.
	* fhandler.h (class fhandler_base): Declare new method fsync.
	* fhandler.cc (fhandler_base::fsync): New method.
	* syscalls.cc (fsync): Move functionality into fhandler method fsync.
	Just call this method from here.
	(sync_worker): New static function.
	(sync): Fill with life for NT systems.
	* wincap.h (wincaps::has_guid_volumes): New element.
	* wincap.cc: Implement above element throughout.

2005-02-20  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.h (enum query_state): Add query_write_attributes state.
	(fhandler_base::status.query_open): Add a bit to make room for more
	states.
	(class fhandler_base): Declare new method utimes.
	(class fhandler_socket): Ditto.
	(class fhandler_disk_file): Ditto.
	(fhandler_disk_file::fhandler_disk_file): Add constructor with
	path_conv parameter.
	* fhandler.cc (fhandler_base::open): Add query_write_attributes
	handling.
	(fhandler_base::utimes): New method.
	* fhandler_disk_file.cc (fhandler_disk_file::link): Simplify.
	Open file with query_write_attributes instead of query_write_control.
	(fhandler_disk_file::utimes): New method.
	(fhandler_disk_file::fhandler_disk_file): Add constructor with
	path_conv parameter setting pc member immediately.
	* fhandler_socket.cc (fhandler_socket::fchmod): Use new
	fhandler_disk_file constructor.
	(fhandler_socket::fchown): Ditto.
	(fhandler_socket::facl): Ditto.
	(fhandler_socket::link): Ditto.
	(fhandler_socket::utimes): New method.
	* times.cc: Include dtable.h.
	(timeval_to_filetime): Make non-static.
	(utimes): Move functionality into fhandler method utimes. Just call
	this method from here.
	* winsup.h: Simplify declarations of time helper functions.
	(timeval_to_filetime): Add extern declaration.

2005-02-19  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.h (class fhandler_base): Declare new method link.
	(class fhandler_socket): Ditto.
	(class fhandler_disk_file): Ditto.
	* fhandler.cc (fhandler_base::open): Add FILE_WRITE_ATTRIBUTES
	to query_write_control access flags.
	(fhandler_base::link): New method.
	* fhandler_disk_file.cc (fhandler_disk_file::fchmod): Don't try to
	open with O_WRONLY since query_write_control includes
	FILE_WRITE_ATTRIBUTES.
	(fhandler_disk_file::fchown): Ditto.
	(fhandler_disk_file::facl): Ditto.
	(fhandler_disk_file::link): New method.  Touch st_ctime on successful
	link.
	* fhandler_socket.cc (fhandler_socket::link): New method.
	* syscalls.cc (link): Move functionality into fhandler method link.
	Just call this method from here.

2005-02-19  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.h (class fhandler_socket): Declare new methods fchown,
	fchmod and facl.
	* fhandler_socket.cc (fhandler_socket::fstat): Handle AF_LOCAL
	sockets.
	(fhandler_socket::fchmod): New method.
	(fhandler_socket::fchown): New method.
	(fhandler_socket::facl): New method.

2005-02-19  Corinna Vinschen  <corinna@vinschen.de>

	* localtime.cc: Temporary implementation of setting __tzrule's offset
	member to be used by strftime.
	(__tzrule): New global variable.
	(tzparse): Set __tzrule's offset member appropriately.

2005-02-17  Christopher Faylor  <cgf@timesys.com>

	* path.cc (path_conv::check): Set fs flag when a unix-domain socket
	is detected.

2005-02-17  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_disk_file.cc (fhandler_disk_file::fstat): Set st_ctime if
	has_changed flag is set.
	(fhandler_disk_file::touch_ctime): Reset has_changed flag on success.

2005-02-17  Corinna Vinschen  <corinna@vinschen.de>

	* times.cc (utimes): Open files with FILE_WRITE_ATTRIBUTES first,
	if that fails, try opeing with GENERIC_WRITE.  Fix comments.

2005-02-15  Christopher Faylor  <cgf@timesys.com>

	* path.h (path_conv::issocket): Return true if device == FH_UNIX rather
	than expecting path_conv to set a flag.

2005-02-11  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.cc (fhandler_base::raw_write): Mark as changed on
	successful write.
	* fhandler.h (fhandler_base::status_flags): Add 'has_changed' flag.
	* fhandler_disk_file.cc (fhandler_disk_file::fchmod): Call
	fhandler_disk_file's own open and close instead of open_fs and
	close_fs.  Mark as changed on success.
	(fhandler_disk_file::fchown): Ditto.
	(fhandler_disk_file::facl): Ditto.
	(fhandler_disk_file::ftruncate): Ditto.
	(fhandler_base::open_fs): Mark as changed when O_TRUNC flag on existing
	file is set.
	(fhandler_disk_file::close): Set st_ctime if has_changed flag is set.

2005-02-11  Christopher Faylor  <cgf@timesys.com>

	* cygthread.cc (cygthread::release): Reset ev here if it exists.
	(cygthread::terminate_thread): Eliminate racy code which reset ev and
	thread_sync.  Remove a few nonsensical inuse checks.  Exit at the
	bottom.
	(cygthread::detach): Rewrite to again try to ensure that we don't say
	we're signalled when we are not signalled.
	* fhandler.cc (fhandler_base::raw_read): Revert to signalling read
	success quickly.
	* pipe.cc (fhandler_pipe::close): Use base method to close handle.
	* sigproc.h (WAIT_SIG_PRIORITY): Just trundle along at normal priority
	to allow the pipe thread to do its thing if possible.

	* pinfo.h (pinfo::zap_cwd): Declare new function.
	(pinfo::zap_cwd): Move 'cd out of the way code' here.
	(pinfo::exit): Use it here.
	* spawn.cc (spawn_guts): And here.

2005-02-11  Corinna Vinschen  <corinna@vinschen.de>

	* times.cc (utimes): Open files with GENERIC_WRITE on file systems
	not supporting ACLs.

2005-02-09  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_disk_file.cc (fhandler_disk_file::ftruncate): Fix checking
	lseek return code.

2005-02-08  Corinna Vinschen  <corinna@vinschen.de>

	* times.cc (timeval_to_filetime): Define first parameter const.
	(utimes): Define second parameter to const according to SUSv3.
	(utime): Ditto.
	* include/sys/utime.h (utime) : Change declaration accordingly.

2005-02-08  Corinna Vinschen  <corinna@vinschen.de>

	* cygthread.cc (cygthread::detach): Just test thread handle after
	signal arrived, don't wait infinitely for it.

2005-02-08  Christopher Faylor  <cgf@timesys.com>

	* pipe.cc (fhandler_pipe::read): Remove hold over from old read_state
	implementation.

2005-02-06  Yitzchak Scott-Thoennes <sthoenna@efn.org>

	* net.cc (cygwin_gethostbyname): Be more picky about what's a numeric
	address string, and use tls in that case too.

2005-02-07  Christopher Faylor  <cgf@timesys.com>

	* exceptions.cc: Make windows_system_directory non-static.
	* pinfo.cc (pinfo::exit): Change innocuous cd'ed location to one that
	is more likely to exist.

2005-02-06  Corinna Vinschen  <corinna@vinschen.de>

	* path.cc (path_conv::check): Leave symlink expansion loop in case
	a not-ENOENT error happens.

	* cygheap.h (cygheap_fdmanip::fhandler_pipe *): New cast operator.
	* pinfo.cc (_pinfo::commune_recv): Add PICOM_PIPE_FHANDLER handling.
	(_pinfo::commune_send): Ditto.
	(_pinfo::pipe_fhandler): New method.
	* pinfo.h (enum picom): Add PICOM_PIPE_FHANDLER.
	(_pinfo::pipe_fhandler): Declare.
	* pipe.cc (fhandler_pipe::open): Rewrite.  Allow to open foreign
	pipe handles.

2005-02-03  Christopher Faylor  <cgf@timesys.com>

	* cygthread.h (cygthread::terminate_thread): Reflect return value.
	* cygthread.cc (cygthread::detach): Be more careful about ensuring that
	sigwait is properly waited for to avoid later missynchronization.
	(cygthread::terminate_thread): Return true if thread was actually
	terminated and all handles were closed.
	* fhandler_base.cc (fhandler_base::raw_read): Use signal_read_state
	rather than raw calls to win32 api.
	(fhandler_base::read): Ditto.
	* fhandler.h (fhandler_pipe::fixup_after_exec): Use method to create
	read_state signalling.
	(fhandler_pipe::create): Ditto.

	* Makefile.in: Make some more files -fomit-frame-pointer.

2005-02-02  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.h (fhandler_base::ftruncate): Define new virtual method.
	(fhandler_disk_file::ftruncate): Ditto.
	* fhandler.cc (fhandler_base::ftruncate): New method.
	* fhandler_disk_file.cc (fhandler_disk_file::ftruncate): Ditto.
	* syscalls.cc (ftruncate64): Move functionality into fhandlers.
	Call fhandler method from here.

2005-02-02  Corinna Vinschen  <corinna@vinschen.de>

	* pipe.cc (fhandler_pipe::dup): Fix conditionals in case of error.

2005-02-02  Corinna Vinschen  <corinna@vinschen.de>

	* times.cc (utimes): Mark st_ctime for update according to SUSv3.

2005-02-01  Christopher Faylor  <cgf@timesys.com>

	* fhandler_proc.cc (format_proc_partitions): Remove PartitionType check
	since it could skip over partitions that are actually interesting.

2005-02-01  Christopher Faylor  <cgf@timesys.com>

	* cygthread.cc (cygthread::terminate_thread): Wait briefly for
	notification event in the event that the thread was actually in the
	process of exiting.

	* pipe.cc (fhandler_pipe::dup): read_state is not supposed to be
	inheritable.  Fix that.

	* path.cc (path_conv::check): Set symlen = 0 to avoid a compiler
	warning.

	* devices.h (devices::parsedisk): Declare new function.
	* devices.in (devices::parsedisk): Define new function.
	* dtable.cc (dtable::init_std_file_from_handle): Use device numbers
	rather than name.
	* fhandler_proc.cc (format_proc_partitions): Use parsedisk to generate
	disk names from numeric codes.  (This was broken on two of my
	systems previously and is still broken now)

2005-02-01  Corinna Vinschen  <corinna@vinschen.de>

	* pipe.cc (fhandler_pipe::open):  Allow re-opening of /proc/<pid>/fd
	pipes of the current process.

2005-02-01  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.cc (fhandler_base::get_proc_fd_name): Don't generate
	"device:" entry.
	* fhandler.h (fhandler_socket::open): New method.
	(fhandler_pipe::open): New method.
	* fhandler_proc.cc (fhandler_proc::exists): Return -2 in case of
	/proc/self.
	* fhandler_process.cc (fhandler_process::exists): Return -2 in
	case of symlinks, -3 for pipes and -4 for sockets.
	(fhandler_process::fstat): Handle pipes and sockets.
	(fhandler_process::open): Handle opening /proc/<pid>/fd.
	(fhandler_process::fill_filebuf): Generate empty names for
	non exisiting file descriptors.
	* fhandler_socket.cc (fhandler_socket::get_proc_fd_name): Always
	generate "socket:[number]" strings as on Linux.
	(fhandler_socket::open): New method.
	(fhandler_socket::fstat): Always return socket type.
	* path.cc (symlink_info::set): Remove unused second parameter.
	(path_conv::check): Handle pipes and sockets in /proc.
	Set correct device type for AF_LOCAL sockets.
	* pinfo.cc (_pinfo::commune_recv): Generate empty names for
	non exisiting file descriptors.
	(_pinfo::fd): Ditto.
	* pipe.cc (fhandler_pipe::open): New method.

2005-01-31  Christopher Faylor  <cgf@timesys.com>

	* path.h (path_conv::set_name): Declare new function.
	* path.cc (path_conv::set_name): Define new function.
	* fhandler.h (fhandler_dev_null::open): Declare new function.
	* fhandler.cc (fhandler_dev_null::open): Define new function.

2005-01-31  Christopher Faylor  <cgf@timesys.com>

	* smallprint.c (rnarg): Use long rather than unsigned long so that we
	get proper sign extension.

2005-01-31  Corinna Vinschen  <corinna@vinschen.de>

	* environ.cc (set_traverse): New function.
	(parse_thing): Add "traverse" option.  Sort options alphabetically.
	(environ_init): On NT, switch on traverse checking by default.

2005-01-31  Christopher Faylor  <cgf@timesys.com>

	* smallprint.c (__rn): Regparmize.

2005-01-31  Christopher Faylor  <cgf@timesys.com>

	* smallprint.c (rnarg): New macro.
	(rnargLL): Ditto.
	(__rn): Rename from 'rn', add a mask argument, and use the mask
	argument to control how many significant digits to care about.
	(__small_vsprintf): Use __rn, rnarg, rnargLL, as appropriate.

2005-01-31  Christopher Faylor  <cgf@timesys.com>

	* pinfo.cc (pinfo::exit): Only return low-order 16 bits when exiting.

2005-01-31  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_process.cc (format_process_maps): Get destbuf argument by
	reference.  Allow resizing of destbuf as necessary.  Fix string
	handling.

2005-01-31  Corinna Vinschen  <corinna@vinschen.de>

	* cygheap.h (class cygheap_fdenum): New class to enumerate used
	fhandlers.
	* dtable.h (class dtable): Add cygheap_fdenum as friend class.
	* fhandler.h (fhandler_base::get_proc_fd_name): New virtual method
	to return a name for /proc/<pid>/fd.
	(fhandler_socket::get_proc_fd_name): Ditto.
	(fhandler_pipe::get_proc_fd_name): Ditto.
	(fhandler_virtual::opendir): Make virtual method.
	(fhandler_process::opendir): New method.
	* fhandler.cc (fhandler_base::get_proc_fd_name): New method.
	* fhandler_process.cc: Include ctype.h.
	(PROCESS_FD): Define.
	(process_listing): Add "fd".
	(fhandler_process::exists): Fix comment.  Return 1 in case of "fd"
	directory. Handle files below "fd".
	(fhandler_process::fstat): Drop "self" handling.  Set correct link
	count for directories.
	(fhandler_process::opendir): New method to handle "fd" directory.
	(fhandler_process::readdir): Add "fd" handling.
	(fhandler_process::open): Drop "self" handling.
	(fhandler_process::fill_filebuf): Ditto.  Add "fd" handling.  Fix
	"maps" output string.
	* fhandler_registry.cc (fhandler_registry::fstat): Set correct link
	count for directories.
	* fhandler_socket.cc (fhandler_socket::get_proc_fd_name): New method.
	* path.cc (symlink_info::set): Fix thinko.
	* pinfo.cc (_pinfo::commune_recv): Rename pathbuf to path throughout.
	Drop local path variable in PICOM_FIFO case.  Fix debug output.
	Close handles as early as possible. Add PICOM_FDS and PICOM_FD
	handling.
	(_pinfo::commune_send): Add PICOM_FDS and PICOM_FD handling.
	(_pinfo::fd): New method.
	(_pinfo::fds): New method.
	* pinfo.h (enum picom): Add PICOM_FDS and PICOM_FD.
	(_pinfo::fd): Declare.
	(_pinfo::fds): Declare.
	* pipe.cc (fhandler_pipe::get_proc_fd_name): New method.

2005-01-29  Corinna Vinschen  <corinna@vinschen.de>

	* smallprint.c (rn): Change uval to unsigned long long to fix 64 bit
	handling.
	* fhandler_process.cc (format_process_maps): Print major, minor and
	inode numbers correctly.

2005-01-29  Corinna Vinschen  <corinna@vinschen.de>

	* autoload.cc (GetModuleFileNameExA): Add.
	(GetModuleInformation): Add.
	(QueryWorkingSet): Add.
	* fhandler.h (fhandler_virtual::get_filebuf): New method.
	* fhandler_proc.cc (PROC_SELF): Define.
	(proc_fhandlers): Change type of self to FH_PROC.
	(fhandler_proc::exists): Return -3 if self.
	(fhandler_proc::fstat): Handle self as symlink.
	(fhandler_proc::fill_filebuf): Handle self.
	* fhandler_process.cc: Include psapi.h.
	(PROCESS_EXENAME): Remove.
	(PROCESS_MAPS): Define.
	(PROCESS_ROOT): Define.
	(PROCESS_EXE): Define.
	(PROCESS_CWD): Define.
	(process_listing): Remove "exename", add "maps, "root", "exe" and
	"cwd" elements.
	(fhandler_process::exists): Return -2 for symlinks.
	(fhandler_process::fstat): Handle symlinks.
	(fill_filebuf): Evaluate pid if pid is 0.  Use exename handling for
	exe.  Handle maps, root and cwd.
	(format_process_maps): New function evaluating "maps".
	* path.cc (symlink_info::set): New method to fill symlink_info
	with data matching virtual symlinks.
	(path_conv::check): Handle virtual symlinks.
	* pinfo.cc (_pinfo::commune_recv): Add PICOM_CWD and PICOM_ROOT
	handling.
	(_pinfo::commune_send): Ditto.
	(_pinfo::root): New function.
	(_pinfo::cwd): New function.
	* pinfo.h (enum picom): Add PICOM_CWD and PICOM_ROOT.
	(_pinfo::root): Declare.
	(_pinfo::cwd): Declare.

2005-01-29  Christopher Faylor  <cgf@timesys.com>

	* cygthread.cc (new): Add a little more debugging.
	* thread.cc (pthread_null::exit): Add a _my_tls.remove() for safety.

2005-01-28  Christopher Faylor  <cgf@timesys.com>

	* cygtls.cc (cygtls::call2): Move socket cleanup.
	(cygtls::remove): Move socket cleanup here.  Don't use _my_tls to
	reference it.

2005-01-26  Christopher Faylor  <cgf@timesys.com>

	* pinfo.cc (pinfo::init): Avoid a compiler warning.

2005-01-25  Corinna Vinschen  <corinna@vinschen.de>

	* syscalls.cc (setpriority): Implement PRIO_PGRP, PRIO_USER and
	setting priority in other Cygwin processes.
	(getpriority): Implement PRIO_PGRP, PRIO_USER and getting nice value
	from other processes.

2005-01-26  Pierre Humblet <pierre.humblet@ieee.org>

	* path.cc (path_conv::check): Return ENOTDIR rather than ENOENT
	when a component is not a directory. Remove unreachable code.
	(digits): Delete.

2005-01-25  Christopher Faylor  <cgf@timesys.com>

	* pinfo.h (pinfo::init): Make third parameter non-optional and
	propagate change throughout.
	* pinfo.cc (set_myself): Pass INVALID_HANDLE_POINTER if h is NULL.
	(pinfo::init): Make third parameter non-optional.  Eliminate use of
	PID_EXECED as an argument.  Put setting of handle back inside loop but
	reorganize to try to open it only when necessary.

2005-01-25  Corinna Vinschen  <corinna@vinschen.de>

	* cygwin.din: Export getpriority and setpriority.
	* fork.cc (fork_parent): Copy parent's nice value into child.
	* spawn.cc (spawn_guts): Ditto.
	* miscfuncs.cc (winprio_to_nice): New function.
	(nice_to_winprio): Ditto.
	* pinfo.cc (pinfo_init): If parent is not a Cygwin process, set
	default nice value according to current Win32 priority class.
	* pinfo.h (class _pinfo): Add nice member.
	* syscalls.cc (setpriority): New function, only implementing
	PRIO_PROCESS for now.
	(getpriority): Ditto.
	(nice): Just call setpriority.
	* wincap.h (wincaps::has_extended_priority_class): New element.
	* wincap.cc: Implement above element throughout.
	* winsup.h: Add prototypes for winprio_to_nice and nice_to_winprio.
	* include/limits.h (NZERO): New define.
	* include/cygwin/types.h (id_t): New datatype.
	* include/cygwin/version.h: Bump API minor version.
	* include/sys/resource.h: Add PRIO_XXX defines and prototypes for
	getpriority and setpriority.

2005-01-25  Corinna Vinschen  <corinna@vinschen.de>

	* path.cc (realpath): Allow to expand with .exe suffix.

2005-01-22  Christopher Faylor  <cgf@timesys.com>

	* spawn.cc (spawn_guts): Perform same "cd" as in pinfo::exit below to
	make sure that a stub process does not keep the current working
	directory busy after the "execed" process has exited.

2005-01-22  Christopher Faylor  <cgf@timesys.com>

	* pinfo.cc (pinfo::init): Move everything but the MapViewOfFileEx out
	of the loop since trying multiple times to call CreateFileMapping
	doesn't make much sense.  Try to structure the loop a little better so
	that exiting with a break does the right thing.
	(pinfo::release): Release shared memory area if it exists and close
	handle if it exists.

2005-01-22  Christopher Faylor  <cgf@timesys.com>

	* pinfo.cc (pinfo::maybe_set_exit_code_from_windows): Make sure that
	process has exited before getting an error code.
	(pinfo::exit): "cd" to innocuous location before exiting to make sure
	that process does not keep the current working directory busy while it
	is in the process of really exiting.

2005-01-18  Corinna Vinschen  <corinna@vinschen.de>

	* autoload.cc (CoInitialize): Remove.
	(CoUninitialize): Remove.
	(CoCreateInstance): Remove.
	(CoTaskMemFree): Add.
	(SHGetDesktopFolder): Add.
	* path.cc (shortcut_header): Remove.
	(shortcut_initalized): Remove.
	(GUID_shortcut): New static GUID.
	(struct win_shortcut_hdr): New struct describing Windows shortcut
	header structure.
	(symlink_worker): Rewrite creating Windows shortcuts.  Create
	ITEMIDLIST if target exists.  Only write once.
	(cmp_shortcut_header): Use win_shortcut_hdr structure for comparison.
	(check_shortcut): Rewrite to read only once from file.  Allow skipping
	an ITIMIDLIST in the file.

2005-01-16  Christopher Faylor  <cgf@timesys.com>

	* pinfo.h (maybe_set_exit_code_from_windows): Renamed from
	set_exit_state.
	* pinfo.cc (pinfo::exit): Use renamed function.
	(proc_waiter): Ditto.  Make a copy of input argument to avoid problems
	when procs array is shuffled.  Flag when copy is made so that
	remove_proc knows when it is safe to reshuffle.
	* sigproc.cc (proc_terminate): Don't flag process_state as PID_EXITED.
	(remove_proc): Wait for waiter to finish copying pinfo element before
	moving it (an actual wait should be an extremely rare event).

2005-01-15  Christopher Faylor  <cgf@timesys.com>

	* init.cc (dll_entry): Remove unused extern.

	* include/sys/cygwin.h: Remove PID_ZOMBIE.
	* pinfo.h: Rename EXITCODE_* defines.
	(pinfo::set_exit_state): Remove parameter.
	* pinfo.cc (set_exit_state): Remove parameter.  Reverse sense of test
	so that exitcode is checked for having been set rather than not having
	been set.  Set flag when exitcode has been established.  Don't set
	PID_STATE here.
	(pinfo::init): Remove exitcode initialization.
	(pinfo::exit): Reflect change in EXITCODE_* naming.  Set flag when
	exitcode has been established.  Reflect change in arguments to
	set_process_state.
	(proc_waiter): Reflect change in arguments to set_process_state.  Set
	process_state here and only here.
	* fhandler_process.cc (fhandler_process::fill_filebuf): Reflect removal
	of PID_ZOMBIE define.
	(format_process_stat): Ditto.
	(format_process_status): Ditto.
	* sigproc.cc (pid_exists): Ditto.
	(stopped_or_terminated): Ditto.  Make sure that only low-order 16 bits of
	exitcode are used.
	* spawn.cc (spawn_guts): Reflect change in EXITCODE_* naming.

2005-01-15  Christopher Faylor  <cgf@timesys.com>

	* sigproc.cc (sig_send): Don't complain if attempt to send signal to
	myself fails after I've "execed".

2005-01-14  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_disk_file.cc (fhandler_disk_file::facl): Pretend successful
	SETACL if no acls are available.
	* fhandler.cc (fhandler_base::facl): Implement to return sensible
	values on GETACL and GETACLCNT.  Pretend successful SETACL.
	* fhandler_virtual.cc (fhandler_virtual::facl): Ditto.

2005-01-13  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler.h (fhandler_disk_file::touch_ctime): Declare.
	* fhandler_disk_file.cc (fhandler_disk_file::touch_ctime): New method
	to set file's ctime.
	(fhandler_disk_file::fchmod): Try opening file for writing first.
	Set file's ctime on success.
	(fhandler_disk_file::fchown): Ditto.
	(fhandler_disk_file::facl): Ditto.

2005-01-13  Corinna Vinschen  <corinna@vinschen.de>

	* pinfo.cc (pinfo::exit): Don't access self after releasing it.
	* path.h (path_conv::path_conv): Fill path with native device
	name in case of device argument.

2005-01-13  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_serial.cc (fhandler_serial::dup): Call overlapped_setup
	for child, not for parent.

2005-01-13  Christopher Faylor  <cgf@timesys.com>

	* init.cc (dll_entry): Nuke attempt to set exit code since parent will
	use windows exit code if needed.
	* pinfo.cc (pinfo::exit): Move release() here to minimize pid creation
	race (suggested by Pierre Humblet).

2005-01-12  Christopher Faylor  <cgf@timesys.com>

	Reorganize header file inclusion throughout so that cygerrno.h comes
	first.
	* fhandler.h (select_record::thread_errno): Save any encountered errno
	here.
	(select_record::set_select_errno): New function.
	(select_record::saw_error): New function.
	(select_record::select_record): Initialize thread_errno to zero.
	* select.cc (set_handle_or_return_if_not_open): Set thread_errno on
	failure.
	(select_stuff::wait): Record errno for later resurrection in calling
	thread.
	(peek_serial): Ditto.

2005-01-12  Christopher Faylor  <cgf@timesys.com>

	* syscalls.cc (system): Use "/bin/sh" as per linux and (sorta) SUSv3.

2005-01-12  Christopher Faylor  <cgf@timesys.com>

	* pinfo.cc (pinfo::exit): Don't assume that this == myself.

2005-01-11  Christopher Faylor  <cgf@timesys.com>

	* pinfo.cc (pinfo::init): Don't close input handle on temporary (?)
	failure.

2005-01-11  Christopher Faylor  <cgf@timesys.com>

	* pinfo.h (_pinfo::set_exit_state): Declare new function.
	(pinfo::exit): Move here from _pinfo::exit.
	* sigproc.cc (child_info::sync): Use new function to set exitcode and
	process_state.
	* pinfo.cc (_pinfo::exit): Ditto.
	(proc_waiter): Ditto.
	(_pinfo::set_exit_state): Define new function.
	(_pinfo::dup_proc_pipe): Close handle when there is no parent process
	around to care about the exit value.
	* dcrt0.cc (dll_crt0_0): Move subproc_ready synchronization later to
	make sure that myself is still mapped in parent.
	(do_exit): Reflect movement to pinfo::exit.
	(__api_fatal): Ditto.
	* exceptions.cc (signal_exit): Ditto.
	* errno.cc (errmap): Map PROC_NOT_FOUND.
	* init.cc (dll_entry): Release myself before exiting.
	* sigproc.cc (proc_can_be_signalled): Set errno appropriately.
	(sig_send): Ditto.  Also remove ill-advised test for !myself->sendsig
	since this is an indication of a process which is still initializating
	-- it is not an error.
	(child_info::sync): Don't set exitcode here.  Assume that will happen
	in proc_waiter, if necessary.
	* spawn.cc (spawn_guts): Delay "wait_for_myself" logic until later.
	Don't wait at all if the process has already exited.  Reflect movement
	to pinfo::exit.

2005-01-11  Corinna Vinschen  <corinna@vinschen.de>

	* environ.cc (build_env): Disallow empty strings and strings starting
	with '=' in Win32 environment.

2005-01-08  Pierre Humblet <pierre.humblet@ieee.org>

	* syscalls.cc (seteuid32): Only change the default dacl when
	seteuid succeeds. Do not close HKCU.

2005-01-06  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_process.cc: Use strcasematch instead of strcasecmp
	throughout.

2005-01-06  Corinna Vinschen  <corinna@vinschen.de>

	* syscalls.cc (rename): Fix behaviour in case of renaming directories
	according to SUSv3.

2005-01-06  Corinna Vinschen  <corinna@vinschen.de>

	* fhandler_disk_file.cc (fhandler_base::open_fs): Don't allow
	opening directories for writing.

2005-01-06  Christopher Faylor  <cgf@timesys.com>

	* timer.cc (timer_thread): Pass sigev pointer value as per SuSv3 rather
	than pointer to sigev.

2005-01-05  Christopher Faylor  <cgf@timesys.com>

	* dcrt0.cc (multiple_cygwin_problem): Reorganize error message to not
	always talk about a "version" when it's not a version.
	(dll_crt0_0): Change info passed to multiple_cygwin_problem to be a
	little more precise.
	* shared.cc (user_shared_initialize): Ditto.
	(shared_info::initialize): Ditto.

2005-01-03  Christopher Faylor  <cgf@timesys.com>

	* pinfo.cc (_pinfo::dup_proc_pipe): Can't close proc pipe when execing
	or we will suffer an exit code race.

2005-01-03  Corinna Vinschen  <corinna@vinschen.de>

	* signal.cc (abort): Call _GLOBAL_REENT's __cleanup.

2005-01-03  Corinna Vinschen  <corinna@vinschen.de>

	* syscalls.cc (setmode): Call _fwalk with _GLOBAL_REENT.

2005-01-01  Christopher Faylor  <cgf@timesys.com>

	* cygthread.cc (cygthread::stub): Set inuse to false when exiting.
	(cygthread::cygthread): Actually pass name as argument to debugging
	output to avoid SEGV when strace'ing.
	(cygthread::release): Don't set stack_ptr to NULL, since it is only set
	once on first entry to a stub not on each stub iteration.
	(cygthead::exit_thread): Remove obsolete function.
	* cygthread.h (cygthread::exit_thread): Ditto.

2005-01-01  Christopher Faylor  <cgf@timesys.com>

	* shared.cc (open_shared): Don't attempt VirtualAlloc magic if first
	attempt to map memory fails.
