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:
Diffstat (limited to 'winsup/cygwin/fhandler.cc')
-rw-r--r--winsup/cygwin/fhandler.cc12
1 files changed, 10 insertions, 2 deletions
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index 75528d35e..f47805bde 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -1541,6 +1541,8 @@ fhandler_base::fsync ()
int
fhandler_base::fpathconf (int v)
{
+ int ret;
+
switch (v)
{
case _PC_LINK_MAX:
@@ -1558,10 +1560,16 @@ fhandler_base::fpathconf (int v)
break;
case _PC_NAME_MAX:
/* NAME_MAX is without trailing \0 */
- return pc.isdir () ? PATH_MAX - strlen (get_name ()) - 2 : NAME_MAX;
+ if (!pc.isdir ())
+ return NAME_MAX;
+ ret = NT_MAX_PATH - strlen (get_name ()) - 2;
+ return ret < 0 ? 0 : ret > NAME_MAX ? NAME_MAX : ret;
case _PC_PATH_MAX:
/* PATH_MAX is with trailing \0 */
- return pc.isdir () ? PATH_MAX - strlen (get_name ()) - 1 : PATH_MAX;
+ if (!pc.isdir ())
+ return PATH_MAX;
+ ret = NT_MAX_PATH - strlen (get_name ()) - 1;
+ return ret < 0 ? 0 : ret > PATH_MAX ? PATH_MAX : ret;
case _PC_PIPE_BUF:
if (pc.isdir ()
|| get_device () == FH_FIFO || get_device () == FH_PIPE