X-Git-Url: https://git.sven.stormbind.net/?p=sven%2Fexfatprogs.git;a=blobdiff_plain;f=include%2Flibexfat.h;h=0357d770bdd5835684e40745b524a5f69aae6579;hp=56053b465ccc15810483cd2f681f20cb60c31f05;hb=refs%2Ftags%2Fupstream%2F1.1.1;hpb=f7feb8f190bd23ec253bf9fe705738049d9cedd7 diff --git a/include/libexfat.h b/include/libexfat.h index 56053b4..0357d77 100644 --- a/include/libexfat.h +++ b/include/libexfat.h @@ -28,6 +28,8 @@ #define EXFAT_MAX_NUM_CLUSTER (0xFFFFFFF5) +#define DEFAULT_BOUNDARY_ALIGNMENT (1024*1024) + #define DEFAULT_SECTOR_SIZE (512) #define VOLUME_LABEL_BUFFER_SIZE (VOLUME_LABEL_MAX_LEN*MB_LEN_MAX+1) @@ -35,6 +37,12 @@ /* Upcase tabel macro */ #define EXFAT_UPCASE_TABLE_SIZE (5836) +/* Flags for tune.exfat and exfatlabel */ +#define EXFAT_GET_VOLUME_LABEL 0x01 +#define EXFAT_SET_VOLUME_LABEL 0x02 +#define EXFAT_GET_VOLUME_SERIAL 0x03 +#define EXFAT_SET_VOLUME_SERIAL 0x04 + enum { BOOT_SEC_IDX = 0, EXBOOT_SEC_IDX, @@ -47,11 +55,13 @@ enum { struct exfat_blk_dev { int dev_fd; + unsigned long long offset; unsigned long long size; unsigned int sector_size; unsigned int sector_size_bits; unsigned long long num_sectors; unsigned int num_clusters; + unsigned int cluster_size; }; struct exfat_user_input { @@ -59,9 +69,12 @@ struct exfat_user_input { bool writeable; unsigned int cluster_size; unsigned int sec_per_clu; + unsigned int boundary_align; + bool pack_bitmap; bool quick; __u16 volume_label[VOLUME_LABEL_MAX_LEN]; int volume_label_len; + unsigned int volume_serial; }; void show_version(void); @@ -79,9 +92,28 @@ int exfat_get_blk_dev_info(struct exfat_user_input *ui, ssize_t exfat_read(int fd, void *buf, size_t size, off_t offset); ssize_t exfat_write(int fd, void *buf, size_t size, off_t offset); +size_t exfat_utf16_len(const __le16 *str, size_t max_size); ssize_t exfat_utf16_enc(const char *in_str, __u16 *out_str, size_t out_size); ssize_t exfat_utf16_dec(const __u16 *in_str, size_t in_len, char *out_str, size_t out_size); +off_t exfat_get_root_entry_offset(struct exfat_blk_dev *bd); +int exfat_show_volume_label(struct exfat_blk_dev *bd, off_t root_clu_off); +int exfat_set_volume_label(struct exfat_blk_dev *bd, + char *label_input, off_t root_clu_off); +int exfat_read_sector(struct exfat_blk_dev *bd, void *buf, + unsigned int sec_off); +int exfat_write_sector(struct exfat_blk_dev *bd, void *buf, + unsigned int sec_off); +int exfat_write_checksum_sector(struct exfat_blk_dev *bd, + unsigned int checksum, bool is_backup); +char *exfat_conv_volume_label(struct exfat_dentry *vol_entry); +int exfat_show_volume_serial(struct exfat_blk_dev *bd, + struct exfat_user_input *ui); +int exfat_set_volume_serial(struct exfat_blk_dev *bd, + struct exfat_user_input *ui); +unsigned int exfat_clus_to_blk_dev_off(struct exfat_blk_dev *bd, + unsigned int clu_off, unsigned int clu); + /* * Exfat Print @@ -93,19 +125,19 @@ extern unsigned int print_level; #define EXFAT_INFO (2) #define EXFAT_DEBUG (3) -#define exfat_msg(level, fmt, ...) \ - do { \ - if (print_level >= level) { \ - if (print_level == EXFAT_INFO) \ - printf(fmt, ##__VA_ARGS__); \ - else \ - printf("[%s:%4d] " fmt, \ - __func__, __LINE__, ##__VA_ARGS__); \ - } \ - } while (0) \ - -#define exfat_err(fmt, ...) exfat_msg(EXFAT_ERROR, fmt, ##__VA_ARGS__) -#define exfat_info(fmt, ...) exfat_msg(EXFAT_INFO, fmt, ##__VA_ARGS__) -#define exfat_debug(fmt, ...) exfat_msg(EXFAT_DEBUG, fmt, ##__VA_ARGS__) +#define exfat_msg(level, dir, fmt, ...) \ + do { \ + if (print_level >= level) { \ + fprintf(dir, fmt, ##__VA_ARGS__); \ + } \ + } while (0) \ + +#define exfat_err(fmt, ...) exfat_msg(EXFAT_ERROR, stderr, \ + fmt, ##__VA_ARGS__) +#define exfat_info(fmt, ...) exfat_msg(EXFAT_INFO, stdout, \ + fmt, ##__VA_ARGS__) +#define exfat_debug(fmt, ...) exfat_msg(EXFAT_DEBUG, stdout, \ + "[%s:%4d] " fmt, __func__, \ + __LINE__, ##__VA_ARGS__) #endif /* !_LIBEXFAT_H */