mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 19:48:38 -05:00 
			
		
		
		
	Update
This commit is contained in:
		| @@ -121,7 +121,7 @@ char *realpath(const char *path, char *resolved) | ||||
|  | ||||
|     if (0 == resolved) | ||||
|     { | ||||
|         result = malloc(PATH_MAX * 4); /* sets errno */ | ||||
|         result = malloc(PATH_MAX); /* sets errno */ | ||||
|         if (0 == result) | ||||
|             return 0; | ||||
|     } | ||||
| @@ -132,7 +132,9 @@ char *realpath(const char *path, char *resolved) | ||||
|     WCHAR PathBuf[PATH_MAX]; | ||||
|     WCHAR ResultBuf[PATH_MAX]; | ||||
|     PWSTR ResultBufBgn = &ResultBuf[6]; | ||||
|     if (0 < MultiByteToWideChar(CP_UTF8, 0, path, -1, PathBuf, PATH_MAX)) | ||||
|     if (0 == MultiByteToWideChar(CP_UTF8, 0, path, -1, PathBuf, PATH_MAX)) | ||||
|         err = GetLastError(); | ||||
|     else | ||||
|     { | ||||
|         DWORD len = GetFullPathNameW(PathBuf, PATH_MAX - 6, ResultBufBgn, 0); | ||||
|         if (0 == len) | ||||
| @@ -141,30 +143,32 @@ char *realpath(const char *path, char *resolved) | ||||
|             err = ERROR_INVALID_PARAMETER; | ||||
|         else | ||||
|         { | ||||
|             WideCharToMultiByte(CP_UTF8, 0, ResultBufBgn, -1, result, PATH_MAX * 4, 0, 0); | ||||
|             if (L'\\' == ResultBufBgn[0] && L'\\' == ResultBufBgn[1]) | ||||
|             { | ||||
|                 ResultBufBgn = ResultBuf; | ||||
|                 ResultBufBgn[0] = L'\\'; | ||||
|                 ResultBufBgn[1] = L'\\'; | ||||
|                 ResultBufBgn[2] = L'?'; | ||||
|                 ResultBufBgn[3] = L'\\'; | ||||
|                 ResultBufBgn[4] = L'U'; | ||||
|                 ResultBufBgn[5] = L'N'; | ||||
|                 ResultBufBgn[6] = L'C'; | ||||
|             } | ||||
|             if (0 == WideCharToMultiByte(CP_UTF8, 0, ResultBufBgn, -1, result, PATH_MAX, 0, 0)) | ||||
|                 err = GetLastError(); | ||||
|             else | ||||
|             { | ||||
|                 ResultBufBgn = &ResultBuf[2]; | ||||
|                 ResultBufBgn[0] = L'\\'; | ||||
|                 ResultBufBgn[1] = L'\\'; | ||||
|                 ResultBufBgn[2] = L'?'; | ||||
|                 ResultBufBgn[3] = L'\\'; | ||||
|                 if (L'\\' == ResultBufBgn[0] && L'\\' == ResultBufBgn[1]) | ||||
|                 { | ||||
|                     ResultBufBgn = ResultBuf; | ||||
|                     ResultBufBgn[0] = L'\\'; | ||||
|                     ResultBufBgn[1] = L'\\'; | ||||
|                     ResultBufBgn[2] = L'?'; | ||||
|                     ResultBufBgn[3] = L'\\'; | ||||
|                     ResultBufBgn[4] = L'U'; | ||||
|                     ResultBufBgn[5] = L'N'; | ||||
|                     ResultBufBgn[6] = L'C'; | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     ResultBufBgn = &ResultBuf[2]; | ||||
|                     ResultBufBgn[0] = L'\\'; | ||||
|                     ResultBufBgn[1] = L'\\'; | ||||
|                     ResultBufBgn[2] = L'?'; | ||||
|                     ResultBufBgn[3] = L'\\'; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     else | ||||
|         err = GetLastError(); | ||||
|  | ||||
|     if (0 == err) | ||||
|     { | ||||
| @@ -189,7 +193,7 @@ char *realpath(const char *path, char *resolved) | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| int uncpath(const char *path, WCHAR *buf, int nchar) | ||||
| static int uncpath(const char *path, WCHAR *buf, int nchar) | ||||
| { | ||||
|     PWSTR BufP = 0; | ||||
|     if ('\\' == path[0] && '\\' == path[1]) | ||||
| @@ -221,20 +225,31 @@ int uncpath(const char *path, WCHAR *buf, int nchar) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (BufP) | ||||
|     if (0 == BufP) | ||||
|     { | ||||
|         while (*BufP) | ||||
|         { | ||||
|             if (L'/' == *BufP) | ||||
|                 *BufP = L'\\'; | ||||
|             BufP++; | ||||
|         } | ||||
|         return 1; | ||||
|         if (0 < nchar) | ||||
|             buf[0] = 0; | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     if (0 < nchar) | ||||
|         buf[0] = 0; | ||||
|     return 0; | ||||
|     PWSTR P = BufP; | ||||
|     while (*BufP) | ||||
|     { | ||||
|         if (L'/' == *BufP || L'\\' == *BufP) | ||||
|         { | ||||
|             while (L'/' == BufP[1] || L'\\' == BufP[1]) | ||||
|                 BufP++; | ||||
|         } | ||||
|         if (L'/' == *BufP) | ||||
|             *P = L'\\'; | ||||
|         else if (P != BufP) | ||||
|             *P = *BufP; | ||||
|         BufP++; | ||||
|         P++; | ||||
|     } | ||||
|     if (P != BufP) | ||||
|         *P = 0; | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
| int statvfs(const char *path, struct fuse_statvfs *stbuf) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user