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/02 09:24:58 UTC

svn commit: r810389 - in /commons/sandbox/runtime/trunk/src/main/native: include/arch/windows/acr_arch_private.h os/win32/env.c os/win32/temps.c

Author: mturk
Date: Wed Sep  2 07:24:58 2009
New Revision: 810389

URL: http://svn.apache.org/viewvc?rev=810389&view=rev
Log:
Add private wide char version of envvar functions

Modified:
    commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch_private.h
    commons/sandbox/runtime/trunk/src/main/native/os/win32/env.c
    commons/sandbox/runtime/trunk/src/main/native/os/win32/temps.c

Modified: commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch_private.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch_private.h?rev=810389&r1=810388&r2=810389&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch_private.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch_private.h Wed Sep  2 07:24:58 2009
@@ -120,7 +120,7 @@
 #define ACR_HeapFree(M)     HeapFree(dll_heap_handle, 0, (M))
 
 /**
- * Utility functions from wutilc.
+ * Utility functions from wutil.c
  */
 wchar_t *res_name_from_filenamew(int, wchar_t *, const wchar_t *);
 int      utf8_to_unicode_path(wchar_t *, size_t, const char *);
@@ -128,6 +128,12 @@
 wchar_t *x_wcsdup_utf8(const char *);
 char    *x_strdup_utf8(const wchar_t *);
 
+/**
+ * Wide char envvar functions from env.c
+ */
+wchar_t *acr_EnvGetW(const wchar_t *);
+int      acr_EnvSetW(const wchar_t *, const wchar_t *);
+int      acr_EnvDeleteW(const wchar_t *);
 
 #ifdef __cplusplus
 }

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/env.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/env.c?rev=810389&r1=810388&r2=810389&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/env.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/env.c Wed Sep  2 07:24:58 2009
@@ -177,3 +177,72 @@
     return 0;
 }
 
+wchar_t *acr_EnvGetW(const wchar_t *var)
+{
+    return _wgetenv(var);
+}
+
+int acr_EnvSetW(const wchar_t *var, const wchar_t *val)
+{
+    wchar_t *estr;
+    size_t   elen;
+
+    if (!var || !*var || !val) {
+        errno = EINVAL;
+        return -1;
+    }
+    elen = (wcslen(var) + wcslen(val) + 2) * sizeof(wchar_t);
+    estr = (wchar_t *)malloc(elen);
+    if (!estr)                /* not much we can do if no memory */
+        return -1;
+
+    /* Override the existing setting by forcibly defining the var */
+#if _MSC_VER >= 1300
+    swprintf(estr, elen, L"%s=%s", var, val);
+#else
+    swprintf(estr,       L"%s=%s", var, val);
+#endif
+    if (_msvcrt_wputenv(estr)) {
+        int se = errno;
+        free(estr);
+        errno = se;
+        return -1;
+    }
+
+    free(estr);
+    return 0;
+}
+
+int acr_EnvDeleteW(const wchar_t *var)
+{
+    wchar_t *estr;
+    size_t   elen;
+
+    if (!var || !*var) {
+        errno = EINVAL;
+        return -1;
+    }
+    if (_wgetenv(var) == NULL)
+        return 0;             /* no work */
+    elen = (wcslen(var) + 2) * sizeof(wchar_t);
+    estr = (wchar_t *)malloc(elen);
+    if (!estr)                /* not much we can do if no memory */
+        return -1;
+
+    /* Override the existing setting by forcibly defining the var */
+#if _MSC_VER >= 1300
+    swprintf(estr, elen, L"%s=", var);
+#else
+    swprintf(estr,       L"%s=", var);
+#endif
+    if (_msvcrt_wputenv(estr)) {
+        int se = errno;
+        free(estr);
+        errno = se;
+        return -1;
+    }
+
+    free(estr);
+    return 0;
+}
+

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=810389&r1=810388&r2=810389&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 Wed Sep  2 07:24:58 2009
@@ -261,7 +261,7 @@
     if (_temp_path[0])
         return _temp_path;
     while (_try_envs[i]) {
-        wchar_t *val = _wgetenv(_try_envs[i]);
+        wchar_t *val = acr_EnvGetW(_try_envs[i]);
         if (val && *val) {
             if (wcslen(val) < TMP_PATH_MAX) {
                 if (_temp_test(val)) {
@@ -288,7 +288,7 @@
     }
     else {
         /* Finally try the users %USERPROFILE% */
-        wchar_t *val = _wgetenv(L"USERPROFILE");
+        wchar_t *val = acr_EnvGetW(L"USERPROFILE");
         if (val && *val) {
             if (wcslen(val) < TMP_PATH_MAX) {
                 if (_temp_test(val))