1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright 2019 Google LLC 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun #include <stdbool.h> 6*4882a593Smuzhiyun #include <sys/stat.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include <include/uapi/linux/incrementalfs.h> 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0])) 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #define __packed __attribute__((__packed__)) 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #ifdef __LP64__ 15*4882a593Smuzhiyun #define ptr_to_u64(p) ((__u64)p) 16*4882a593Smuzhiyun #else 17*4882a593Smuzhiyun #define ptr_to_u64(p) ((__u64)(__u32)p) 18*4882a593Smuzhiyun #endif 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #define SHA256_DIGEST_SIZE 32 21*4882a593Smuzhiyun #define INCFS_MAX_MTREE_LEVELS 8 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun unsigned int rnd(unsigned int max, unsigned int *seed); 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun int remove_dir(const char *dir); 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun int drop_caches(void); 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun int mount_fs(const char *mount_dir, const char *backing_dir, 30*4882a593Smuzhiyun int read_timeout_ms); 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun int mount_fs_opt(const char *mount_dir, const char *backing_dir, 33*4882a593Smuzhiyun const char *opt, bool remount); 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun int get_file_bmap(int cmd_fd, int ino, unsigned char *buf, int buf_size); 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun int get_file_signature(int fd, unsigned char *buf, int buf_size); 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun int emit_node(int fd, char *filename, int *ino_out, int parent_ino, 40*4882a593Smuzhiyun size_t size, mode_t mode, char *attr); 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun int emit_file(int fd, const char *dir, const char *filename, 43*4882a593Smuzhiyun incfs_uuid_t *id_out, size_t size, const char *attr); 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun int crypto_emit_file(int fd, const char *dir, const char *filename, 46*4882a593Smuzhiyun incfs_uuid_t *id_out, size_t size, const char *root_hash, 47*4882a593Smuzhiyun const char *add_data); 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun loff_t get_file_size(const char *name); 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun int open_commands_file(const char *mount_dir); 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun int open_log_file(const char *mount_dir); 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun int open_blocks_written_file(const char *mount_dir); 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun int wait_for_pending_reads(int fd, int timeout_ms, 58*4882a593Smuzhiyun struct incfs_pending_read_info *prs, int prs_count); 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun int wait_for_pending_reads2(int fd, int timeout_ms, 61*4882a593Smuzhiyun struct incfs_pending_read_info2 *prs, int prs_count); 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun char *concat_file_name(const char *dir, const char *file); 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun void sha256(const char *data, size_t dsize, char *hash); 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun void md5(const char *data, size_t dsize, char *hash); 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun int delete_dir_tree(const char *path); 70