Author: mturk
Date: Tue Jun 30 08:17:22 2009
New Revision: 789606

URL: http://svn.apache.org/viewvc?rev=789606&view=rev
Log:
Always change forward to backward slashes

Modified:
    commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c

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=789606&r1=789605&r2=789606&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 Tue Jun 30 
08:17:22 2009
@@ -30,6 +30,36 @@
  *
  */
 
+/*
+ * 1. Remove  \\?\ prefix
+ * 2. Replace UNC\ with \\
+ */
+static __inline wchar_t *NO2UNC(wchar_t *fname)
+{
+    if (wcsncmp(fname, L"\\\\?\\", 4) == 0) {
+        fname += 4;
+        if (wcsncmp(fname, L"UNC\\", 4) == 0) {
+            fname += 2;
+            *fname = L'\\';
+        }
+        else if (wcsncmp(fname, L"UN\\\\", 4) == 0) {
+            /* Already modified in-place.
+             */
+            fname += 2;
+        }
+    }
+    return fname;
+}
+
+static __inline void FS2BS(wchar_t *path)
+{
+    size_t i;
+    for (i = 0; i < wcslen(path); i++) {
+        if (path[i] == L'/')
+            path[i] = L'\\';
+    }
+}
+
 ACR_DECLARE(int) ACR_FileTypeGet(JNIEnv *_E, const wchar_t *fname)
 {
     WIN32_FILE_ATTRIBUTE_DATA info;
@@ -97,6 +127,7 @@
 
     UNREFERENCED_O;
     WITH_WSTR(pathname) {
+        FS2BS(J2W(pathname));
         type = ACR_FileTypeGet(_E, J2W(pathname));
     } END_WITH_WSTR(pathname);
 
@@ -117,6 +148,7 @@
         DWORD  dwFlags = 0;
         size_t tlen = wcslen(J2W(target));
 
+        FS2BS(J2W(target));
         if (ACR_FileTypeGet(NULL, J2W(target)) == ACR_FT_DIR) {
             dwFlags = SYMBOLIC_LINK_FLAG_DIRECTORORY;
         }
@@ -231,6 +263,8 @@
     UNREFERENCED_O;
     WITH_WSTR(target) {
     WITH_WSTR(lnkname) {
+        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)) {
@@ -252,10 +286,12 @@
                                               jstring lnkname)
 {
     jstring rv = NULL;
+    int ex = 0;
 
     UNREFERENCED_O;
     WITH_WSTR(lnkname) {
         void *buf = ACR_Calloc(_E, THROW_FMARK, 
MAXIMUM_REPARSE_DATA_BUFFER_SIZE);
+        FS2BS(J2W(lnkname));
         if (buf) {
             HANDLE sh = CreateFileW(J2W(lnkname),
                                     GENERIC_READ,
@@ -318,19 +354,21 @@
                         }
                     break;
                     default:
-                        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, 
ACR_EBADF);
+                        ex = ACR_EBADF;
                     break;
                 }
                 CloseHandle(sh);
             }
             else {
-                ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO,
-                                    ACR_GET_OS_ERROR());
+                ex = ACR_GET_OS_ERROR();
             }
             free(buf);
         }
 
     } END_WITH_WSTR(lnkname);
+    if (ex) {
+        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ex);
+    }
     return rv;
 }
 
@@ -427,20 +465,6 @@
     int fix = 0;
     int rc;
 
-    if (wcsncmp(fname, L"\\\\?\\", 4) == 0) {
-        fname += 4;
-        if (wcsncmp(fname, L"UNC\\", 4) == 0) {
-            /* TODO: Do not modify in fname in-place.
-             */
-            fname += 2;
-            *fname = L'\\';
-        }
-        else if (wcsncmp(fname, L"UN\\\\", 4) == 0) {
-            /* Already modified in-place.
-             */
-            fname += 2;
-        }
-    }
     rc = GetNamedSecurityInfoW(fname,
                                SE_FILE_OBJECT,
                                OWNER_SECURITY_INFORMATION | 
GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION,
@@ -556,18 +580,6 @@
     int fix = 0;
     int rc;
 
-    if (wcsncmp(fname, L"\\\\?\\", 4) == 0) {
-        fname += 4;
-        if (wcsncmp(fname, L"UNC\\", 4) == 0) {
-            fname += 2;
-            *fname = L'\\';
-        }
-        else if (wcsncmp(fname, L"UN\\\\", 4) == 0) {
-            /* Already modified in-place.
-             */
-            fname += 2;
-        }
-    }
     rc = GetNamedSecurityInfoW(fname,
                                SE_FILE_OBJECT,
                                OWNER_SECURITY_INFORMATION | 
GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION,
@@ -621,6 +633,7 @@
 
     UNREFERENCED_O;
     WITH_WSTR(pathname) {
+        FS2BS(J2W(pathname));
         prot = ACR_FileProtectionGet(_E, J2W(pathname));
     } END_WITH_WSTR(pathname);
 
@@ -635,6 +648,7 @@
     UNREFERENCED_O;
 
     WITH_WSTR(pathname) {
+        FS2BS(J2W(pathname));
         rc = ACR_FileProtectionSet(_E, J2W(pathname), prot);
     } END_WITH_WSTR(pathname);
 
@@ -673,6 +687,7 @@
             sec |= OWNER_SECURITY_INFORMATION;
         if (sgrp)
             sec |= GROUP_SECURITY_INFORMATION;
+        FS2BS(J2W(pathname));
         rc = SetNamedSecurityInfoW(J2W(pathname),
                                    SE_FILE_OBJECT,
                                    sec,
@@ -703,6 +718,7 @@
     UNREFERENCED_O;
 
     WITH_WSTR(pathname) {
+        FS2BS(J2W(pathname));
         flags = GetFileAttributesW(J2W(pathname));
         if (flags == 0xFFFFFFFF)
             rc = GetLastError();


Reply via email to