You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* dcrt0.cc (dll_crt0_1), dtable.cc (handle_to_fn), environ.cc
(environ_init, getwinenveq, build_env), external.cc
(fillout_pinfo), fhandler_disk_file.cc (__DIR_mounts::eval_ino,
fhandler_disk_file::readdir_helper), fhandler_netdrive.cc
(fhandler_netdrive::readdir), fhandler_process.cc
(format_process_winexename, format_process_maps,
format_process_stat, format_process_status), fhandler_procsys.cc
(fill_filebuf, fhandler_procsys::readdir), mount.cc
(fs_info::update, mount_info::create_root_entry,
mount_info::conv_to_posix_path, mount_info::from_fstab_line),
nlsfuncs.cc (internal_setlocale), path.cc (path_conv::check,
sysmlink_info::check_shortcut, symlink_info::check_sysfile,
symlink_info::check_reparse_point,
symlink_info::check_nfs_symlink, cygwin_conv_path,
cygwin_conv_path_list, cwdstuff::get_error_desc, cwdstuff::get),
strfuncs.cc (sys_wcstombs_no_path, sys_wcstombs_alloc_no_path),
uinfo.cc (ontherange, fetch_from_path, cygheap_pwdgrp::get_home,
cygheap_pwdgrp::get_shell, cygheap_pwdgrp::get_gecos), wchar.h
(sys_wcstombs_no_path, sys_wcstombs_alloc_no_path): Convert call
sites of the sys_wcstombs*() family to specify explicitly when the
parameter refers to a path or file name, to avoid future
misconversions.
Detailed explanation:
The sys_wcstombs() function contains special handling for paths/file
names, to work around file name restriction on Windows that are
unexpected in the POSIX context of Cygwin.
We actually do not want that special handling for WCS strings that
do *not* refer to paths or file names.
Neither do we want to convert those special file names unless they come
from inside Cygwin: if the source of the string value is the Windows API,
we *know* it cannot be such a special file name because Windows itself
would not be able to handle it in the way Cygwin does.
So let's switch the previous sys_wcstombs()/sys_wcstombs_no_path() (and
the *_alloc* variant) around to sys_wcstombs_path()/sys_wcstombs(). We do
this for several reasons:
- whenever a call site wants to convert a WCS representation of a path or
file name to an MBS one, it should be made very clear that we *want* the
special file name conversion to happen.
- it is shorter to read and write.
- future calls to sys_wcstombs() will not incur unwanted conversion by
accident (it is easy for unsuspecting programmers to assume that the
function name "sys_wcstombs()" refers to a regular text conversion that
has nothing to do with paths or filenames).
By keeping the name sys_wcstombs() (and not switching to
sys_wcstombs_path()), the following call sites are implicitly changed to
*exclude* the special path/file name conversion:
cygheap.h (get_drive):
Cannot contain special characters
external.cc (cygwin_internal):
Refers to user/domain names, not paths
fhandler_clipboard.cc (fhandler_dev_clipboard::read):
Is not a path or file name but characters from the Windows
clipboard
fhandler_console.cc: (dev_console::con_to_str):
Is not a path or file name but characters from the console
fhandler_registry.cc (encode_regname):
Is a registry key, not a path or filename
fhandler_registry.cc (multi_wcstombs):
All call sites pass registry values, not paths or filenames
fhandler_registry.cc (fstat):
Is a registry value, not a path or filename
fhandler_registry.cc (fill_filebuf):
Is a registry value, not a path or filename
net.cc (get_ipv4fromreg):
Is a registry value, not a path or filename
net.cc (get_friendlyname):
Is a device name, not a path or filename
netdb.cc (open_system_file):
Is from outside Cygwin
smallprint.cc (__small_vsprintf):
Is a free text, not a path or filename
strfuncs.cc (strlwr):
Should preserve the characters from the private page if there
are any
strfuncs.cc (strupr):
Should preserve the characters from the private page if there
are any
uinfo.cc (cygheap_user::init):
Refers to a user name, not a path or filename
uinfo.cc (pwdgrp::fetch_account_from_windows):
Refers to value from outside Cygwin
By keeping the function name sys_wcstombs_alloc() (and not changing it to
sys_wcstombs_alloc_path()), the following call sites are implicitly
changed to *exclude* the special path/file name conversion:
ldap.cc (cyg_ldap::remap_uid):
Refers to a user name, not a path or filename
ldap.cc (cyg_ldap::remap_gid):
Refers to a group name, not a path or filename
pinfo.cc (_pinfo::cmdline):
Refers to a command line from Windows, outside Cygwin
uinfo.cc (cygheap_user::env_logsrv):
Is a server name, not a path or filename
uinfo.cc (cygheap_user::env_domain):
Refers to the user/domain name, not a path or filename
uinfo.cc (cygheap_user::env_userprofile):
Refers to Windows' idea of a path, outside Cygwin
uinfo.cc (cygheap_user::env_systemroot):
Refers to Windows' idea of a path, outside Cygwin
uinfo.cc (fetch_from_description):
Refers to values from outside of Cygwin
uinfo.cc (cygheap_pwdgrp::get_gecos):
Refers to user/domain name and email address, not path nor filename
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
0 commit comments