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/09/07 11:34:58 UTC

svn commit: r812059 - in /commons/sandbox/runtime/trunk/src/main/native: include/acr_file.h os/linux/selinux.c os/unix/temps.c os/win32/temps.c test/testsuite.c

Author: mturk
Date: Mon Sep  7 09:34:58 2009
New Revision: 812059

URL: http://svn.apache.org/viewvc?rev=812059&view=rev
Log:
Extent temporary path getter

Modified:
    commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h
    commons/sandbox/runtime/trunk/src/main/native/os/linux/selinux.c
    commons/sandbox/runtime/trunk/src/main/native/os/unix/temps.c
    commons/sandbox/runtime/trunk/src/main/native/os/win32/temps.c
    commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h?rev=812059&r1=812058&r2=812059&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h Mon Sep  7 09:34:58 2009
@@ -224,9 +224,16 @@
 /** Get system temporary directory.
  * @param env JNI environment to use. If NULL no exception will be thrown
  *            if temprary directory cannot be found.
+ * @param path Optional platform path char separated list of directories
+ *        to use as temporary directory. Firts one that is accessible will
+ *        be used.
  * @return Temporary directory.
+ * @note After first infocation temporary directory will be stored internally
+ * and future invocations will return the same path. However if the path
+ * param is not null the scan will be repeated.
  */
-ACR_DECLARE(const acr_pchar_t *) ACR_TempPathGet(JNIEnv *env);
+ACR_DECLARE(const acr_pchar_t *) ACR_TempPathGet(JNIEnv *env,
+                                                 const acr_pchar_t *path);
 
 
 /** Get Filename from file descriptor.

Modified: commons/sandbox/runtime/trunk/src/main/native/os/linux/selinux.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/linux/selinux.c?rev=812059&r1=812058&r2=812059&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/linux/selinux.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/linux/selinux.c Mon Sep  7 09:34:58 2009
@@ -20,6 +20,7 @@
 #include "acr_error.h"
 #include "acr_string.h"
 
+#if HAVE_SELINUX_H
 #include <selinux/selinux.h>
 
 ACR_JNI_PLATFORM_DECLARE(jboolean, SELinux, enabled0)(ACR_JNISTDARGS)
@@ -35,3 +36,11 @@
         return V2Z(rc);
     }
 }
+#else
+
+ACR_JNI_PLATFORM_DECLARE(jboolean, SELinux, enabled0)(ACR_JNISTDARGS)
+{
+    UNREFERENCED_STDARGS;
+    return JNI_FALSE;
+}
+#endif

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/temps.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/temps.c?rev=812059&r1=812058&r2=812059&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/temps.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/temps.c Mon Sep  7 09:34:58 2009
@@ -183,11 +183,37 @@
         return 0;
 }
 
-ACR_DECLARE(const char *) ACR_TempPathGet(JNIEnv *_E)
+ACR_DECLARE(const char *) ACR_TempPathGet(JNIEnv *_E, const char *srch)
 {
     static char _temp_path[TMP_PATH_MAX] = "";
     int i = 0;
 
+    if (srch) {
+        char *p = strchr(srch, ':');
+        if (p == NULL)
+            p = (char *)(srch + strlen(srch));
+        while (p) {
+            size_t part = p - srch + 1;
+            if (part >= TMP_PATH_MAX)
+                break;
+            strlcpy(_temp_path, srch, part);
+            if (_temp_path[0] && _temp_test(_temp_path)) {
+                ACR_NO_END_SLASHA(_temp_path);
+                break;
+            }
+            _temp_path[0] = '\0';
+            if (*p != ':') {
+                /* No more path components */
+                break;
+            }
+            else {
+                srch = p + 1;
+                p = strchr(srch, ':');
+                if (p == NULL)
+                    p = (char *)(srch + strlen(srch));
+            }
+        }
+    }
     if (_temp_path[0])
         return _temp_path;
     while (_try_envs[i]) {

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/temps.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/temps.c?rev=812059&r1=812058&r2=812059&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/temps.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/temps.c Mon Sep  7 09:34:58 2009
@@ -327,11 +327,37 @@
     return ACR_StrdupW(_E, THROW_NMARK, name);
 }
 
-ACR_DECLARE(const wchar_t *) ACR_TempPathGet(JNIEnv *_E)
+ACR_DECLARE(const wchar_t *) ACR_TempPathGet(JNIEnv *_E, const wchar_t *srch)
 {
     static wchar_t _temp_path[TMP_PATH_MAX] = L"";
     int i = 0;
 
+    if (srch) {
+        wchar_t *p = wcschr(srch, L';');
+        if (p == NULL)
+            p = (wchar_t *)(srch + wcslen(srch));
+        while (p) {
+            size_t part = p - srch + 1;
+            if (part >= TMP_PATH_MAX)
+                break;
+            wcslcpy(_temp_path, srch, part);
+            if (_temp_path[0] && _temp_test(_temp_path)) {
+                ACR_NO_END_SLASHW(_temp_path);
+                break;
+            }
+            _temp_path[0] = L'\0';
+            if (*p != L';') {
+                /* No more path components */
+                break;
+            }
+            else {
+                srch = p + 1;
+                p = wcschr(srch, L';');
+                if (p == NULL)
+                    p = (wchar_t *)(srch + wcslen(srch));
+            }
+        }
+    }
     if (_temp_path[0])
         return _temp_path;
     while (_try_envs[i]) {

Modified: commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c?rev=812059&r1=812058&r2=812059&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c Mon Sep  7 09:34:58 2009
@@ -99,9 +99,12 @@
     int   fd;
     acr_pchar_t *fn;
     fprintf(stdout, "Using Temporary Directory : `" PRINT_PSTR "\'\n",
-            ACR_TempPathGet(NULL));
-
-    fd = ACR_TempFileMake(NULL, ACR_TempPathGet(NULL),
+#if defined(WIN32)
+            ACR_TempPathGet(NULL, "\\foo;.\\bar;;"));
+#else
+            ACR_TempPathGet(NULL, "/foo:./bar::"));
+#endif
+    fd = ACR_TempFileMake(NULL, ACR_TempPathGet(NULL, NULL),
                           STD_PREFIX, 0);
     if (fd < 0)
         failed++;
@@ -112,7 +115,7 @@
             failed++;
     }
 
-    fd = ACR_TempFileMake(NULL, ACR_TempPathGet(NULL),
+    fd = ACR_TempFileMake(NULL, ACR_TempPathGet(NULL, NULL),
                           STD_PREFIX, 1);
     if (fd < 0)
         failed++;
@@ -122,7 +125,7 @@
         if (ACR_IoClose(NULL, fd))
             failed++;
     }
-    fn = ACR_TempDirMake(NULL, ACR_TempPathGet(NULL),
+    fn = ACR_TempDirMake(NULL, ACR_TempPathGet(NULL, NULL),
                          STD_PREFIX);
     if (fn == NULL)
         failed++;