You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
2.2 KiB
39 lines
2.2 KiB
/* Примитивы диска для storage и клиентского worker. На POSIX пути разрешаются |
|
* относительно открытого каталога через *at/O_NOFOLLOW. Windows удерживает каталоги |
|
* без FILE_SHARE_DELETE и отвергает reparse points; имена преобразуются UTF-8→UTF-16. |
|
* fd принадлежит вызывающему; read/write работают по 64-битному смещению. */ |
|
#ifndef MEMBER_FILES_DISK_H |
|
#define MEMBER_FILES_DISK_H |
|
#include "protocol.h" |
|
#include "../../lib/platform_compat.h" |
|
|
|
struct mf_disk_info { uint64_t size, mtime, identity[6]; uint8_t type; }; |
|
struct mf_disk_root { |
|
char path[2048]; |
|
#ifdef _WIN32 |
|
HANDLE handle; |
|
#else |
|
int fd; |
|
#endif |
|
}; |
|
int mf_disk_root_open(struct mf_disk_root* root, const char* path); |
|
void mf_disk_root_close(struct mf_disk_root* root); |
|
int mf_disk_open(struct mf_disk_root* root, const char* path, int create, int writable, int* fd); |
|
int mf_disk_stat(struct mf_disk_root* root, const char* path, struct mf_disk_info* info); |
|
int mf_disk_info(int fd, struct mf_disk_info* info); |
|
/* created, если не NULL, показывает факт создания даже при последующей ошибке sync. */ |
|
int mf_disk_mkdir(struct mf_disk_root* root, const char* path, int* created); |
|
int mf_disk_remove(struct mf_disk_root* root, const char* path, int directory); |
|
int mf_disk_rename(struct mf_disk_root* root, const char* from, const char* to); |
|
typedef int (*mf_disk_entry_fn)(void* arg, const char* name, const struct mf_disk_info* info); |
|
int mf_disk_list(struct mf_disk_root* root, const char* path, mf_disk_entry_fn cb, void* arg); |
|
int mf_disk_read(int fd, uint64_t offset, void* data, size_t size); |
|
int mf_disk_write(int fd, uint64_t offset, const void* data, size_t size); |
|
int mf_disk_resize(int fd, uint64_t size); |
|
int mf_disk_sync(int fd); |
|
int mf_disk_close(int fd); |
|
int mf_disk_local_open(const char* path, int create, int* fd); |
|
int mf_disk_local_publish(const char* from, const char* to); |
|
int mf_disk_local_remove(const char* path); |
|
int mf_disk_hash(int fd, uint64_t size, uint8_t hash[32]); |
|
#endif
|
|
|