* path.cc (path_conv::check): Move fs-specific settings to a point where we

know that we have filled out the filesystem information.
* path.h (path_conv::path_conv): Use consistent initialization for
constructors.
* include/sys/cygwin.h: Define CW_STRERROR.
* include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 228.
* include/external.h: Implement CW_STRERROR.
This commit is contained in:
Christopher Faylor 2010-07-04 17:12:27 +00:00
parent daa7111808
commit 6259826eb4
6 changed files with 39 additions and 17 deletions

View File

@ -1,3 +1,14 @@
2010-07-04 Christopher Faylor <me+cygwin@cgf.cx>
* path.cc (path_conv::check): Move fs-specific settings to a point
where we know that we have filled out the filesystem information.
* path.h (path_conv::path_conv): Use consistent initialization for
constructors.
* include/sys/cygwin.h: Define CW_STRERROR.
* include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 228.
* include/external.h: Implement CW_STRERROR.
2010-07-02 Corinna Vinschen <corinna@vinschen.de> 2010-07-02 Corinna Vinschen <corinna@vinschen.de>
* net.cc (cygwin_getsockopt): Make sure SO_PEERCRED is only handled * net.cc (cygwin_getsockopt): Make sure SO_PEERCRED is only handled

View File

@ -197,7 +197,7 @@ extern "C" unsigned long
cygwin_internal (cygwin_getinfo_types t, ...) cygwin_internal (cygwin_getinfo_types t, ...)
{ {
va_list arg; va_list arg;
unsigned long res = -1; uintptr_t res = (uintptr_t) -1;
va_start (arg, t); va_start (arg, t);
switch (t) switch (t)
@ -508,6 +508,12 @@ cygwin_internal (cygwin_getinfo_types t, ...)
} }
} }
break; break;
case CW_STRERROR:
{
int err = va_arg (arg, int);
res = (uintptr_t) strerror (err);
}
break;
default: default:
set_errno (ENOSYS); set_errno (ENOSYS);

View File

@ -386,13 +386,14 @@ details. */
224: Export xdr* functions. 224: Export xdr* functions.
225: Export __xdr* functions. 225: Export __xdr* functions.
226: Export __locale_mb_cur_max. 226: Export __locale_mb_cur_max.
227: Add pseudo_reloc_start, pseudo_reloc_end, image_base to per_process 227: Add pseudo_reloc_start, pseudo_reloc_end, image_base to per_process.
228: CW_STRERROR added.
*/ */
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */ /* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
#define CYGWIN_VERSION_API_MAJOR 0 #define CYGWIN_VERSION_API_MAJOR 0
#define CYGWIN_VERSION_API_MINOR 227 #define CYGWIN_VERSION_API_MINOR 228
/* There is also a compatibity version number associated with the /* There is also a compatibity version number associated with the
shared memory regions. It is incremented when incompatible shared memory regions. It is incremented when incompatible

View File

@ -148,7 +148,8 @@ typedef enum
CW_GET_INSTKEY, CW_GET_INSTKEY,
CW_INT_SETLOCALE, CW_INT_SETLOCALE,
CW_CVT_MNT_OPTS, CW_CVT_MNT_OPTS,
CW_LST_MNT_OPTS CW_LST_MNT_OPTS,
CW_STRERROR
} cygwin_getinfo_types; } cygwin_getinfo_types;
/* Token type for CW_SET_EXTERNAL_TOKEN */ /* Token type for CW_SET_EXTERNAL_TOKEN */

View File

@ -861,16 +861,6 @@ is_virtual_symlink:
{ {
fileattr = sym.fileattr; fileattr = sym.fileattr;
path_flags = sym.pflags; path_flags = sym.pflags;
/* If the FS has been found to have unrelibale inodes, note
that in path_flags. */
if (!fs.hasgood_inode ())
path_flags |= PATH_IHASH;
/* If the OS is caseinsensitive or the FS is caseinsensitive,
don't handle path casesensitive. */
if (cygwin_shared->obcaseinsensitive || fs.caseinsensitive ())
path_flags |= PATH_NOPOSIX;
caseinsensitive = (path_flags & PATH_NOPOSIX)
? OBJ_CASE_INSENSITIVE : 0;
} }
/* If symlink.check found an existing non-symlink file, then /* If symlink.check found an existing non-symlink file, then
@ -1057,6 +1047,16 @@ out:
but set it to not executable since it will be figured out but set it to not executable since it will be figured out
later by anything which cares about this. */ later by anything which cares about this. */
} }
/* If the FS has been found to have unrelibale inodes, note
that in path_flags. */
if (!fs.hasgood_inode ())
path_flags |= PATH_IHASH;
/* If the OS is caseinsensitive or the FS is caseinsensitive,
don't handle path casesensitive. */
if (cygwin_shared->obcaseinsensitive || fs.caseinsensitive ())
path_flags |= PATH_NOPOSIX;
caseinsensitive = (path_flags & PATH_NOPOSIX)
? OBJ_CASE_INSENSITIVE : 0;
if (exec_state () != dont_know_if_executable) if (exec_state () != dont_know_if_executable)
/* ok */; /* ok */;
else if (isdir ()) else if (isdir ())

View File

@ -207,21 +207,24 @@ 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)
: wide_path (NULL), path (NULL), normalized_path (NULL) : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0)
{ {
check (src, opt, suffixes); check (src, opt, suffixes);
} }
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)
: wide_path (NULL), path (NULL), normalized_path (NULL) : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0)
{ {
check (src, opt | PC_NULLEMPTY, suffixes); check (src, opt | PC_NULLEMPTY, suffixes);
} }
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)
: wide_path (NULL), path (NULL), normalized_path (NULL) : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path (NULL),
path_flags (0), known_suffix (NULL), normalized_path (NULL), error (0)
{ {
check (src, opt | PC_NULLEMPTY, suffixes); check (src, opt | PC_NULLEMPTY, suffixes);
} }