This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] [MinGW] PR libgcj/29151 Unconditionally create UNICODE environment


Mohan Embar wrote:
Hi All,

This fixes PR libgcj/29151. We were specifying the
CREATE_UNICODE_ENVIRONMENT for the CreateProcess()
call, but were not creating one except for UNICODE
builds.

This is for the 4.2 branch. I would have committed
it without asking except that I don't know whether
we're allowed to commit things here at the moment.

Was there any progress in committing it? I think there won't be much feedback for the patch because it's a mingw one and most main developers don't care about mingw. I tested it and it looks good to me.
The 4.2 branch is - as far as I know - only open for regressions. So it should only be committed to the trunk. The trunk is the working version 4.3, right?



thanks for your work Marco


-- Mohan
http://www.thisiscool.com/
http://www.animalsong.org/

2006-11-17 Mohan Embar <gnustuff@thisiscool.com>

	PR libgcj/29151:
	* java/lang/natWin32Process.cc (startProcess): Unconditionally
	create a UNICODE environment for CreateProcess call.

Index: java/lang/natWin32Process.cc
===================================================================
--- java/lang/natWin32Process.cc (revision 118954)
+++ java/lang/natWin32Process.cc (working copy)
@@ -240,8 +240,10 @@
}
*cmdLineCurPos = _T('\0');
- // Get the environment, if any.
- LPTSTR env = NULL;
+ // Get the environment, if any. Unconditionally
+ // create a UNICODE environment, even on ANSI
+ // builds.
+ LPWSTR env = NULL;
if (envp)
{
elts = elements (envp);
@@ -250,22 +252,22 @@
for (int i = 0; i < envp->length; ++i)
envLen += (elts[i]->length() + 1);
- env = (LPTSTR) _Jv_Malloc ((envLen + 1) * sizeof(TCHAR));
+ env = (LPWSTR) _Jv_Malloc ((envLen + 1) * sizeof(WCHAR));
int j = 0;
for (int i = 0; i < envp->length; ++i)
{
- jint len = elts[i]->length();
+ jstring elt = elts[i];
+ jint len = elt->length();
- JV_TEMP_STRING_WIN32(thiselt, elts[i]);
- _tcscpy(env + j, thiselt);
+ wcsncpy(env + j, (LPCWSTR) JvGetStringChars(elt), len);
j += len;
- // Skip past the null terminator that _tcscpy just inserted.
- j++;
+ // Insert the null terminator and skip past it.
+ env[j++] = 0;
}
- *(env + j) = _T('\0');
+ *(env + j) = 0;
}
// Get the working directory path, if specified.






Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]