2005-02-02 Corinna Vinschen * 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 * pipe.cc (fhandler_pipe::dup): Fix conditionals in case of error. 2005-02-02 Corinna Vinschen * times.cc (utimes): Mark st_ctime for update according to SUSv3. 2005-02-01 Christopher Faylor * fhandler_proc.cc (format_proc_partitions): Remove PartitionType check since it could skip over partitions that are actually interesting. 2005-02-01 Christopher Faylor * 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 * pipe.cc (fhandler_pipe::open): Allow re-opening of /proc//fd pipes of the current process. 2005-02-01 Corinna Vinschen * 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//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 * 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 * smallprint.c (rnarg): Use long rather than unsigned long so that we get proper sign extension. 2005-01-31 Corinna Vinschen * 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 * smallprint.c (__rn): Regparmize. 2005-01-31 Christopher Faylor * 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 * pinfo.cc (pinfo::exit): Only return low-order 16 bits when exiting. 2005-01-31 Corinna Vinschen * 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 * 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//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 * 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 * 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 * 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 * 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 * pinfo.cc (pinfo::init): Avoid a compiler warning. 2005-01-25 Corinna Vinschen * 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 * 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 * 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 * 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 * path.cc (realpath): Allow to expand with .exe suffix. 2005-01-22 Christopher Faylor * 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 * 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 * 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 * 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 * 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 * 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 * sigproc.cc (sig_send): Don't complain if attempt to send signal to myself fails after I've "execed". 2005-01-14 Corinna Vinschen * 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 * 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 * 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 * fhandler_serial.cc (fhandler_serial::dup): Call overlapped_setup for child, not for parent. 2005-01-13 Christopher Faylor * 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 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 * syscalls.cc (system): Use "/bin/sh" as per linux and (sorta) SUSv3. 2005-01-12 Christopher Faylor * pinfo.cc (pinfo::exit): Don't assume that this == myself. 2005-01-11 Christopher Faylor * pinfo.cc (pinfo::init): Don't close input handle on temporary (?) failure. 2005-01-11 Christopher Faylor * 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 * environ.cc (build_env): Disallow empty strings and strings starting with '=' in Win32 environment. 2005-01-08 Pierre Humblet * syscalls.cc (seteuid32): Only change the default dacl when seteuid succeeds. Do not close HKCU. 2005-01-06 Corinna Vinschen * fhandler_process.cc: Use strcasematch instead of strcasecmp throughout. 2005-01-06 Corinna Vinschen * syscalls.cc (rename): Fix behaviour in case of renaming directories according to SUSv3. 2005-01-06 Corinna Vinschen * fhandler_disk_file.cc (fhandler_base::open_fs): Don't allow opening directories for writing. 2005-01-06 Christopher Faylor * timer.cc (timer_thread): Pass sigev pointer value as per SuSv3 rather than pointer to sigev. 2005-01-05 Christopher Faylor * 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 * 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 * signal.cc (abort): Call _GLOBAL_REENT's __cleanup. 2005-01-03 Corinna Vinschen * syscalls.cc (setmode): Call _fwalk with _GLOBAL_REENT. 2005-01-01 Christopher Faylor * 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 * shared.cc (open_shared): Don't attempt VirtualAlloc magic if first attempt to map memory fails.