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

/* Примитивы диска для 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