diff --git a/manifest b/manifest
index c955dd6..4f73977 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\scompiler\swarning\sintroduced\sby\sthe\sprevious\scheck-in.
-D 2013-11-07T21:32:16.228
+C Fix\stemporary\sdirectory\sseparator\shandling\sfor\sCygwin.
+D 2013-11-07T22:11:55.758
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in d12e4455cf7a36e42d3949876c1c3b88ff70867a
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -205,7 +205,7 @@
 F src/os.h 4a46270a64e9193af4a0aaa3bc2c66dc07c29b3f
 F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
 F src/os_unix.c 143624d9eabb3b997c59cf594e0d06c56edd43e9
-F src/os_win.c b159b5249d9f70607d961bbdd1dbba789c75812c
+F src/os_win.c cf9fde556e01b5f6f2e664f9abb7a59083e22c6a
 F src/pager.c 2aa4444ffe86e9282d03bc349a4a5e49bd77c0e8
 F src/pager.h f094af9f6ececfaa8a1e93876905a4f34233fb0c
 F src/parse.y 073a8294e1826f1b1656e84806b77e4199f4bb57
@@ -1135,7 +1135,10 @@
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
-P 215307985590c2f3f7aa0d5a0b7799155a506045
-R 71f9cd0b217f1ebad72089e906d8786f
-U drh
-Z 02285a59f788837fde6c69fc94247fe6
+P 404bd98fb41f71d041932d68a908570995825ec1
+R 37545b181f36caed5c7fe5390bfd2bd9
+T *branch * cygDirSep
+T *sym-cygDirSep *
+T -sym-trunk *
+U mistachkin
+Z ed8b65be89adc0112f5f37e7909c811f
diff --git a/manifest.uuid b/manifest.uuid
index 2befe22..5ecadff 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-404bd98fb41f71d041932d68a908570995825ec1
\ No newline at end of file
+9d870d5f0d8f02e5c91396a1f98b5ddb56b40b70
\ No newline at end of file
diff --git a/src/os_win.c b/src/os_win.c
index c6c567c..e329b55 100644
--- a/src/os_win.c
+++ b/src/os_win.c
@@ -117,14 +117,10 @@
 #endif
 
 /*
-** Returns the string that should be used as the directory separator.
+** Returns the character that should be used as the directory separator.
 */
-#ifndef winGetDirDep
-#  ifdef __CYGWIN__
-#    define winGetDirDep()              "/"
-#  else
-#    define winGetDirDep()              "\\"
-#  endif
+#ifndef winGetDirSep
+#  define winGetDirSep()                '\\'
 #endif
 
 /*
@@ -3990,12 +3986,21 @@
 
 /*
 ** This function returns non-zero if the specified UTF-8 string buffer
-** ends with a directory separator character.
+** ends with a directory separator character or one was successfully
+** added to it.
 */
-static int winEndsInDirSep(char *zBuf){
+static int winMakeEndInDirSep(int nBuf, char *zBuf){
   if( zBuf ){
     int nLen = sqlite3Strlen30(zBuf);
-    return nLen>0 && winIsDirSep(zBuf[nLen-1]);
+    if( nLen>0 ){
+      if( winIsDirSep(zBuf[nLen-1]) ){
+        return 1;
+      }else if( nLen+1<nBuf ){
+        zBuf[nLen] = winGetDirSep();
+        zBuf[nLen+1] = '\0';
+        return 1;
+      }
+    }
   }
   return 0;
 }
@@ -4023,7 +4028,7 @@
   ** name for the temporary file.  If this fails, we cannot continue.
   */
   nBuf = pVfs->mxPathname;
-  zBuf = sqlite3MallocZero( nBuf+2 );
+  zBuf = sqlite3MallocZero( nBuf+3 );
   if( !zBuf ){
     OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_NOMEM\n"));
     return SQLITE_IOERR_NOMEM;
@@ -4035,9 +4040,8 @@
   */
   assert( nBuf>30 );
   if( sqlite3_temp_directory ){
-    sqlite3_snprintf(nBuf-30, zBuf, "%s%s", sqlite3_temp_directory,
-                     winEndsInDirSep(sqlite3_temp_directory) ? "" :
-                     winGetDirDep());
+    sqlite3_snprintf(nBuf-30, zBuf, "%s", sqlite3_temp_directory);
+    winMakeEndInDirSep(nBuf-30, zBuf);
   }
 #if defined(__CYGWIN__)
   else{
@@ -4066,8 +4070,8 @@
       if( zDir==0 ) continue;
       /* If the path starts with a drive letter followed by the colon
       ** character, assume it is already a native Win32 path; otherwise,
-      ** it must be converted to a native Win32 path prior via the Cygwin
-      ** API prior to using it.
+      ** it must be converted to a native Win32 path via the Cygwin API
+      ** prior to using it.
       */
       if( winIsDriveLetterAndColon(zDir) ){
         zConverted = winConvertFromUtf8Filename(zDir);
@@ -4078,6 +4082,7 @@
         }
         if( winIsDir(zConverted) ){
           sqlite3_snprintf(nBuf-30, zBuf, "%s", zDir);
+          winMakeEndInDirSep(nBuf-30, zBuf);
           sqlite3_free(zConverted);
           break;
         }
@@ -4112,11 +4117,13 @@
               return SQLITE_IOERR_NOMEM;
             }
             sqlite3_snprintf(nBuf-30, zBuf, "%s", zUtf8);
+            winMakeEndInDirSep(nBuf-30, zBuf);
             sqlite3_free(zUtf8);
             sqlite3_free(zConverted);
             break;
           }else{
             sqlite3_snprintf(nBuf-30, zBuf, "%s", zConverted);
+            winMakeEndInDirSep(nBuf-30, zBuf);
             sqlite3_free(zConverted);
             break;
           }
@@ -4144,6 +4151,7 @@
     zMulti = winUnicodeToUtf8(zWidePath);
     if( zMulti ){
       sqlite3_snprintf(nBuf-30, zBuf, "%s", zMulti);
+      winMakeEndInDirSep(nBuf-30, zBuf);
       sqlite3_free(zMulti);
       sqlite3_free(zWidePath);
     }else{
@@ -4171,6 +4179,7 @@
     zUtf8 = sqlite3_win32_mbcs_to_utf8(zMbcsPath);
     if( zUtf8 ){
       sqlite3_snprintf(nBuf-30, zBuf, "%s", zUtf8);
+      winMakeEndInDirSep(nBuf-30, zBuf);
       sqlite3_free(zUtf8);
     }else{
       sqlite3_free(zBuf);
@@ -4792,8 +4801,8 @@
       return winLogError(SQLITE_CANTOPEN_CONVPATH, (DWORD)errno,
                          "winFullPathname1", zRelative);
     }
-    sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%s%s",
-                     sqlite3_data_directory, winGetDirDep(), zOut);
+    sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%c%s",
+                     sqlite3_data_directory, winGetDirSep(), zOut);
     sqlite3_free(zOut);
   }else{
     if( cygwin_conv_path(CCP_POSIX_TO_WIN_A, zRelative, zFull, nFull)<0 ){
@@ -4815,8 +4824,8 @@
     **       for converting the relative path name to an absolute
     **       one by prepending the data directory and a backslash.
     */
-    sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%s%s",
-                     sqlite3_data_directory, winGetDirDep(), zRelative);
+    sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%c%s",
+                     sqlite3_data_directory, winGetDirSep(), zRelative);
   }else{
     sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s", zRelative);
   }
@@ -4848,8 +4857,8 @@
     **       for converting the relative path name to an absolute
     **       one by prepending the data directory and a backslash.
     */
-    sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%s%s",
-                     sqlite3_data_directory, winGetDirDep(), zRelative);
+    sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%c%s",
+                     sqlite3_data_directory, winGetDirSep(), zRelative);
     return SQLITE_OK;
   }
   zConverted = winConvertFromUtf8Filename(zRelative);
