(is_symlink): Rewrite. Just read the whole file in memory rather
than by parts. Account for an ITEMIDLIST if present, as well as
the new style of Cygwin shortcut supporting targets > MAX_PATH.
(find_app_on_path): Use SYMLINK_MAX. Resolve symlink relative
to link's location. Adjust to the fact that cygpath already
normalizes its return value.
* path.cc (rel_vconcat): Add cwd parameter, and use it instead
of calling GetCurrentDirectory() if possible. Rename throughout.
(vcygpath): Rename from cygpath and accept cwd and va_list. Pass
cwd on to rel_vconcat().
(cygpath_rel): New front end for vcygpath.
(cygpath): Ditto.
* path.h (cygpath_rel): Declare.
(SYMLINK_MAX): Define to 4095.
testsuite.exe from path-testsuite.o and testsuite.o.
* path.cc: Include testsuite.h.
(struct mnt): Change to a mnt_t typedef and don't define
mount_table when TESTSUITE is defined.
(find2): Don't include when TESTSUITE is defined to avoid warning.
(get_cygdrive0): Ditto.
(get_cygdrive): Ditto.
(read_mounts): Provide empty implementation when TESTSUITE is
defined.
(vconcat): Use the isslash macro.
(unconvert_slashes): New helper to convert to backslashses.
(rel_vconcat): Handle relative paths more gracefully.
(cygpath): Skip a leading "./" sequence. Avoid double-slashes.
Normalize final output to backslashes and remove redundant path
sequences.
* testsuite.cc: New file implementing testsuite driver.
* testsuite.h: New header implementing harness mount table and
series of tests.
first. Load kernel32.dll earlier. Make osname a buffer. Simplify
Non-NT code. Use GetProductInfo in Vista/2008 case. Clean up
non-Vista version info. Exit early if not on NT.
* bloda.cc (pNtQuerySystemInformation): Add.
(pRtlAnsiStringToUnicodeString): Add.
(get_process_list): Use function pointers for NT functions.
(dump_dodgy_apps): Skip dodgy app check on non-NT platforms.
Use GetProcAddress for NT-specific functions.
(main): Set file name buffer size to PATH_MAX. Use progname or
progname_long member of struct external_pinfo dependent of the value of
the struct's version member.
dependency-filtering $(wordlist ...) call appropriately. Link ntdll.
(bloda.o): New rule to build bloda.o
* cygcheck.cc (dump_sysinfo): Call bloda function dump_dodgy_apps().
* bloda.cc: New file implements detection of applications from the
Big List Of Dodgy Apps.
(sys_sigabbrev): New array of signal strings, patterned after linux.
(siglist): Use __signals.
* cygwin/include/cygwin/signal.h (sys_sigabbrev): Define.
* cygwin/include/cygwin/version.h: Bump API minor version to 177.
* utils/Makefile.in (kill.exe): Remove reliance on libiberty.
* utils/kill.cc (strsigno): New function patterned after libiberty but using
newly exported cygwin array.
(paths): Redefine as type pathlike.
(display_error): Declare a few different ways to allow more flexible usage
throughout.
(display_error_fmt): New function for those cases where C++ just isn't enough.
(add_path): Rewrite to allocate pathlike paths. Always tack on a trailing
slash since that's what everyone who uses it wants. NULL terminate the path
list. Register "it's a system path" field.
(init_path): Call add_path with info regarding whether path is a system path or
not.
(pathlike::check_existence): Move into pathlike class. Accept file and
extension arguments to build up path on the fly. Modify other arguments.
(find_on_path): Constify return value and appropriate arguments. Eliminate
short-circuit for fully-qualified paths. Simplify loop which iterates over
path.
(already_did): Constify argument.
(track_down): Ditto. Regularize some error messages.
(find_app_on_path): Ditto.
(cygcheck): Constify argument. Use 20th century string handling functions.
(dump_sysinfo): Remove odd inclusion of '\\bin' "Just in case". Accommodate
change of paths to pathlike.
* path.cc (isslash): Rename from SLASH_P and use throughout.
(rel_vconcat): Front-end to vconcat which prepends cwd to path before passing
along for conversion to native windows.
(cygpath): Remove "./" test. Call rel_vconcat if filename appears to be
relative.
basic flags. Only check options_from_file_flag if reading options
from command line.
(main): Check for NULL argz vector. Don't free argz vector prematurely.
Don't force flag combination in !options_from_file_flag case.
(options_from_file_flag): Move from main to global static variable.
(mode_flag): Ditto.
(do_sysfolders): Rename from dowin and accommodate throughout.
Don't exit from here.
(do_pathconv): Rename from doit and accommodate throughout.
(print_version): Change copyright.
(do_options): New function, centralizing option processing.
Rework checking options for correctness.
(action): New function, centralizing calling worker functions.
(main): Simplify. Move option processing to do_options. Move calling
worker functions to action. Rework getting arguments from files.
(get_special_folder): New function.
(get_user_folder): New function.
(dowin): Add -O and -F, better -D, -P error handling.
(main): Add -O and -F.
* utils.sgml (cygpath): Document -O and -F.
(REG_AUTO): Define.
(value_type): Replace key_type. Use REG_xxx values directly.
Accomodate change throughout.
(longopts): Add --dword, --dword-le, --none, --qword and --hex options.
(opts): Add -d, -D, -n, -Q and -x options.
(types): Array to convert REG_xxx into strings.
(hex): New variable to keep value of --hex option.
(usage): Accomodate new options. Print only the necessary by default.
Only be verbose in case of -h/--help option.
(cmd_list): Use key separator from -K option when printing.
Print value type when verbose option is given. Handle so far not
handled REG_xxx types.
(cmd_set): Avoid SEGV due to missing argument. Handle so far not
handled REG_xxx types.
(cmd_get): Handle --binary option type agnostic. Handle so far not
handled REG_xxx types.
(main): Handle new options.
(longopts): Add --wow64 option.
(opts): Add -w option.
(wow64): New variable to control usage of KEY_WOW64_64KEY access flag.
(usage): Add text for --wow64/-w option.
(print_version): Fix copyright.
(find_key): Use wow64 value in calls to RegOpenKeyEx and RegCreateKeyEx.
(cmd_add): Use wow64 value in call to RegCreateKeyEx.
(regDeleteKeyEx): New function pointer to load RegDeleteKeyEx function
dynamically.
(cmd_remove): Load and use regDeleteKeyEx when wow64 is set.
(main): Handle --wow64/-w option.
* utils.sgml: Document the new -w option.
(LINK_EXTENSION): New macro.
(check_existence): New static function.
(find_on_path): Check for symbolic links if asked.
(dll_info): New error handling.
(track_down): Only call dll_info() for executables, display
an error for symlinks, and print magic number for others.
(find_app_on_path): New static function.
(cygcheck, dump_sysinfo): Call find_app_on_path() instead of
find_on_path().
* path.cc (cmp_shortcut_header): New static function.
(get_word, get_dword): Moved from cygcheck.cc.
(EXE_MAGIC, SHORTCUT_MAGIC, SYMLINK_COOKIE, SYMLINK_MAGIC): New
macros.
(is_exe, is_symlink, readlink): New functions.
* path.h (is_exe, is_symlink, readlink): Declare.
(get_word, get_dword): Ditto.
* cygpath.cc: Include DDK headers.
(RtlAllocateUnicodeString): New static inline function.
(get_device_name): New static function to evaluate DOS path from
native NT path.
(get_device_paths): New function to do the same for path lists.
(doit): Call get_device_paths/get_device_name where appropriate.
* cygcheck.cc (pInternetCloseHandle): Define global function pointer.
(display_internet_error): Use it.
(package_grep): Attempt to load wininet.dll at runtime. Call WinInet
API through function pointers throughout.
in subsequent assignments. Recognize Longhorn/Vista and report as not
yet supported. Recognize when running under WOW64 and report native
CPU type. Slightly rearrange \n printing.
* child_info.h (CURR_CHILD_INFO_MAGIC): Reset.
(child_info::dwProcessId): Delete.
(child_info::straced): New variable.
(child_info::handle_fork): New member function.
* dcrt0.cc (in_forkee): New global variable.
(__cygwin_user_data::forkee): Mark as obsolete.
(do_global_ctors): Use in_forkee rather than user_data->forkee.
(get_cygwin_startup_info): Ditto. Deal with new straced field to allow strace
to deal with children of attached processes.
(initial_env): Accommodate changes to strace::hello.
(child_info_fork::handle_fork): Rename from plain old 'handle_fork'. Move
alloc_stack() call elsewhere.
(dll_crt0_0): Fill out more of user_data. Reference handle_fork via fork_info.
Add some debugging output.
(_dll_crt0): Don't wait for sync thread if sync_startup is invalid. Zero
sync_startup here. Call alloc_stack() here, if appropriate.
(dll_crt0_1): Use in_forkee rather than user_data->forkee.
(dll_crt0): Ditto.
* malloc_wrapper.cc (malloc_init): Ditto.
* dll_init.cc (in_forkee): Remove local static version of this variable.
(dll_list::load_after_fork): Don't set in_forkee here.
* external.cc (cygwin_internal): Use strace method rather than accessing field
directly.
* fhandler.cc (fhandler_base::read): Ditto.
* fhandler_tty.cc (fhandler_tty_common::__acquire_output_mutex): Ditto.
* fork.cc (frok::parent): Invoke strace write_childpid to communicate with
potential strace.
(child_copy): Add more detail to debugging output.
* init.cc (calibration_id): New static variable.
(prime_threads): Set sync_startup to invalid handle if we already know about
thread_func_ix. Use static calibration_id to hold calibration thread id.
* munge_threadfunc (munge_threadfunc): Don't try to debug if we don't find
threadfunc_ix.
(dll_entry): Avoid calling munge_threadfunc and _cygtls::remove on non-cygwin
threads invoked during process startup.
* pinfo.cc (set_myself): Always call strace.hello here regardless of DEBUGGING.
* sigproc.cc (child_info::child_info): Remove spurious handling of dwProcessId.
Set straced as appropriate.
* spawn.cc (spawn_guts): Rename ciresrv to ch. Invoke strace write_childpid to
communicate with potential strace.
* strace.cc: Include child_info.h.
(strace::hello): Remove inited test. Use active() method to test if strace has
been activated. Handle case where we are started before
(mypid): New function.
(strace::vsprntf): Try to deal more intelligently with case where progname may
not be filled out. Put pid in parentheses if it is a windows pid rather than a
cygwin pid. myself has been filled out.
(strace::write_childpid): New function for notifying strace about the creation
of children.
(strace::vprntf): Use strace method rather than accessing field directly.
(strace_printf): Ditto.
(strace::wm): Ditto.
* winsup.h (in_forkee): Declare.
* include/sys/strace.h (strace::write_childpid): Declare new function.
(strace::attached): Define new function.
(strace::active): Ditto.
(strace::active_val): Ditto.
(_STRACE_ON): Delete.
(_STRACE_OFF): Ditto.
(define_strace0): Use strace method rather than accessing field directly.
(strace_printf_wrap): Ditto.
(strace_printf_wrap1): Ditto.
*** cygwin utils changes:
* strace.cc (nprocesses): Make static global.
(quiet): New variable.
(strace_active): Ditto.
(add_child): Increment nprocesses here. Don't add a child if it is already
added (windows bug?). Report on child if not quiet.
(get_child): Just return NULL if child not found.
(remove_child): Report on child if not quiet.
(attach_process): Don't complain if given a windows process. Use windows pid
in error.
(handle_output_debug_string): Issue error if trying to manipulate a process
that we don't know about. Handle _STRACE_CHILD_PID - attach to reported child
when we get this.
(proc_child): Move nprocesses to file scope. Report on exceptions.
(longopts): Implement "--quiet".
(opts): Implement "-q".
(main): Manipulate quiet flag.
* utils.sgml (strace): Add words describing '-q'.
(main): Use show_usecs rather than usecs. Toggle delta if '-u' is specified.
(handle_output_debug_string): Avoid printing microsecond timestamp if
show_usecs == 0.
* utils.sgml (strace): Add words to describe '-u'.
* cygcheck.cc: Add includes.
(grep_packages): New global variable.
(display_internet_error): New function.
(safe_chars): New global variable.
(base_url): Ditto.
(package_grep): New function.
(usage): Reword --help output for clarity. Document new argument.
(longopts): Add 'package-query' option.
(opts): Add 'p' option, reorder to be consistent with 'longopts'.
(main): Accommodate new option.
* utils.sgml (cygcheck): Update --help output. Document new -p option.
* mkgroup.c (print_win_error): Create macro calling ...
(_print_win_error): ... this function created from former
print_win_error. Move up in source.
(PDOMAIN_CONTROLLER_INFOW): Define return type of DcGetDcNameW.
(dsgetdcname): New function pointer for DcGetDcNameW.
(load_netapi): Get DcGetDcNameW address.
(main): If DcGetDcNameW is available, use it.
* mkpasswd.c (PDOMAIN_CONTROLLER_INFOW): Define return type of
DcGetDcNameW.
(dsgetdcname): New function pointer for DcGetDcNameW.
(load_netapi): Get DcGetDcNameW address.
(main): If DcGetDcNameW is available, use it. Rename local variable
domain_name_specified to domain_specified as in mkgroup.c.
(print_version): Ditto.
(cmd_list): Don't depend on terminating '\0' being present on
string-values.
(cmd_get): Don't attempt to read more than present, but keep
extra space for terminating '\0'. Really output REG_BINARY.
Don't leak memory.
(cmd_set): Include trailing '\0' in string's length.
(opts): Add -d option.
(GetPW): Add server parameter which is given to Net functions.
(ChangePW): Ditto.
(PrintPW): Ditto.
(SetModals): Ditto.
(usage): Add description for -d/--logonserver option.
(main): Add option handling for -d/--logonserver. Use LOGONSERVER
environment variable content for server to contact, unless
-d/--logonserver option is given. If both is missing, use NULL.
* strace.cc (main): Recognize new option for displaying hex value of strace
type.
(handle_output_debug_string): Prepend output with hex value of strace message
if -H is specified.
* mkpasswd.c (print_win_error): Transform into macro.
(_print_win_error): Upgrade former print_win_error by
printing the line.
(current_user): Call _print_win_error.
(enum_users): Print name in case of lookup failure.
(enum_local_groups): Ditto.
* kill.cc (forcekill): Do not pass negative pids to
cygwin_internal. Check if sig == 0. Improve error messages.
(main): Make pid a long long and distinguish between pids, gpids
(i.e. negative pids) and Win9x pids.
(version): Bump version number to 1.5.
(longopts): Add -c, -C, -e, -E, -p, -P options.
(opts): Ditto.
(PrintPW): Print values of UF_PASSWD_CANT_CHANGE and
UF_DONT_EXPIRE_PASSWD flags. Slightly reformat output. Don't suppress
correct system password settings just because the account has admin
privileges.
(usage): Define as "noreturn" function. Restructure and rephrase
output. Accomodate new options.
(print_version): Fix copyright dates.
(main): Accomodate new options for setting UF_PASSWD_CANT_CHANGE,
UF_DONT_EXPIRE_PASSWD and UF_PASSWD_NOTREQD settings.
cygcheck wihtout package checking if they are unavailable.
* dump_setup.cc: Generate dummy zlib macros when zlib is not available.
(open_package_list): Use zlib functions to uncompress package lists. Return
gzFile rather than FILE *.
(check_package_files): Change fp to gzFile to accommodate zlib functions. Use
gzgets to read from package file. Use gzclose to close the handle.
(package_list): Ditto.
(package_find): Ditto.
* cygcheck.cc (find_package,list_package): New global
variables.
(usage): Add "--find-package" and "--list-package" options,
reformat output.
(longopts, opts): Add "--find-package" and "--list-package"
options.
(main): Process the "--find-package" and "--list-package"
flags. Add new semantic checks. Add calls to find_package()
and list_package().
* dump_setup.cc: Fix header comment.
(match_argv): Change return type to int to distinguish
between real matches and default ones.
(open_package_list): New static function.
(check_package_files): Factor out opening the package list
file into open_package_list().
(get_packages): New static function.
(dump_setup): Factor out getting a list of packages into
get_packages().
(package_list, package_find): New global functions.
(could_not_access,directory_exists): New static function.
(file_exists): Ditto.
(check_package_files): Ditto.
(dump_setup): Check the contents of each package if check_files is true and
output the result in the "Status" column. Flush output after each package.
* dump_setup.cc (dump_setup): Remove redundant null check. Add informative
message if package info not found.
* mkpasswd.c (current_user): print uid and gid as unsigned.
(enum_users): Ditto. Do not free servername.
(usage): Update to allow several domains and improve -p.
(main): On Win9x limit uids to 1000. Only print specials
when -l is specified. Add a loop to allow several domains
and free servername in the loop.
* mkgroup.c (enum_groups): Do not free servername.
(usage): Update to allow several domains. Change uid to gid.
(main): Only print specials when -l is specified. Add a
loop to allow several domains and free servername in the loop.
* mkpasswd.cc (main): On Win95, output both a default line and a
line for the current user (if known) with a pseudorandom uid. If
the -u switch is given, produce a line for the specified user.
* mkgroup.cc (main): On Win95 change the group name from "unknown" to
"all".
* cygcheck.cc (find_on_path): Translate from cygwin path when qualified path
name found.
(pretty_id): New function. Dump output of id command.
(dump_sysinfo): Call pretty_id for CYGWIN=ntsec and CYGWIN=nontsec cases.
(usage): Reorganize to support Win95/98/ME.
(main): Add option for -c. Reorganize to parse options for
Win95/98/ME and to call current_user. Add username in gecos field
on Win95/98/ME.
* mkgroup.cc (enum_groups): Print gid with %u.
(print_win_error): Create from passwd.cc.
(current_group): Create.
(usage): Reorganize to support Win95/98/ME.
(main): Add option for -c. Reorganize to parse options for
Win95/98/ME and to call current_group.
(get_long_name): Correctly prototype GetLongPathName.
(get_long_paths): Implement using get_long_name to cut down on code
duplication.
(doit): Do various things to make path output work predictably.
that is passed to do_mount.
* cygpath.cc (long_options): Add "dos" and "mixed", correct "close", "file" and
"type" to use NULL flag.
(usage): Clean up usage output (more), accomodate new options.
(main): Add --dos and --mixed options; accomodate all output forms in --type.
Make UNIXy output default.
(GetPW): Add parameter to (dis)allow printing of Windows username.
Use defines instead of numerical constants where possible.
Try avoiding impersonation problem. Rearrange to print Windows
username only if it's different from Cygwin username.
(ChangePW): Use defines instead of numerical constants where possible.
(main): Call GetPW with additional parameter. Change error text.
* passwd.c (GetPW): Handle case of user-edited /etc/passwd
with cygwin_internal (CW_EXTRACT_DOMAIN_AND_USER, ...).
(change_cygdrive_prefix): Change MOUNT_AUTO to MOUNT_CYGDRIVE.
* umount.cc (remove_cygdrive_prefix): Ditto.
(main): Use default system/user flag for cygdrive stuff, too.
(error): Use exit instead of ExitProcess so that stdio buffers get flushed.
(create_child): Remove command line error checking.
(dostrace): Ditto.
(dotoggle): New function.
(usage): Add entry for new option -T|--toggle. Alphabetize.
(longopts): Add new option -T|--toggle.
(opts): Ditto.
(main): Handle new -T|--toggle option. Move all command line checking here
from other functions.
* utils.sgml: Update section for strace.
(attach_process): Use window pid if cygwin pid isn't available (yet).
(create_child): Use either DEBUG_ONLY_THIS_PROCESS or DEBUG_PROCESS,
exclusively. (Suggested by Conrad.Scott@dsl.pipex.com)
(proc_child): Do it here, instead, after first debug event. This should work
around inexplicable races with DebugActiveProcess.
(dostrace): Pass any pid argument to proc_child.
static void.
(print_version): New function.
(longopts): Added longopts for all options.
(main): Accommodate changes in usage function and new version option.
(usage) Standardize usage output. Accomodate new version option.
(print_version) New function.
(longopts) Accomodate new version option.
(opts) Ditto.
(main) Ditto.
* cygpath.cc (main): Add option l to support conversion to
Windows long file names. Refactured code for capital options.
Support of options from file for capital options.
(dowin): New function. Refactured from main.
(doit): Call long path conversion.
(get_long_name): New function.
(get_long_paths): New function.
(get_long_path_name_w32impl): New function. Reimplementation
of Windows API function GetLongPathName (only 98/Me/2000/XP or
higher).
(get_short_name): Call GetShortPathName only once.
(get_short_paths): Fix calculating buffer size.
* utils.sgml: Update cygpath section for l option.
(get_short_name): Ditto.
* cygpath.cc (main): Add option H to show the Windows' profiles
directory. Support short names for options DPSW. Clean up
copied code lines.
* utils.sgml: Update cygpath section for H option and s support.
* kill.cc (longopts): New.
(opts): Ditto.
(get_sig): Accept const char * parameter. Return -1 on unknown signal.
(test_for_unknown_sig): New function.
(listsig): New function.
(main): Use getopt_long for option parsing. Implement -l, and -s options. Use
test_for_unknown_sig() to test for signal validity.
warnings before attempting a mount.
(longopts): Add no-executable option.
(mount_commands): Ditto.
(opts): Ditto.
(usage): Ditto. Indicate that system mount is now the default.
(main): Accommodate no-executable option. Make system mount the default.
* umount.cc (usage): Indicate that system umount is now the default.
(main): Make system umount the default.
help.
(longopts) New struct. Added longopts for all options.
(print_version) New function.
(main) Change getopt to getopt_long. Accommodate new help and version options.
* mkpasswd.c (main): Ditto.
* mkpasswd.c (usage): Simplify usage output. Generalize to allow use
for help. Correct '?' typo to 'h'.
(longopts): Add version option.
(opts): Add 'v' version option.
(print_version): New function.
(main): Accommodate new version option. Accommodate usage parameter
changes.