Index: lang/objective-cplusplus/i3/trunk/src/os-windows/CygwinPty.cpp
===================================================================
--- lang/objective-cplusplus/i3/trunk/src/os-windows/CygwinPty.cpp (revision 34447)
+++ lang/objective-cplusplus/i3/trunk/src/os-windows/CygwinPty.cpp (revision 34664)
@@ -3,4 +3,35 @@
 
 namespace i3 {
+template <size_t Size>
+bool query_registory(HKEY root, const TCHAR* SubKey, const TCHAR* value, TCHAR (&retval)[Size]) {
+    HKEY hkResult = NULL;
+    LONG result = RegOpenKeyEx(
+        root,
+        SubKey,
+        0,
+        KEY_EXECUTE,
+        &hkResult);
+    
+    if (result != ERROR_SUCCESS) {
+        return false;
+    }
+
+    DWORD type = 0;
+    DWORD cbCd = sizeof(retval);
+    result = RegQueryValueEx(
+        hkResult,
+        value,
+        NULL,
+        &type,
+        (BYTE*)retval,
+        &cbCd);
+
+    if (result != ERROR_SUCCESS) {
+        return false;
+    }
+    return true;
+}
+
+
 CygwinPty::CygwinPty() {
 }
@@ -35,37 +66,9 @@
 
     TCHAR cd[2000] = {};
-    {
-        HKEY hkResult = NULL;
-        {
-            const TCHAR SubKey[] = _T("SOFTWARE\\Cygnus Solutions\\Cygwin\\mounts v2\\/");
-            LONG result = RegOpenKeyEx(
-                              HKEY_LOCAL_MACHINE,
-                              SubKey,
-                              0,
-                              KEY_EXECUTE,
-                              &hkResult);
-
-            if (result != ERROR_SUCCESS) {
-                return false;
-            }
-        }
-        {
-            DWORD type = 0;
-            DWORD cbCd = sizeof(cd);
-            LONG result = RegQueryValueEx(
-                              hkResult,
-                              _T("native"),
-                              NULL,
-                              &type,
-                              (BYTE*)cd,
-                              &cbCd);
-
-            if (result != ERROR_SUCCESS) {
-                return false;
-            }
-        }
-        if (_tcscat_s(cd, _T("\\bin")) != 0) {
-            return false;
-        }
+    if (!query_registory(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Cygwin\\setup"), TEXT("rootdir"), retval) &&
+        !query_registory(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Wow6432Node\\Cygwin\\setup"), TEXT("rootdir"), retval) &&
+        !query_registory(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Cygnus Solutions\\Cygwin\\mounts v2\\/"), TEXT("native"), retval) &&
+        !query_registory(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Wow6432Node\\Cygnus Solutions\\Cygwin\\mounts v2\\/"), TEXT("native"), retval)) {
+        return false;
     }
 
@@ -81,6 +84,6 @@
 
     if (!DuplicateHandle(GetCurrentProcess(),hMyStdInput ,GetCurrentProcess(),NULL, 0, FALSE, DUPLICATE_SAME_ACCESS) ||
-            !DuplicateHandle(GetCurrentProcess(),hMyStdOutput,GetCurrentProcess(),NULL, 0, FALSE, DUPLICATE_SAME_ACCESS) ||
-            !DuplicateHandle(GetCurrentProcess(),hMyStdError ,GetCurrentProcess(),NULL, 0, FALSE, DUPLICATE_SAME_ACCESS)) {
+        !DuplicateHandle(GetCurrentProcess(),hMyStdOutput,GetCurrentProcess(),NULL, 0, FALSE, DUPLICATE_SAME_ACCESS) ||
+        !DuplicateHandle(GetCurrentProcess(),hMyStdError ,GetCurrentProcess(),NULL, 0, FALSE, DUPLICATE_SAME_ACCESS)) {
 
         return false;
Index: lang/objective-cplusplus/i3/trunk/am/fakecygpty.am
===================================================================
--- lang/objective-cplusplus/i3/trunk/am/fakecygpty.am (revision 31935)
+++ lang/objective-cplusplus/i3/trunk/am/fakecygpty.am (revision 34664)
@@ -15,7 +15,9 @@
 	${mkdir_p} tmp
 	${mkdir_p} ${top_srcdir}/windows
-	${CC} -O3 -DNDEBUG -c ${top_srcdir}/src/os-windows/fakecygpty.c
+#	${CC} -O3 -DNDEBUG -c ${top_srcdir}/src/os-windows/fakecygpty.c
+	gcc -O3 -DNDEBUG -c ${top_srcdir}/src/os-windows/fakecygpty.c
 	windres -i ${top_srcdir}/windows/resources/fakecygpty.rc -o fakecygpty-resource.o
-	${CC} -O3 -DNDEBUG -s fakecygpty.o fakecygpty-resource.o -o tmp/fakecygpty.exe
+#	${CC} -O3 -DNDEBUG -s fakecygpty.o fakecygpty-resource.o -o tmp/fakecygpty.exe
+	gcc -O3 -DNDEBUG -s fakecygpty.o fakecygpty-resource.o -o tmp/fakecygpty.exe
 	lzma --compress --keep tmp/fakecygpty.exe
 	lzma --test            tmp/fakecygpty.exe.lzma
