You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/08/20 11:42:20 UTC

svn commit: r806100 - in /commons/sandbox/runtime/trunk/src/main/native/os: hpux/pgroup.c hpux/puser.c linux/pgroup.c linux/puser.c unix/dso.c unix/file.c unix/group.c unix/user.c win32/file.c

Author: mturk
Date: Thu Aug 20 09:42:20 2009
New Revision: 806100

URL: http://svn.apache.org/viewvc?rev=806100&view=rev
Log:
Use THROW macros instead repeating the code all over the place

Modified:
    commons/sandbox/runtime/trunk/src/main/native/os/hpux/pgroup.c
    commons/sandbox/runtime/trunk/src/main/native/os/hpux/puser.c
    commons/sandbox/runtime/trunk/src/main/native/os/linux/pgroup.c
    commons/sandbox/runtime/trunk/src/main/native/os/linux/puser.c
    commons/sandbox/runtime/trunk/src/main/native/os/unix/dso.c
    commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c
    commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c
    commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c
    commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c

Modified: commons/sandbox/runtime/trunk/src/main/native/os/hpux/pgroup.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/hpux/pgroup.c?rev=806100&r1=806099&r2=806100&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/hpux/pgroup.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/hpux/pgroup.c Thu Aug 20 09:42:20 2009
@@ -43,11 +43,7 @@
         errno = 0;
         gr = getgrent();
         if (gr == NULL && n == 0) {
-            if  (ACR_STATUS_IS_EACCES(ACR_GET_OS_ERROR()))
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-            else
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                                   ACR_GET_OS_ERROR());
+            ACR_THROW_IO_ERRNO();
             return NULL;
         }
         if (gr == NULL)

Modified: commons/sandbox/runtime/trunk/src/main/native/os/hpux/puser.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/hpux/puser.c?rev=806100&r1=806099&r2=806100&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/hpux/puser.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/hpux/puser.c Thu Aug 20 09:42:20 2009
@@ -43,11 +43,7 @@
         errno = 0;
         pw = getpwent();
         if (pw == NULL && n == 0) {
-            if  (ACR_STATUS_IS_EACCES(ACR_GET_OS_ERROR()))
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-            else
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                                   ACR_GET_OS_ERROR());
+            ACR_THROW_IO_ERRNO();
             return NULL;
         }
         if (pw == NULL)

Modified: commons/sandbox/runtime/trunk/src/main/native/os/linux/pgroup.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/linux/pgroup.c?rev=806100&r1=806099&r2=806100&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/linux/pgroup.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/linux/pgroup.c Thu Aug 20 09:42:20 2009
@@ -45,11 +45,7 @@
     while (1) {
         rc = getgrent_r(&grp, buffer, sizeof(buffer), &gr);
         if (rc && n == 0) {
-            if  (ACR_STATUS_IS_EACCES(ACR_FROM_OS_ERROR(rc)))
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-            else
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                                    ACR_FROM_OS_ERROR(rc));
+            ACR_THROW_IO_ERRNO();
             return NULL;
         }
         if (rc || gr == NULL)

Modified: commons/sandbox/runtime/trunk/src/main/native/os/linux/puser.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/linux/puser.c?rev=806100&r1=806099&r2=806100&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/linux/puser.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/linux/puser.c Thu Aug 20 09:42:20 2009
@@ -45,11 +45,7 @@
     while (1) {
         rc = getpwent_r(&usr, buffer, sizeof(buffer), &pw);
         if (rc && n == 0) {
-            if  (ACR_STATUS_IS_EACCES(ACR_FROM_OS_ERROR(rc)))
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-            else
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                                    ACR_FROM_OS_ERROR(rc));
+            ACR_THROW_IO_ERRNO();
             return NULL;
         }
         if (rc || pw == NULL)

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/dso.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/dso.c?rev=806100&r1=806099&r2=806100&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/dso.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/dso.c Thu Aug 20 09:42:20 2009
@@ -53,7 +53,7 @@
     handle = dlopen(path, flags);
     if (handle == NULL) {
         rc = ACR_GET_OS_ERROR();
-        if (!IS_INVALID_HANDLE(_E)) {
+        if (IS_VALID_HANDLE(_E)) {
             ACR_ThrowExceptionA(_E, THROW_NMARK, ACR_EX_EIO, dlerror());
         }
         ACR_SET_OS_ERROR(rc);
@@ -69,12 +69,8 @@
     int rv;
 
     rv = acr_ioh_close(dso);
-    if (rv  && !IS_INVALID_HANDLE(_E)) {
-        if (rv == EACCES)
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, rv);
-    }
+
+    ACR_THROW_IO_IF_ERR(rv);
     return rv;
 }
 
@@ -91,7 +87,7 @@
         void *retval = dlsym(handle, symname);
         if (retval == NULL) {
             rc = ACR_GET_OS_ERROR();
-            if (!IS_INVALID_HANDLE(_E)) {
+            if (IS_VALID_HANDLE(_E)) {
                 ACR_ThrowExceptionA(_E, THROW_NMARK, ACR_EX_EIO, dlerror());
             }
             ACR_SET_OS_ERROR(rc);

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c?rev=806100&r1=806099&r2=806100&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c Thu Aug 20 09:42:20 2009
@@ -103,10 +103,7 @@
          * include the operating system you are using.
          */
 #endif
-        if (errno == EACCES)
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, errno);
+        ACR_THROW_IO_ERRNO();
     }
     return -1;
 }
@@ -126,7 +123,7 @@
 ACR_IO_EXPORT_DECLARE(jlong, File, inode0)(ACR_JNISTDARGS, jstring pathname)
 {
     jlong rv = 0;
-    int   ex = EINVAL;
+    int   ex = ACR_EINVAL;
 
     UNREFERENCED_O;
     WITH_CSTR(pathname) {
@@ -139,14 +136,7 @@
             ex = ACR_GET_OS_ERROR();
     } END_WITH_CSTR(pathname);
 
-    if (ex) {
-        if (ACR_STATUS_IS_EACCES(ex)) {
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        }
-        else if (!ACR_STATUS_IS_EEXIST(ex)) {
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ex);
-        }
-    }
+    ACR_THROW_IO_IF_ERR(ex);
     return rv;
 }
 
@@ -234,14 +224,7 @@
         }
     } END_WITH_CSTR(lnkname);
 
-    if (ex) {
-        if (ACR_STATUS_IS_EACCES(ex)) {
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        }
-        else if (!ACR_STATUS_IS_EEXIST(ex)) {
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ex);
-        }
-    }
+    ACR_THROW_IO_IF_ERR(ex);
     return rv;
 }
 
@@ -326,13 +309,7 @@
     if (stat(fname, &info) == 0) {
         return ACR_UnixModeToPerms(info.st_mode);
     }
-    else if (_E) {
-        if (errno == EACCES)
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO,
-                               ACR_GET_OS_ERROR());
-    }
+    ACR_THROW_IO_ERRNO();
     return -1;
 }
 
@@ -342,13 +319,7 @@
     if (chmod(fname, ACR_UnixPermsToMode(prot)) == 0) {
         return 0;
     }
-    else if (_E) {
-        if (errno == EACCES)
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO,
-                               ACR_GET_OS_ERROR());
-    }
+    ACR_THROW_IO_ERRNO();
     return ACR_GET_OS_ERROR();
 }
 
@@ -397,15 +368,8 @@
             ex = 0;
     } END_WITH_CSTR(pathname);
 
-    if (ex) {
-        if  (ACR_STATUS_IS_EACCES(ex))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ex);
-        return JNI_FALSE;
-    }
-    else
-        return JNI_TRUE;
+    ACR_THROW_IO_IF_ERR(ex);
+    return ex == 0 ? JNI_TRUE : JNI_FALSE;
 }
 
 ACR_IO_EXPORT_DECLARE(jboolean, File, attrs0)(ACR_JNISTDARGS, jstring pathname,

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c?rev=806100&r1=806099&r2=806100&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/group.c Thu Aug 20 09:42:20 2009
@@ -104,13 +104,11 @@
 
     rc = getgrnam_r(name, &grb, buffer, sizeof(buffer), &gr);
     if (rc) {
-        if (ACR_STATUS_IS_ENOENT(ACR_FROM_OS_ERROR(rc)))
-            return NULL;
-        else if  (ACR_STATUS_IS_EACCES(ACR_FROM_OS_ERROR(rc)))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                                ACR_FROM_OS_ERROR(rc));
+        rc = ACR_GET_OS_ERROR();
+        if (ACR_STATUS_IS_ENOENT(rc)) {
+            ACR_THROW_IO_IF_ERR(rc);
+        }
+        return NULL;
     }
     if (!gr)
         return NULL;
@@ -148,13 +146,11 @@
 
     rc = getgrgid_r(id, &grb, buffer, sizeof(buffer), &gr);
     if (rc) {
-        if (ACR_STATUS_IS_ENOENT(ACR_FROM_OS_ERROR(rc)))
-            return NULL;
-        else if  (ACR_STATUS_IS_EACCES(ACR_FROM_OS_ERROR(rc)))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                                ACR_FROM_OS_ERROR(rc));
+        rc = ACR_GET_OS_ERROR();
+        if (ACR_STATUS_IS_ENOENT(rc)) {
+            ACR_THROW_IO_IF_ERR(rc);
+        }
+        return NULL;
     }
     if (!gr)
         return NULL;
@@ -256,13 +252,11 @@
 
     rc = getgrgid_r(gid, &grb, buffer, sizeof(buffer), &gr);
     if (rc) {
-        if (ACR_STATUS_IS_ENOENT(ACR_FROM_OS_ERROR(rc)))
-            return NULL;
-        else if  (ACR_STATUS_IS_EACCES(ACR_FROM_OS_ERROR(rc)))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                                ACR_FROM_OS_ERROR(rc));
+        rc = ACR_GET_OS_ERROR();
+        if (ACR_STATUS_IS_ENOENT(rc)) {
+            ACR_THROW_IO_IF_ERR(rc);
+        }
+        return NULL;
     }
     if (!gr || !gr->gr_mem)
         return NULL;
@@ -284,3 +278,4 @@
     }
     return usrs;
 }
+

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c?rev=806100&r1=806099&r2=806100&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/user.c Thu Aug 20 09:42:20 2009
@@ -119,13 +119,10 @@
 
     rc = getpwnam_r(name, &pwb, buffer, sizeof(buffer), &pw);
     if (rc) {
-        if (ACR_STATUS_IS_ENOENT(ACR_FROM_OS_ERROR(rc)))
-            return NULL;
-        else if  (ACR_STATUS_IS_EACCES(ACR_FROM_OS_ERROR(rc)))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                                ACR_FROM_OS_ERROR(rc));
+        rc = ACR_GET_OS_ERROR();
+        if (ACR_STATUS_IS_ENOENT(rc)) {
+            ACR_THROW_IO_IF_ERR(rc);
+        }
         return NULL;
     }
     if (!pw)
@@ -169,13 +166,10 @@
 
     rc = getpwuid_r(id, &pwb, buffer, sizeof(buffer), &pw);
     if (rc) {
-        if (ACR_STATUS_IS_ENOENT(ACR_FROM_OS_ERROR(rc)))
-            return NULL;
-        else if  (ACR_STATUS_IS_EACCES(ACR_FROM_OS_ERROR(rc)))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                                ACR_FROM_OS_ERROR(rc));
+        rc = ACR_GET_OS_ERROR();
+        if (ACR_STATUS_IS_ENOENT(rc)) {
+            ACR_THROW_IO_IF_ERR(rc);
+        }
         return NULL;
     }
     if (!pw)
@@ -271,11 +265,7 @@
         errno = 0;
         ut = getutxent();
         if (ut == NULL && n == 0) {
-            if  (ACR_STATUS_IS_EACCES(ACR_GET_OS_ERROR()))
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-            else
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_OSERR,
-                                   ACR_GET_OS_ERROR());
+            ACR_THROW_IO_ERRNO();
             return NULL;
         }
         if (ut == NULL)
@@ -315,3 +305,4 @@
     ACR_TableFree(_E, THROW_FMARK, utbl);
     return usrs;
 }
+

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c?rev=806100&r1=806099&r2=806100&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c Thu Aug 20 09:42:20 2009
@@ -114,9 +114,9 @@
         }
         return type;
     }
-    else if (_E) {
+    else {
         /* Throw exception */
-        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ACR_GET_OS_ERROR());
+        ACR_THROW_IO_ERRNO();
     }
     return -1;
 }
@@ -149,12 +149,8 @@
     }
     else
         ex = ACR_GET_OS_ERROR();
-    if (ex) {
-        rv = 0;
-        ACR_SET_OS_ERROR(ex);
-        if (!IS_INVALID_HANDLE(_E))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ex);
-    }
+
+    ACR_THROW_IO_IF_ERR(ex);
     return rv;
 }
 
@@ -195,12 +191,12 @@
         }
         if (ACR_HAVE_LATE_DLL_FUNC(CreateSymbolicLinkW)) {
             if (!CreateSymbolicLinkW(J2W(lnkname), J2W(target), dwFlags)) {
-                int err = ACR_GET_OS_ERROR();
-                if (ACR_STATUS_IS_EACCES(err)) {
+                int ex = ACR_GET_OS_ERROR();
+                if (ACR_STATUS_IS_EACCES(ex)) {
                     ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
                 }
-                else if (!ACR_STATUS_IS_EEXIST(err)) {
-                    ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, err);
+                else if (!ACR_STATUS_IS_EEXIST(ex)) {
+                    ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ex);
                 }
             }
             else
@@ -219,8 +215,13 @@
                 goto bailout;
             }
             if (!GetFullPathNameW(J2W(target), ACR_HBUFF_LEN,  fpath, NULL)) {
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO,
-                                   ACR_GET_OS_ERROR());
+                int ex = ACR_GET_OS_ERROR();
+                if (ACR_STATUS_IS_EACCES(ex)) {
+                    ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
+                }
+                else if (!ACR_STATUS_IS_EEXIST(ex)) {
+                    ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ex);
+                }
                 goto bailout;
             }
             tlen = wcslen(fpath);
@@ -231,8 +232,7 @@
             RemoveDirectoryW(J2W(lnkname));
             if (!CreateDirectoryW(J2W(lnkname), NULL)) {
                 /* Failed to create link name directory */
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO,
-                                   ACR_GET_OS_ERROR());
+                ACR_THROW_IO_ERRNO();
                 goto bailout;
             }
             if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token)) {
@@ -253,8 +253,7 @@
                                 FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS,
                                 NULL);
             if (hlink == INVALID_HANDLE_VALUE) {
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO,
-                                   ACR_GET_OS_ERROR());
+                ACR_THROW_IO_ERRNO();
                 goto bailout;
             }
             rdb = (PREPARSE_DATA_BUFFER)mpb;
@@ -271,8 +270,7 @@
             if (!DeviceIoControl(hlink, FSCTL_SET_REPARSE_POINT,
                                  rdb, rdb->ReparseDataLength + 8,
                                  NULL, 0, &dlen, NULL)) {
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO,
-                                   ACR_GET_OS_ERROR());
+                ACR_THROW_IO_ERRNO();
             }
             else {
                 rc = JNI_TRUE;
@@ -282,7 +280,7 @@
         else {
             ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ENOTIMPL, 0);
         }
-        bailout:
+bailout:
         if (mpb)
             free(mpb);
     } END_WITH_WSTR(lnkname);
@@ -303,12 +301,12 @@
         FS2BS(J2W(target));
         FS2BS(J2W(lnkname));
         if (!CreateHardLinkW(J2W(lnkname), J2W(target), NULL)) {
-            int err = ACR_GET_OS_ERROR();
-            if (ACR_STATUS_IS_EACCES(err)) {
+            int ex = ACR_GET_OS_ERROR();
+            if (ACR_STATUS_IS_EACCES(ex)) {
                 ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
             }
-            else if (!ACR_STATUS_IS_EEXIST(err)) {
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, err);
+            else if (!ACR_STATUS_IS_EEXIST(ex)) {
+                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ex);
             }
         }
         else
@@ -403,9 +401,8 @@
         }
 
     } END_WITH_WSTR(lnkname);
-    if (ex) {
-        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ex);
-    }
+
+    ACR_THROW_IO_IF_ERR(ex);
     return rv;
 }
 
@@ -495,7 +492,7 @@
 
 ACR_DECLARE(int) ACR_FileProtectionGet(JNIEnv *_E, wchar_t *fname)
 {
-    int protection = 0;
+    int rv = 0;
     PSID user = NULL, group = NULL;
     PACL dacl = NULL;
     PSECURITY_DESCRIPTOR ppsd = NULL;
@@ -511,36 +508,32 @@
                                NULL,
                                &ppsd);
     if (rc == ERROR_SUCCESS) {
-        rc = resolve_prot(user, group, dacl);
-        if (rc >= 0) {
+        rv = resolve_prot(user, group, dacl);
+        if (rv >= 0) {
             DWORD flags = GetFileAttributesW(fname);
             if (flags != 0xFFFFFFFF) {
                 if (flags & FILE_ATTRIBUTE_READONLY) {
                     /* Clear any WRITE attributes */
-                    rc &= ~ACR_FPROT_UWRITE;
-                    rc &= ~ACR_FPROT_GWRITE;
-                    rc &= ~ACR_FPROT_WWRITE;
+                    rv &= ~ACR_FPROT_UWRITE;
+                    rv &= ~ACR_FPROT_GWRITE;
+                    rv &= ~ACR_FPROT_WWRITE;
                 }
                 if (flags & FILE_ATTRIBUTE_HIDDEN) {
                     /* XXX: Hidden files are non-executable? */
-                    rc &= ~ACR_FPROT_UEXECUTE;
-                    rc &= ~ACR_FPROT_GEXECUTE;
-                    rc &= ~ACR_FPROT_WEXECUTE;
+                    rv &= ~ACR_FPROT_UEXECUTE;
+                    rv &= ~ACR_FPROT_GEXECUTE;
+                    rv &= ~ACR_FPROT_WEXECUTE;
                 }
             }
         }
     }
-    else if (_E) {
-        if  (ACR_STATUS_IS_EACCES(ACR_FROM_OS_ERROR(rc)))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO,
-                               ACR_FROM_OS_ERROR(rc));
-        rc = -1;
+    else {
+        ACR_THROW_IO_ERRNO();
+        rv = -1;
     }
     if (ppsd)
         LocalFree((HLOCAL)ppsd);
-    return rc;
+    return rv;
 }
 
 static PACL update_prot(PSID user, PSID group, PACL dacl, int prot)
@@ -650,13 +643,7 @@
     return 0;
 
 failed:
-    rc = ACR_FROM_OS_ERROR(rc);
-    if (_E) {
-        if  (ACR_STATUS_IS_EACCES(rc))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, rc);
-    }
+    ACR_THROW_IO_IF_ERR(rc);
     if (ppsd)
         LocalFree((HLOCAL)ppsd);
     if (eacl)
@@ -737,11 +724,7 @@
     if (rc == ERROR_SUCCESS)
         return JNI_TRUE;
     else {
-        rc = ACR_FROM_OS_ERROR(rc);
-        if  (ACR_STATUS_IS_EACCES(rc))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, rc);
+        ACR_THROW_IO_ERRNO();
         return JNI_FALSE;
     }
 }
@@ -810,11 +793,7 @@
     if (rc == ERROR_SUCCESS)
         return JNI_TRUE;
     else {
-        rc = ACR_FROM_OS_ERROR(rc);
-        if  (ACR_STATUS_IS_EACCES(rc))
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        else
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, rc);
+        ACR_THROW_IO_ERRNO();
         return JNI_FALSE;
     }
 }
@@ -835,14 +814,7 @@
             ex = 0;
     } END_WITH_WSTR(pathname);
 
-    if (ex) {
-        if (ACR_STATUS_IS_EACCES(ex)) {
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        }
-        else if (!ACR_STATUS_IS_EEXIST(ex)) {
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ex);
-        }
-    }
+    ACR_THROW_IO_IF_ERR(ex);
     return rv;
 }
 
@@ -870,14 +842,7 @@
             ex = ACR_GET_OS_ERROR();
     } END_WITH_WSTR(pathname);
 
-    if (ex) {
-        if (ACR_STATUS_IS_EACCES(ex)) {
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
-        }
-        else if (!ACR_STATUS_IS_EEXIST(ex)) {
-            ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ex);
-        }
-    }
+    ACR_THROW_IO_IF_ERR(ex);
     return attr;
 }