* path.h (path_conv): Make path_flags private. Rename known_suffix to

suffix and make private.  Rename normalized_path to posix_path and
	make privtae.  Accommodate name changes throughout in path_conv
	methods.
	(path_conv::known_suffix): New method.  Use throughout instead of
	accessing suffix directly.
	(path_conv::get_win32): Constify.
	(path_conv::get_posix): New method to read posix_path.  Use throughout
	instead of accessing normalized_path directly.
	(path_conv::set_posix): Rename from set_normalized_path.  Accommodate
	name change throughout.
	* spawn.cc (find_exec): Return POSIX path, not Win32 path.
This commit is contained in:
Corinna Vinschen 2015-02-15 08:59:55 +00:00
parent 6b14f3988c
commit d2bd82aa92
9 changed files with 80 additions and 78 deletions

View File

@ -1,7 +1,7 @@
/* dtable.cc: file descriptor support. /* dtable.cc: file descriptor support.
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc. 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -452,9 +452,9 @@ build_fh_dev (const device& dev, const char *unix_name)
{ {
path_conv pc (dev); path_conv pc (dev);
if (unix_name) if (unix_name)
pc.set_normalized_path (unix_name); pc.set_posix (unix_name);
else else
pc.set_normalized_path (dev.name); pc.set_posix (dev.name);
return build_fh_pc (pc); return build_fh_pc (pc);
} }

View File

@ -1,7 +1,7 @@
/* fhandler.h /* fhandler.h
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Red Hat, Inc. 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -196,7 +196,7 @@ class fhandler_base
virtual void set_name (path_conv &pc); virtual void set_name (path_conv &pc);
virtual void set_name (const char *s) virtual void set_name (const char *s)
{ {
pc.set_normalized_path (s); pc.set_posix (s);
pc.set_path (s); pc.set_path (s);
} }
int error () const {return pc.error;} int error () const {return pc.error;}
@ -295,7 +295,7 @@ class fhandler_base
bool isremote () { return pc.isremote (); } bool isremote () { return pc.isremote (); }
bool has_attribute (DWORD x) const {return pc.has_attribute (x);} bool has_attribute (DWORD x) const {return pc.has_attribute (x);}
const char *get_name () const { return pc.normalized_path; } const char *get_name () const { return pc.get_posix (); }
const char *get_win32_name () { return pc.get_win32 (); } const char *get_win32_name () { return pc.get_win32 (); }
virtual dev_t get_dev () { return get_device (); } virtual dev_t get_dev () { return get_device (); }
ino_t get_ino () { return ino ?: ino = hash_path_name (0, pc.get_nt_native_path ()); } ino_t get_ino () { return ino ?: ino = hash_path_name (0, pc.get_nt_native_path ()); }

View File

@ -1,7 +1,7 @@
/* fhandler_disk_file.cc /* fhandler_disk_file.cc
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc. 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -258,7 +258,7 @@ path_conv::ndisk_links (DWORD nNumberOfLinks)
bool first = true; bool first = true;
PFILE_BOTH_DIR_INFORMATION fdibuf = (PFILE_BOTH_DIR_INFORMATION) PFILE_BOTH_DIR_INFORMATION fdibuf = (PFILE_BOTH_DIR_INFORMATION)
alloca (65536); alloca (65536);
__DIR_mounts *dir = new __DIR_mounts (normalized_path); __DIR_mounts *dir = new __DIR_mounts (get_posix ());
while (NT_SUCCESS (NtQueryDirectoryFile (fh, NULL, NULL, NULL, &io, fdibuf, while (NT_SUCCESS (NtQueryDirectoryFile (fh, NULL, NULL, NULL, &io, fdibuf,
65536, FileBothDirectoryInformation, 65536, FileBothDirectoryInformation,
FALSE, NULL, first))) FALSE, NULL, first)))
@ -2110,7 +2110,7 @@ fhandler_disk_file::readdir_helper (DIR *dir, dirent *de, DWORD w32_err,
{ {
tmp_pathbuf tp; tmp_pathbuf tp;
char *file = tp.c_get (); char *file = tp.c_get ();
char *p = stpcpy (file, pc.normalized_path); char *p = stpcpy (file, pc.get_posix ());
if (p[-1] != '/') if (p[-1] != '/')
*p++ = '/'; *p++ = '/';
sys_wcstombs (p, NT_MAX_PATH - (p - file), sys_wcstombs (p, NT_MAX_PATH - (p - file),

View File

@ -1,7 +1,7 @@
/* fhandler_registry.cc: fhandler for /proc/registry virtual filesystem /* fhandler_registry.cc: fhandler for /proc/registry virtual filesystem
Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
2013 Red Hat, Inc. 2013, 2015 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -452,12 +452,12 @@ out:
void void
fhandler_registry::set_name (path_conv &in_pc) fhandler_registry::set_name (path_conv &in_pc)
{ {
if (strncasematch (in_pc.normalized_path, "/proc/registry32", 16)) if (strncasematch (in_pc.get_posix (), "/proc/registry32", 16))
{ {
wow64 = KEY_WOW64_32KEY; wow64 = KEY_WOW64_32KEY;
prefix_len += 2; prefix_len += 2;
} }
else if (strncasematch (in_pc.normalized_path, "/proc/registry64", 16)) else if (strncasematch (in_pc.get_posix (), "/proc/registry64", 16))
{ {
wow64 = KEY_WOW64_64KEY; wow64 = KEY_WOW64_64KEY;
prefix_len += 2; prefix_len += 2;

View File

@ -335,7 +335,7 @@ normalize_posix_path (const char *src, char *dst, char *&tail)
So we replace dst with what we found in head So we replace dst with what we found in head
instead. All the work replacing symlinks has been instead. All the work replacing symlinks has been
done in that path anyway, so why repeat it? */ done in that path anyway, so why repeat it? */
tail = stpcpy (dst, head.normalized_path); tail = stpcpy (dst, head.get_posix ());
} }
check_parent = false; check_parent = false;
} }
@ -373,9 +373,9 @@ path_conv::add_ext_from_sym (symlink_info &sym)
{ {
if (sym.ext_here && *sym.ext_here) if (sym.ext_here && *sym.ext_here)
{ {
known_suffix = path + sym.extn; suffix = path + sym.extn;
if (sym.ext_tacked_on) if (sym.ext_tacked_on)
strcpy ((char *) known_suffix, sym.ext_here); strcpy ((char *) suffix, sym.ext_here);
} }
} }
@ -409,13 +409,13 @@ mkrelpath (char *path, bool caseinsensitive)
} }
void void
path_conv::set_normalized_path (const char *path_copy) path_conv::set_posix (const char *path_copy)
{ {
if (path_copy) if (path_copy)
{ {
size_t n = strlen (path_copy) + 1; size_t n = strlen (path_copy) + 1;
char *p = (char *) crealloc_abort ((void *) normalized_path, n); char *p = (char *) crealloc_abort ((void *) posix_path, n);
normalized_path = (const char *) memcpy (p, path_copy, n); posix_path = (const char *) memcpy (p, path_copy, n);
} }
} }
@ -659,7 +659,7 @@ path_conv::check (const char *src, unsigned opt,
{ {
int loop = 0; int loop = 0;
path_flags = 0; path_flags = 0;
known_suffix = NULL; suffix = NULL;
fileattr = INVALID_FILE_ATTRIBUTES; fileattr = INVALID_FILE_ATTRIBUTES;
caseinsensitive = OBJ_CASE_INSENSITIVE; caseinsensitive = OBJ_CASE_INSENSITIVE;
if (wide_path) if (wide_path)
@ -673,10 +673,10 @@ path_conv::check (const char *src, unsigned opt,
close_conv_handle (); close_conv_handle ();
memset (&dev, 0, sizeof (dev)); memset (&dev, 0, sizeof (dev));
fs.clear (); fs.clear ();
if (normalized_path) if (posix_path)
{ {
cfree ((void *) normalized_path); cfree ((void *) posix_path);
normalized_path = NULL; posix_path = NULL;
} }
int component = 0; // Number of translated components int component = 0; // Number of translated components
@ -1230,7 +1230,7 @@ path_conv::check (const char *src, unsigned opt,
{ {
if (tail < path_end && tail > path_copy + 1) if (tail < path_end && tail > path_copy + 1)
*tail = '/'; *tail = '/';
set_normalized_path (path_copy); set_posix (path_copy);
if (is_msdos && dos_file_warning && !(opt & PC_NOWARN)) if (is_msdos && dos_file_warning && !(opt & PC_NOWARN))
warn_msdos (src); warn_msdos (src);
} }
@ -1252,10 +1252,10 @@ path_conv::check (const char *src, unsigned opt,
path_conv::~path_conv () path_conv::~path_conv ()
{ {
if (normalized_path) if (posix_path)
{ {
cfree ((void *) normalized_path); cfree ((void *) posix_path);
normalized_path = NULL; posix_path = NULL;
} }
if (path) if (path)
{ {
@ -1623,10 +1623,10 @@ symlink_native (const char *oldpath, path_conv &win32_newpath)
/* The symlink target is relative to the directory in which /* The symlink target is relative to the directory in which
the symlink gets created, not relative to the cwd. Therefore the symlink gets created, not relative to the cwd. Therefore
we have to mangle the path quite a bit before calling path_conv. */ we have to mangle the path quite a bit before calling path_conv. */
ssize_t len = strrchr (win32_newpath.normalized_path, '/') ssize_t len = strrchr (win32_newpath.get_posix (), '/')
- win32_newpath.normalized_path + 1; - win32_newpath.get_posix () + 1;
char *absoldpath = tp.t_get (); char *absoldpath = tp.t_get ();
stpcpy (stpncpy (absoldpath, win32_newpath.normalized_path, len), stpcpy (stpncpy (absoldpath, win32_newpath.get_posix (), len),
oldpath); oldpath);
win32_oldpath.check (absoldpath, PC_SYM_NOFOLLOW, stat_suffixes); win32_oldpath.check (absoldpath, PC_SYM_NOFOLLOW, stat_suffixes);
@ -1860,10 +1860,10 @@ symlink_worker (const char *oldpath, const char *newpath, bool isdevice)
stat_suffixes); stat_suffixes);
else else
{ {
len = strrchr (win32_newpath.normalized_path, '/') len = strrchr (win32_newpath.get_posix (), '/')
- win32_newpath.normalized_path + 1; - win32_newpath.get_posix () + 1;
char *absoldpath = tp.t_get (); char *absoldpath = tp.t_get ();
stpcpy (stpncpy (absoldpath, win32_newpath.normalized_path, stpcpy (stpncpy (absoldpath, win32_newpath.get_posix (),
len), len),
oldpath); oldpath);
win32_oldpath.check (absoldpath, PC_SYM_NOFOLLOW, win32_oldpath.check (absoldpath, PC_SYM_NOFOLLOW,
@ -3243,16 +3243,16 @@ chdir (const char *in_dir)
{ {
/* The sequence chdir("xx"); chdir(".."); must be a noop if xx /* The sequence chdir("xx"); chdir(".."); must be a noop if xx
is not a symlink. This is exploited by find.exe. is not a symlink. This is exploited by find.exe.
The posix_cwd is just path.normalized_path. The posix_cwd is just path.get_posix ().
In other cases we let cwd.set obtain the Posix path through In other cases we let cwd.set obtain the Posix path through
the mount table. */ the mount table. */
if (!isdrive(path.normalized_path)) if (!isdrive (path.get_posix ()))
posix_cwd = path.normalized_path; posix_cwd = path.get_posix ();
res = 0; res = 0;
} }
else else
{ {
posix_cwd = path.normalized_path; posix_cwd = path.get_posix ();
res = 0; res = 0;
} }
@ -3579,11 +3579,11 @@ realpath (const char *__restrict path, char *__restrict resolved)
if (!resolved) if (!resolved)
{ {
resolved = (char *) resolved = (char *)
malloc (strlen (real_path.normalized_path) + 1); malloc (strlen (real_path.get_posix ()) + 1);
if (!resolved) if (!resolved)
return NULL; return NULL;
} }
strcpy (resolved, real_path.normalized_path); strcpy (resolved, real_path.get_posix ());
return resolved; return resolved;
} }
@ -3670,7 +3670,7 @@ conv_path_list_buf_size (const char *path_list, bool to_posix)
/* 100: slop */ /* 100: slop */
size = strlen (path_list) size = strlen (path_list)
+ (num_elms * max_mount_path_len) + (num_elms * max_mount_path_len)
+ (nrel * strlen (to_posix ? pc.normalized_path : pc.get_win32 ())) + (nrel * strlen (to_posix ? pc.get_posix () : pc.get_win32 ()))
+ 100; + 100;
return size; return size;

View File

@ -144,14 +144,15 @@ class path_conv
void add_ext_from_sym (symlink_info&); void add_ext_from_sym (symlink_info&);
DWORD symlink_length; DWORD symlink_length;
const char *path; const char *path;
unsigned path_flags;
const char *suffix;
const char *posix_path;
path_conv_handle conv_handle; path_conv_handle conv_handle;
public: public:
unsigned path_flags;
const char *known_suffix;
const char *normalized_path;
int error; int error;
device dev; device dev;
const char *known_suffix () { return suffix; }
bool isremote () const {return fs.is_remote_drive ();} bool isremote () const {return fs.is_remote_drive ();}
ULONG objcaseinsensitive () const {return caseinsensitive;} ULONG objcaseinsensitive () const {return caseinsensitive;}
bool has_acls () const {return !(path_flags & PATH_NOACL) && fs.has_acls (); } bool has_acls () const {return !(path_flags & PATH_NOACL) && fs.has_acls (); }
@ -232,7 +233,7 @@ class path_conv
path_conv (const device& in_dev) path_conv (const device& in_dev)
: fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL), : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0), path_flags (0), suffix (NULL), posix_path (NULL), error (0),
dev (in_dev) dev (in_dev)
{ {
set_path (in_dev.native); set_path (in_dev.native);
@ -241,7 +242,7 @@ class path_conv
path_conv (int, const char *src, unsigned opt = PC_SYM_FOLLOW, path_conv (int, const char *src, unsigned opt = PC_SYM_FOLLOW,
const suffix_info *suffixes = NULL) const suffix_info *suffixes = NULL)
: fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL), : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0) path_flags (0), suffix (NULL), posix_path (NULL), error (0)
{ {
check (src, opt, suffixes); check (src, opt, suffixes);
} }
@ -249,7 +250,7 @@ class path_conv
path_conv (const UNICODE_STRING *src, unsigned opt = PC_SYM_FOLLOW, path_conv (const UNICODE_STRING *src, unsigned opt = PC_SYM_FOLLOW,
const suffix_info *suffixes = NULL) const suffix_info *suffixes = NULL)
: fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL), : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0) path_flags (0), suffix (NULL), posix_path (NULL), error (0)
{ {
check (src, opt | PC_NULLEMPTY, suffixes); check (src, opt | PC_NULLEMPTY, suffixes);
} }
@ -257,18 +258,18 @@ class path_conv
path_conv (const char *src, unsigned opt = PC_SYM_FOLLOW, path_conv (const char *src, unsigned opt = PC_SYM_FOLLOW,
const suffix_info *suffixes = NULL) const suffix_info *suffixes = NULL)
: fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL), : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0) path_flags (0), suffix (NULL), posix_path (NULL), error (0)
{ {
check (src, opt | PC_NULLEMPTY, suffixes); check (src, opt | PC_NULLEMPTY, suffixes);
} }
path_conv () path_conv ()
: fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL), : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0) path_flags (0), suffix (NULL), posix_path (NULL), error (0)
{} {}
~path_conv (); ~path_conv ();
inline const char *get_win32 () { return path; } inline const char *get_win32 () const { return path; }
PUNICODE_STRING get_nt_native_path (); PUNICODE_STRING get_nt_native_path ();
inline POBJECT_ATTRIBUTES get_object_attr (OBJECT_ATTRIBUTES &attr, inline POBJECT_ATTRIBUTES get_object_attr (OBJECT_ATTRIBUTES &attr,
SECURITY_ATTRIBUTES &sa) SECURITY_ATTRIBUTES &sa)
@ -309,17 +310,17 @@ class path_conv
void free_strings () void free_strings ()
{ {
cfree_and_null (path); cfree_and_null (path);
cfree_and_null (normalized_path); cfree_and_null (posix_path);
cfree_and_null (wide_path); cfree_and_null (wide_path);
} }
path_conv& eq_worker (const path_conv& pc, const char *in_path, path_conv& eq_worker (const path_conv& pc, const char *in_path,
const char *in_normalized_path) const char *in_posix_path)
{ {
free_strings (); free_strings ();
memcpy (this, &pc, sizeof pc); memcpy (this, &pc, sizeof pc);
path = cstrdup (in_path); path = cstrdup (in_path);
conv_handle.dup (pc.conv_handle); conv_handle.dup (pc.conv_handle);
normalized_path = cstrdup(pc.normalized_path); posix_path = cstrdup(pc.posix_path);
if (pc.wide_path) if (pc.wide_path)
{ {
wide_path = cwcsdup (uni_path.Buffer); wide_path = cwcsdup (uni_path.Buffer);
@ -333,7 +334,7 @@ class path_conv
path_conv &operator << (const path_conv& pc) path_conv &operator << (const path_conv& pc)
{ {
const char *save_path; const char *save_path;
const char *save_normalized_path; const char *save_posix_path;
if (!path) if (!path)
save_path = pc.path; save_path = pc.path;
else else
@ -341,19 +342,19 @@ class path_conv
save_path = (char *) alloca (strlen (path) + 1); save_path = (char *) alloca (strlen (path) + 1);
strcpy ((char *) save_path, path); strcpy ((char *) save_path, path);
} }
if (!normalized_path) if (!posix_path)
save_normalized_path = pc.normalized_path; save_posix_path = pc.posix_path;
else else
{ {
save_normalized_path = (char *) alloca (strlen (normalized_path) + 1); save_posix_path = (char *) alloca (strlen (posix_path) + 1);
strcpy ((char *) save_normalized_path, path); strcpy ((char *) save_posix_path, path);
} }
return eq_worker (pc, save_path, save_normalized_path); return eq_worker (pc, save_path, save_posix_path);
} }
path_conv &operator =(const path_conv& pc) path_conv &operator =(const path_conv& pc)
{ {
return eq_worker (pc, pc.path, pc.normalized_path); return eq_worker (pc, pc.path, pc.posix_path);
} }
dev_t get_device () {return dev.get_device ();} dev_t get_device () {return dev.get_device ();}
DWORD file_attributes () const {return fileattr;} DWORD file_attributes () const {return fileattr;}
@ -395,7 +396,8 @@ class path_conv
#if 0 /* obsolete, method still exists in fhandler_disk_file.cc */ #if 0 /* obsolete, method still exists in fhandler_disk_file.cc */
unsigned __stdcall ndisk_links (DWORD); unsigned __stdcall ndisk_links (DWORD);
#endif #endif
void __reg2 set_normalized_path (const char *); inline const char *get_posix () const { return posix_path; }
void __reg2 set_posix (const char *);
DWORD get_symlink_length () { return symlink_length; }; DWORD get_symlink_length () { return symlink_length; };
private: private:
char *modifiable_path () {return (char *) path;} char *modifiable_path () {return (char *) path;}

View File

@ -1,7 +1,7 @@
/* pipe.cc: pipe for Cygwin. /* pipe.cc: pipe for Cygwin.
Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
2008, 2009, 2010, 2011, 2012, 2013 Hat, Inc. 2008, 2009, 2010, 2011, 2012, 2013, 2015 Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -412,9 +412,9 @@ pipe_worker (int filedes[2], unsigned int psize, int mode)
cygheap_fdnew fdout (fdin, false); cygheap_fdnew fdout (fdin, false);
char buf[sizeof ("/dev/fd/pipe:[2147483647]")]; char buf[sizeof ("/dev/fd/pipe:[2147483647]")];
__small_sprintf (buf, "/dev/fd/pipe:[%d]", (int) fdin); __small_sprintf (buf, "/dev/fd/pipe:[%d]", (int) fdin);
fhs[0]->pc.set_normalized_path (buf); fhs[0]->pc.set_posix (buf);
__small_sprintf (buf, "pipe:[%d]", (int) fdout); __small_sprintf (buf, "pipe:[%d]", (int) fdout);
fhs[1]->pc.set_normalized_path (buf); fhs[1]->pc.set_posix (buf);
fdin = fhs[0]; fdin = fhs[0];
fdout = fhs[1]; fdout = fhs[1];
filedes[0] = fdin; filedes[0] = fdin;

View File

@ -66,8 +66,8 @@ perhaps_suffix (const char *prog, path_conv& buf, int& err, unsigned opt)
err = ENOENT; err = ENOENT;
ext = NULL; ext = NULL;
} }
else if (buf.known_suffix) else if (buf.known_suffix ())
ext = buf.get_win32 () + (buf.known_suffix - buf.get_win32 ()); ext = buf.get_win32 () + (buf.known_suffix () - buf.get_win32 ());
else else
ext = strchr (buf.get_win32 (), '\0'); ext = strchr (buf.get_win32 (), '\0');
@ -77,9 +77,9 @@ perhaps_suffix (const char *prog, path_conv& buf, int& err, unsigned opt)
/* Find an executable name, possibly by appending known executable suffixes /* Find an executable name, possibly by appending known executable suffixes
to it. The path_conv struct 'buf' is filled and contains both, win32 and to it. The path_conv struct 'buf' is filled and contains both, win32 and
posix path of the file.. Any found suffix is returned in known_suffix. posix path of the file. Any found suffix is returned in known_suffix.
If the file is not found and !FE_NNF then the win32 version of name is If the file is not found and !FE_NNF then the POSIX version of name is
placed in buf and returned. Otherwise the contents of buf is undefined placed in buf and returned. Otherwise the contents of buf is undefined
and NULL is returned. */ and NULL is returned. */
const char * __reg3 const char * __reg3
@ -100,7 +100,7 @@ find_exec (const char *name, path_conv& buf, const char *search,
if ((has_slash || opt & FE_CWD) if ((has_slash || opt & FE_CWD)
&& (suffix = perhaps_suffix (name, buf, err, opt)) != NULL) && (suffix = perhaps_suffix (name, buf, err, opt)) != NULL)
{ {
retval = buf.get_win32 (); retval = buf.get_posix ();
goto out; goto out;
} }
@ -138,7 +138,7 @@ find_exec (const char *name, path_conv& buf, const char *search,
{ {
if (buf.has_acls () && check_file_access (buf, X_OK, true)) if (buf.has_acls () && check_file_access (buf, X_OK, true))
continue; continue;
retval = buf.get_win32 (); retval = buf.get_posix ();
goto out; goto out;
} }
@ -151,11 +151,11 @@ find_exec (const char *name, path_conv& buf, const char *search,
if (!(opt & FE_NNF)) if (!(opt & FE_NNF))
{ {
buf.check (name, PC_SYM_FOLLOW | PC_POSIX); buf.check (name, PC_SYM_FOLLOW | PC_POSIX);
retval = buf.get_win32 (); retval = buf.get_posix ();
} }
out: out:
debug_printf ("%s = find_exec (%s)", (char *) buf.get_win32 (), name); debug_printf ("%s = find_exec (%s)", (char *) buf.get_posix (), name);
if (known_suffix) if (known_suffix)
*known_suffix = suffix ?: strchr (buf.get_win32 (), '\0'); *known_suffix = suffix ?: strchr (buf.get_win32 (), '\0');
if (!retval && err) if (!retval && err)
@ -1201,7 +1201,7 @@ av::setup (const char *prog_arg, path_conv& real_path, const char *ext,
unshift (arg1); unshift (arg1);
find_exec (pgm, real_path, "PATH", FE_NADA, &ext); find_exec (pgm, real_path, "PATH", FE_NADA, &ext);
unshift (real_path.normalized_path); unshift (real_path.get_posix ());
} }
if (real_path.iscygexec ()) if (real_path.iscygexec ())
dup_all (); dup_all ();

View File

@ -1,7 +1,7 @@
/* syscalls.cc: syscalls /* syscalls.cc: syscalls
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc. 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -2201,7 +2201,7 @@ rename (const char *oldpath, const char *newpath)
set_errno (ENOTDIR); set_errno (ENOTDIR);
__leave; __leave;
} }
if (oldpc.known_suffix if (oldpc.known_suffix ()
&& (ascii_strcasematch (oldpath + olen - 4, ".lnk") && (ascii_strcasematch (oldpath + olen - 4, ".lnk")
|| ascii_strcasematch (oldpath + olen - 4, ".exe"))) || ascii_strcasematch (oldpath + olen - 4, ".exe")))
old_explicit_suffix = true; old_explicit_suffix = true;
@ -2248,7 +2248,7 @@ rename (const char *oldpath, const char *newpath)
set_errno (newpc.isdir () ? EISDIR : ENOTDIR); set_errno (newpc.isdir () ? EISDIR : ENOTDIR);
__leave; __leave;
} }
if (newpc.known_suffix if (newpc.known_suffix ()
&& (ascii_strcasematch (newpath + nlen - 4, ".lnk") && (ascii_strcasematch (newpath + nlen - 4, ".lnk")
|| ascii_strcasematch (newpath + nlen - 4, ".exe"))) || ascii_strcasematch (newpath + nlen - 4, ".exe")))
new_explicit_suffix = true; new_explicit_suffix = true;
@ -2313,7 +2313,7 @@ rename (const char *oldpath, const char *newpath)
&ro_u_lnk, TRUE)) &ro_u_lnk, TRUE))
rename_append_suffix (newpc, newpath, nlen, ".lnk"); rename_append_suffix (newpc, newpath, nlen, ".lnk");
else if (oldpc.is_binary () && !old_explicit_suffix else if (oldpc.is_binary () && !old_explicit_suffix
&& oldpc.known_suffix && oldpc.known_suffix ()
&& !nt_path_has_executable_suffix && !nt_path_has_executable_suffix
(newpc.get_nt_native_path ())) (newpc.get_nt_native_path ()))
/* Never append .exe suffix if oldpath had .exe suffix given /* Never append .exe suffix if oldpath had .exe suffix given
@ -2353,7 +2353,7 @@ rename (const char *oldpath, const char *newpath)
explicitely, or if newfile is a binary (in which case the given explicitely, or if newfile is a binary (in which case the given
name probably makes sense as it is), or if the destination name probably makes sense as it is), or if the destination
filename has one of the blessed executable suffixes. */ filename has one of the blessed executable suffixes. */
if (!old_explicit_suffix && oldpc.known_suffix if (!old_explicit_suffix && oldpc.known_suffix ()
&& !newpc.is_binary () && !newpc.is_binary ()
&& !nt_path_has_executable_suffix && !nt_path_has_executable_suffix
(newpc.get_nt_native_path ())) (newpc.get_nt_native_path ()))
@ -3664,7 +3664,7 @@ chroot (const char *newroot)
else else
{ {
getwinenv("PATH="); /* Save the native PATH */ getwinenv("PATH="); /* Save the native PATH */
cygheap->root.set (path.normalized_path, path.get_win32 (), cygheap->root.set (path.get_posix (), path.get_win32 (),
!!path.objcaseinsensitive ()); !!path.objcaseinsensitive ());
ret = 0; ret = 0;
} }
@ -4714,7 +4714,7 @@ linkat (int olddirfd, const char *oldpathname,
set_errno (old_name.error); set_errno (old_name.error);
__leave; __leave;
} }
strcpy (oldpath, old_name.normalized_path); strcpy (oldpath, old_name.get_posix ());
} }
return link (oldpath, newpath); return link (oldpath, newpath);
} }