--- distcc-2.7/src/tempfile.c	2003-06-16 04:14:28.000000000 +0100
+++ distcc-2.7-new/src/tempfile.c	2003-06-20 14:15:24.000000000 +0100
@@ -87,11 +87,37 @@
 static const char *dcc_get_tmp_top(void)
 {
     const char *d;
+    static char mangled_tmp[256];
+    int len;
+    const char* default_tmp = "c:/tmp";
 
     d = getenv("TMPDIR");
+	
     /* some sanity checks */
-    if (!d || d[0] == '\0' || d[0] != '/' || d[1] == '\0') {
-        return "/tmp";
+    if(!d || d[0] == '\0' ) {
+        return default_tmp;
+    }
+    /* skip Cygwins's /cygdrive/ stuff at the start of the path and turn it into a DOS-like full path */
+    if (!strncmp(d, "/cygdrive/", 10) ) {
+        len = strlen(d);
+        if ( len >= strlen("/cygdrive/c") && len <= (256-1)) {
+            strcpy(mangled_tmp,d);
+            /* string will now start after /cygdrive */
+            d = &mangled_tmp[9];
+            /* shuffle the / after /cygdrive forwards and put a : in its place */
+            mangled_tmp[9] = mangled_tmp[10];
+            mangled_tmp[10] = ':';
+            /* trap returning just c: by adding a / */
+            if (mangled_tmp[11] != '/') {
+                mangled_tmp[11] = '/';
+                mangled_tmp[12] = '\0';
+            }
+            return d;
+        }
+    }
+    /* some more sanity checks */
+    if (d[0] != '/' || d[1] == '\0') {
+        return default_tmp;
     } else {
         return d;
     }
