Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2001-04-13 01:21:37 +0400
committerCorinna Vinschen <corinna@vinschen.de>2001-04-13 01:21:37 +0400
commit70c370d674c5696d39e64970300c889c64ecd752 (patch)
tree310510f16858e53d6f08f6bab19d744d66469183 /winsup/cygwin/environ.cc
parentb8a8c59d33d5df1dbd709d6e340c250faa4ebf7b (diff)
* dir.cc (mkdir): Check for case clash.
* environ.cc: Add extern declaration for `pcheck_case'. (check_case_init): New function. (struct parse_thing): Add "check_case" option. * errno.cc (_sys_nerrlist): Add text for ECASECLASH. (strerror): Add case branch for ECASECLASH. * fhandler.cc (fhandler_disk_file::open): Check for case clash. * path.cc: Add global variable `pcheck_case'. (struct symlink_info): Add member `case_clash' and method `case_check'. (path_prefix_p_): Call `pathnmatch' instead of `strncasematch'. (pathnmatch): New funtion. (pathmatch): Ditto. (path_conv::check): Add handling for case checking. (symlink): Check for case clash. (symlink_info::check): Add parameter for case checking. Handle case checking. (symlink_info::case_check): New method. (chdir): Don't use unconverted path if pcheck_case==PCHECK_STRICT. * path.h: Add extern declarations for `pathmatch' and `pathnmatch'. (enum case_checking): New enumeration type describing the case checking behaviour of path conversion routines. (class path_conv): Add member `case_clash'. * syscalls.cc (_link): Check for case clash.
Diffstat (limited to 'winsup/cygwin/environ.cc')
-rw-r--r--winsup/cygwin/environ.cc29
1 files changed, 29 insertions, 0 deletions
diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc
index 43b246e27..2f8e350d8 100644
--- a/winsup/cygwin/environ.cc
+++ b/winsup/cygwin/environ.cc
@@ -32,6 +32,7 @@ extern BOOL allow_ntea;
extern BOOL allow_smbntsec;
extern BOOL allow_winsymlinks;
extern BOOL strip_title_path;
+extern int pcheck_case;
extern DWORD chunksize;
BOOL reset_com = TRUE;
static BOOL envcache = TRUE;
@@ -394,6 +395,33 @@ glob_init (const char *buf)
}
static void
+check_case_init (const char *buf)
+{
+ if (!buf || !*buf)
+ return;
+
+ if (strncmp (buf, "relax", 5)== 0)
+ {
+ pcheck_case = PCHECK_RELAXED;
+ debug_printf ("File case checking set to RELAXED");
+ }
+ else if (strcmp (buf, "adjust")== 0)
+ {
+ pcheck_case = PCHECK_ADJUST;
+ debug_printf ("File case checking set to ADJUST");
+ }
+ else if (strcmp (buf, "strict")== 0)
+ {
+ pcheck_case = PCHECK_STRICT;
+ debug_printf ("File case checking set to STRICT");
+ }
+ else
+ {
+ debug_printf ("Wrong case checking name: %s", buf);
+ }
+}
+
+static void
codepage_init (const char *buf)
{
if (!buf || !*buf)
@@ -441,6 +469,7 @@ struct parse_thing
} known[] =
{
{"binmode", {x: &binmode}, justset, NULL, {{O_TEXT}, {O_BINARY}}},
+ {"check_case", {func: &check_case_init}, isfunc, NULL, {{0}, {0}}},
{"codepage", {func: &codepage_init}, isfunc, NULL, {{0}, {0}}},
{"envcache", {&envcache}, justset, NULL, {{TRUE}, {FALSE}}},
{"error_start", {func: &error_start_init}, isfunc, NULL, {{0}, {0}}},