diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2001-04-13 01:21:37 +0400 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2001-04-13 01:21:37 +0400 |
commit | 70c370d674c5696d39e64970300c889c64ecd752 (patch) | |
tree | 310510f16858e53d6f08f6bab19d744d66469183 /winsup/cygwin/environ.cc | |
parent | b8a8c59d33d5df1dbd709d6e340c250faa4ebf7b (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.cc | 29 |
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}}}, |