mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 19:48:38 -05:00 
			
		
		
		
	dll: fuse: getpath
This commit is contained in:
		| @@ -212,6 +212,28 @@ int open(const char *path, int oflag, ...) | ||||
|     return (int)(intptr_t)h; | ||||
| } | ||||
|  | ||||
| int fgetpath(int fd, char *buf, size_t size) | ||||
| { | ||||
|     HANDLE h = (HANDLE)(intptr_t)fd; | ||||
|     union | ||||
|     { | ||||
|         FILE_NAME_INFO V; | ||||
|         UINT8 B[FIELD_OFFSET(FILE_NAME_INFO, FileName) + FSP_FSCTL_TRANSACT_PATH_SIZEMAX]; | ||||
|     } NameInfo; | ||||
|  | ||||
|     if (!GetFileInformationByHandleEx(h, FileNormalizedNameInfo, &NameInfo, sizeof NameInfo)) | ||||
|         return error(); | ||||
|  | ||||
|     FspPosixEncodeWindowsPath(NameInfo.V.FileName, NameInfo.V.FileNameLength / sizeof(WCHAR)); | ||||
|     size = WideCharToMultiByte(CP_UTF8, 0, | ||||
|         NameInfo.V.FileName, NameInfo.V.FileNameLength / sizeof(WCHAR), buf, (int)(size - 1), 0, 0); | ||||
|     if (0 == size) | ||||
|         return error(); | ||||
|     buf[size] = '\0'; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int fstat(int fd, struct fuse_stat *stbuf) | ||||
| { | ||||
|     HANDLE h = (HANDLE)(intptr_t)fd; | ||||
| @@ -303,6 +325,22 @@ int close(int fd) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int getpath(const char *path, char *buf, size_t size) | ||||
| { | ||||
|     HANDLE h = CreateFileA(path, | ||||
|         FILE_READ_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, | ||||
|         0, | ||||
|         OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); | ||||
|     if (INVALID_HANDLE_VALUE == h) | ||||
|         return error(); | ||||
|  | ||||
|     int res = fgetpath((int)(intptr_t)h, buf, size); | ||||
|  | ||||
|     CloseHandle(h); | ||||
|  | ||||
|     return res; | ||||
| } | ||||
|  | ||||
| int lstat(const char *path, struct fuse_stat *stbuf) | ||||
| { | ||||
|     HANDLE h = CreateFileA(path, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user