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:
authorChristopher Faylor <me@cgf.cx>2004-01-24 23:36:51 +0300
committerChristopher Faylor <me@cgf.cx>2004-01-24 23:36:51 +0300
commit68b180c42228ff1b7a7f0b5c5bd51de5570f2b7b (patch)
treed5ffb47942543cf2a2215b1f9a3e016c167972ab
parent6a3584d645d5a621236e1f665d5cc1cccdfd8147 (diff)
* fhandler.h (fhandler_base::fhaccess): Return int for compatibility with
access. * fhandler.cc (fhandler_base::fhaccess): Return int. Use consistent variable name for exit value. Exit at bottom, printing debugging information, like other cygwin functions.
-rw-r--r--winsup/cygwin/ChangeLog8
-rw-r--r--winsup/cygwin/fhandler.cc25
-rw-r--r--winsup/cygwin/fhandler.h2
3 files changed, 23 insertions, 12 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 7d1e25478..6ba73b95a 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,11 @@
+2004-01-24 Christopher Faylor <cgf@redhat.com>
+
+ * fhandler.h (fhandler_base::fhaccess): Return int for compatibility
+ with access.
+ * fhandler.cc (fhandler_base::fhaccess): Return int. Use consistent
+ variable name for exit value. Exit at bottom, printing debugging
+ information, like other cygwin functions.
+
2004-01-23 Christopher Faylor <cgf@redhat.com>
* exceptions.cc (sig_handle): Remove extraneous vforkism.
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index 98b685b87..38b95d42b 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -331,19 +331,20 @@ fhandler_base::device_access_denied (int flags)
return fhaccess (mode);
}
-bool
+int
fhandler_base::fhaccess (int flags)
{
+ int res = -1;
if (error ())
{
set_errno (error ());
- return -1;
+ goto done;
}
if (!exists ())
{
set_errno (ENOENT);
- return -1;
+ goto done;
}
if (!(flags & (R_OK | W_OK | X_OK)))
@@ -354,16 +355,15 @@ fhandler_base::fhaccess (int flags)
else if (has_attribute (FILE_ATTRIBUTE_READONLY) && (flags & W_OK))
{
set_errno (EACCES);
- return -1;
+ goto done;
}
else if (has_acls () && allow_ntsec)
return check_file_access (get_win32_name (), flags);
struct __stat64 st;
- int r = fstat (&st);
- if (r)
- return -1;
- r = -1;
+ if (fstat (&st))
+ goto done;
+
if (flags & R_OK)
{
if (st.st_uid == myself->uid)
@@ -379,6 +379,7 @@ fhandler_base::fhaccess (int flags)
else if (!(st.st_mode & S_IROTH))
goto done;
}
+
if (flags & W_OK)
{
if (st.st_uid == myself->uid)
@@ -394,6 +395,7 @@ fhandler_base::fhaccess (int flags)
else if (!(st.st_mode & S_IWOTH))
goto done;
}
+
if (flags & X_OK)
{
if (st.st_uid == myself->uid)
@@ -409,11 +411,12 @@ fhandler_base::fhaccess (int flags)
else if (!(st.st_mode & S_IXOTH))
goto done;
}
- r = 0;
+ res = 0;
done:
- if (r)
+ if (res)
set_errno (EACCES);
- return r;
+ debug_printf ("returning %d", res);
+ return res;
}
/* Open system call handler function. */
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index 514609b45..568e5237b 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -364,7 +364,7 @@ class fhandler_base
bool is_auto_device () {return isdevice () && !dev ().isfs ();}
bool is_fs_special () {return pc.is_fs_special ();}
bool device_access_denied (int) __attribute__ ((regparm (2)));
- bool fhaccess (int flags) __attribute__ ((regparm (2)));
+ int fhaccess (int flags) __attribute__ ((regparm (2)));
};
class fhandler_socket: public fhandler_base