diff options
37 files changed, 195 insertions, 85 deletions
diff --git a/include/sqfs/block_processor.h b/include/sqfs/block_processor.h index bde0a2e..97bfd34 100644 --- a/include/sqfs/block_processor.h +++ b/include/sqfs/block_processor.h @@ -8,6 +8,7 @@ #define SFQS_BLOCK_PROCESSOR_H #include "config.h" +#include "sqfs/predef.h" #include "sqfs/compress.h" enum { @@ -67,13 +68,14 @@ typedef int (*sqfs_block_cb)(void *user, sqfs_block_t *blk); extern "C" { #endif +SQFS_API sqfs_block_processor_t *sqfs_block_processor_create(size_t max_block_size, sqfs_compressor_t *cmp, unsigned int num_workers, void *user, sqfs_block_cb callback); -void sqfs_block_processor_destroy(sqfs_block_processor_t *proc); +SQFS_API void sqfs_block_processor_destroy(sqfs_block_processor_t *proc); /* Add a block to be processed. Returns non-zero on error and prints a message @@ -85,22 +87,22 @@ void sqfs_block_processor_destroy(sqfs_block_processor_t *proc); Even on failure, the workers may still be running and sqfs_block_processor_finish must be called before cleaning up. */ -int sqfs_block_processor_enqueue(sqfs_block_processor_t *proc, - sqfs_block_t *block); +SQFS_API int sqfs_block_processor_enqueue(sqfs_block_processor_t *proc, + sqfs_block_t *block); /* Wait for the compressor workers to finish. Returns zero on success, non-zero if an internal error occoured or one of the block callbacks returned a non-zero value. */ -int sqfs_block_processor_finish(sqfs_block_processor_t *proc); +SQFS_API int sqfs_block_processor_finish(sqfs_block_processor_t *proc); /* Convenience function to process a data block. Returns 0 on success, prints to stderr on failure. */ -int sqfs_block_process(sqfs_block_t *block, sqfs_compressor_t *cmp, - uint8_t *scratch, size_t scratch_size); +SQFS_API int sqfs_block_process(sqfs_block_t *block, sqfs_compressor_t *cmp, + uint8_t *scratch, size_t scratch_size); #ifdef __cplusplus } diff --git a/include/sqfs/compress.h b/include/sqfs/compress.h index c826c84..27c603d 100644 --- a/include/sqfs/compress.h +++ b/include/sqfs/compress.h @@ -14,6 +14,7 @@ #include <stddef.h> #include <stdint.h> +#include "sqfs/predef.h" #include "sqfs/super.h" typedef struct sqfs_compressor_t sqfs_compressor_t; @@ -132,16 +133,18 @@ typedef enum { extern "C" { #endif -int sqfs_compressor_config_init(sqfs_compressor_config_t *cfg, - E_SQFS_COMPRESSOR id, - size_t block_size, uint16_t flags); +SQFS_API int sqfs_compressor_config_init(sqfs_compressor_config_t *cfg, + E_SQFS_COMPRESSOR id, + size_t block_size, uint16_t flags); -bool sqfs_compressor_exists(E_SQFS_COMPRESSOR id); +SQFS_API bool sqfs_compressor_exists(E_SQFS_COMPRESSOR id); +SQFS_API sqfs_compressor_t *sqfs_compressor_create(const sqfs_compressor_config_t *cfg); -const char *sqfs_compressor_name_from_id(E_SQFS_COMPRESSOR id); +SQFS_API const char *sqfs_compressor_name_from_id(E_SQFS_COMPRESSOR id); +SQFS_API int sqfs_compressor_id_from_name(const char *name, E_SQFS_COMPRESSOR *out); #ifdef __cplusplus diff --git a/include/sqfs/dir.h b/include/sqfs/dir.h index c57831c..3a65102 100644 --- a/include/sqfs/dir.h +++ b/include/sqfs/dir.h @@ -9,6 +9,7 @@ #include "config.h" +#include "sqfs/predef.h" #include "sqfs/meta_reader.h" #include "sqfs/meta_writer.h" @@ -44,33 +45,34 @@ extern "C" { #endif /* Returns 0 on success. Internally prints to stderr on failure */ -int sqfs_meta_reader_read_dir_header(sqfs_meta_reader_t *m, - sqfs_dir_header_t *hdr); +SQFS_API int sqfs_meta_reader_read_dir_header(sqfs_meta_reader_t *m, + sqfs_dir_header_t *hdr); /* Entry can be freed with a single free() call. The function internally prints to stderr on failure */ -sqfs_dir_entry_t *sqfs_meta_reader_read_dir_ent(sqfs_meta_reader_t *m); +SQFS_API sqfs_dir_entry_t *sqfs_meta_reader_read_dir_ent(sqfs_meta_reader_t *m); -sqfs_dir_writer_t *sqfs_dir_writer_create(sqfs_meta_writer_t *dm); +SQFS_API sqfs_dir_writer_t *sqfs_dir_writer_create(sqfs_meta_writer_t *dm); -void sqfs_dir_writer_destroy(sqfs_dir_writer_t *writer); +SQFS_API void sqfs_dir_writer_destroy(sqfs_dir_writer_t *writer); -int sqfs_dir_writer_begin(sqfs_dir_writer_t *writer); +SQFS_API int sqfs_dir_writer_begin(sqfs_dir_writer_t *writer); -int sqfs_dir_writer_add_entry(sqfs_dir_writer_t *writer, const char *name, - uint32_t inode_num, uint64_t inode_ref, - mode_t mode); +SQFS_API int sqfs_dir_writer_add_entry(sqfs_dir_writer_t *writer, + const char *name, + uint32_t inode_num, uint64_t inode_ref, + mode_t mode); -int sqfs_dir_writer_end(sqfs_dir_writer_t *writer); +SQFS_API int sqfs_dir_writer_end(sqfs_dir_writer_t *writer); -size_t sqfs_dir_writer_get_size(sqfs_dir_writer_t *writer); +SQFS_API size_t sqfs_dir_writer_get_size(sqfs_dir_writer_t *writer); -uint64_t sqfs_dir_writer_get_dir_reference(sqfs_dir_writer_t *writer); +SQFS_API uint64_t sqfs_dir_writer_get_dir_reference(sqfs_dir_writer_t *writer); -size_t sqfs_dir_writer_get_index_size(sqfs_dir_writer_t *writer); +SQFS_API size_t sqfs_dir_writer_get_index_size(sqfs_dir_writer_t *writer); -int sqfs_dir_writer_write_index(sqfs_dir_writer_t *writer, - sqfs_meta_writer_t *im); +SQFS_API int sqfs_dir_writer_write_index(sqfs_dir_writer_t *writer, + sqfs_meta_writer_t *im); #ifdef __cplusplus } diff --git a/include/sqfs/id_table.h b/include/sqfs/id_table.h index 0e652ec..f8b3b5c 100644 --- a/include/sqfs/id_table.h +++ b/include/sqfs/id_table.h @@ -12,7 +12,8 @@ #include <stdint.h> #include <stddef.h> -#include "compress.h" +#include "sqfs/predef.h" +#include "sqfs/compress.h" typedef struct sqfs_id_table_t sqfs_id_table_t; @@ -21,26 +22,27 @@ extern "C" { #endif /* Prints error message to stderr on failure. */ -sqfs_id_table_t *sqfs_id_table_create(void); +SQFS_API sqfs_id_table_t *sqfs_id_table_create(void); -void sqfs_id_table_destroy(sqfs_id_table_t *tbl); +SQFS_API void sqfs_id_table_destroy(sqfs_id_table_t *tbl); /* Resolve a 32 bit to a 16 bit table index. Returns 0 on success. Internally prints errors to stderr. */ -int sqfs_id_table_id_to_index(sqfs_id_table_t *tbl, uint32_t id, uint16_t *out); +SQFS_API int sqfs_id_table_id_to_index(sqfs_id_table_t *tbl, uint32_t id, + uint16_t *out); /* Write an ID table to a SquashFS image. Returns 0 on success. Internally prints error message to stderr. */ -int sqfs_id_table_write(sqfs_id_table_t *tbl, int outfd, sqfs_super_t *super, - sqfs_compressor_t *cmp); +SQFS_API int sqfs_id_table_write(sqfs_id_table_t *tbl, int outfd, + sqfs_super_t *super, sqfs_compressor_t *cmp); /* Read an ID table from a SquashFS image. Returns 0 on success. Internally prints error messages to stderr. */ -int sqfs_id_table_read(sqfs_id_table_t *tbl, int fd, sqfs_super_t *super, - sqfs_compressor_t *cmp); +SQFS_API int sqfs_id_table_read(sqfs_id_table_t *tbl, int fd, + sqfs_super_t *super, sqfs_compressor_t *cmp); -int sqfs_id_table_index_to_id(const sqfs_id_table_t *tbl, uint16_t index, - uint32_t *out); +SQFS_API int sqfs_id_table_index_to_id(const sqfs_id_table_t *tbl, + uint16_t index, uint32_t *out); #ifdef __cplusplus } diff --git a/include/sqfs/inode.h b/include/sqfs/inode.h index d693aec..37a088c 100644 --- a/include/sqfs/inode.h +++ b/include/sqfs/inode.h @@ -9,6 +9,7 @@ #include "config.h" +#include "sqfs/predef.h" #include "sqfs/meta_reader.h" #include "sqfs/meta_writer.h" @@ -138,13 +139,14 @@ extern "C" { /* Inode can be freed with a single free() call. The function internally prints error message to stderr on failure. */ +SQFS_API sqfs_inode_generic_t *sqfs_meta_reader_read_inode(sqfs_meta_reader_t *ir, sqfs_super_t *super, uint64_t block_start, size_t offset); -int sqfs_meta_writer_write_inode(sqfs_meta_writer_t *iw, - sqfs_inode_generic_t *n); +SQFS_API int sqfs_meta_writer_write_inode(sqfs_meta_writer_t *iw, + sqfs_inode_generic_t *n); #ifdef __cplusplus } diff --git a/include/sqfs/meta_reader.h b/include/sqfs/meta_reader.h index 6f0d184..1e5e027 100644 --- a/include/sqfs/meta_reader.h +++ b/include/sqfs/meta_reader.h @@ -9,6 +9,7 @@ #include "config.h" +#include "sqfs/predef.h" #include "sqfs/compress.h" #include "sqfs/data.h" @@ -24,21 +25,24 @@ extern "C" { Start offset and limit can be specified to do bounds checking against a subregion of the filesystem image. */ -sqfs_meta_reader_t *sqfs_meta_reader_create(int fd, sqfs_compressor_t *cmp, - uint64_t start, uint64_t limit); +SQFS_API sqfs_meta_reader_t *sqfs_meta_reader_create(int fd, + sqfs_compressor_t *cmp, + uint64_t start, + uint64_t limit); -void sqfs_meta_reader_destroy(sqfs_meta_reader_t *m); +SQFS_API void sqfs_meta_reader_destroy(sqfs_meta_reader_t *m); /* Returns 0 on success. Internally prints to stderr on failure */ -int sqfs_meta_reader_seek(sqfs_meta_reader_t *m, uint64_t block_start, - size_t offset); +SQFS_API int sqfs_meta_reader_seek(sqfs_meta_reader_t *m, uint64_t block_start, + size_t offset); -void sqfs_meta_reader_get_position(sqfs_meta_reader_t *m, - uint64_t *block_start, - size_t *offset); +SQFS_API void sqfs_meta_reader_get_position(sqfs_meta_reader_t *m, + uint64_t *block_start, + size_t *offset); /* Returns 0 on success. Internally prints to stderr on failure */ -int sqfs_meta_reader_read(sqfs_meta_reader_t *m, void *data, size_t size); +SQFS_API int sqfs_meta_reader_read(sqfs_meta_reader_t *m, void *data, + size_t size); #ifdef __cplusplus } diff --git a/include/sqfs/meta_writer.h b/include/sqfs/meta_writer.h index bb14993..3611984 100644 --- a/include/sqfs/meta_writer.h +++ b/include/sqfs/meta_writer.h @@ -9,6 +9,7 @@ #include "config.h" +#include "sqfs/predef.h" #include "sqfs/compress.h" #include "sqfs/id_table.h" #include "sqfs/data.h" @@ -24,31 +25,32 @@ extern "C" { If keep_in_mem is true, the blocks are collected in memory and must be explicitly flushed to disk using meta_write_write_to_file. */ -sqfs_meta_writer_t *sqfs_meta_writer_create(int fd, sqfs_compressor_t *cmp, - bool keep_in_mem); +SQFS_API sqfs_meta_writer_t *sqfs_meta_writer_create(int fd, + sqfs_compressor_t *cmp, + bool keep_in_mem); -void sqfs_meta_writer_destroy(sqfs_meta_writer_t *m); +SQFS_API void sqfs_meta_writer_destroy(sqfs_meta_writer_t *m); /* Compress and flush the currently unfinished block to disk. Returns 0 on success, internally prints error message to stderr on failure */ -int sqfs_meta_writer_flush(sqfs_meta_writer_t *m); +SQFS_API int sqfs_meta_writer_flush(sqfs_meta_writer_t *m); /* Returns 0 on success. Prints error message to stderr on failure. */ -int sqfs_meta_writer_append(sqfs_meta_writer_t *m, const void *data, - size_t size); +SQFS_API int sqfs_meta_writer_append(sqfs_meta_writer_t *m, const void *data, + size_t size); /* Query the current block start position and offset within the block */ -void sqfs_meta_writer_get_position(const sqfs_meta_writer_t *m, - uint64_t *block_start, - uint32_t *offset); +SQFS_API void sqfs_meta_writer_get_position(const sqfs_meta_writer_t *m, + uint64_t *block_start, + uint32_t *offset); /* Reset all internal state, including the current block start position. */ -void sqfs_meta_writer_reset(sqfs_meta_writer_t *m); +SQFS_API void sqfs_meta_writer_reset(sqfs_meta_writer_t *m); /* If created with keep_in_mem true, write the collected blocks to disk. Does not flush the current block. Writes error messages to stderr and returns non-zero on failure. */ -int sqfs_meta_write_write_to_file(sqfs_meta_writer_t *m); +SQFS_API int sqfs_meta_write_write_to_file(sqfs_meta_writer_t *m); #ifdef __cplusplus } diff --git a/include/sqfs/predef.h b/include/sqfs/predef.h new file mode 100644 index 0000000..210f306 --- /dev/null +++ b/include/sqfs/predef.h @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * predef.h + * + * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> + */ +#ifndef SQFS_PREDEF_H +#define SQFS_PREDEF_H + +#if defined(_WIN32) || defined(__CYGWIN__) + #ifdef SQFS_BUILDING_DLL + #if defined(__GNUC__) || defined(__clang__) + #define SQFS_API __attribute__ ((dllexport)) + #else + #define SQFS_API __declspec(dllexport) + #endif + #else + #if defined(__GNUC__) || defined(__clang__) + #define SQFS_API __attribute__ ((dllimport)) + #else + #define SQFS_API __declspec(dllimport) + #endif + #endif + + #define SQFS_INTERNAL +#else + #if defined(__GNUC__) || defined(__clang__) + #define SQFS_API __attribute__ ((visibility ("default"))) + #define SQFS_INTERNAL __attribute__ ((visibility ("hidden"))) + #else + #define SQFS_API + #define SQFS_INTERNAL + #endif +#endif + +#endif /* SQFS_PREDEF_H */ diff --git a/include/sqfs/super.h b/include/sqfs/super.h index 0df1691..6593555 100644 --- a/include/sqfs/super.h +++ b/include/sqfs/super.h @@ -9,6 +9,8 @@ #include "config.h" +#include "sqfs/predef.h" + #include <stdint.h> #include <stddef.h> @@ -71,14 +73,15 @@ extern "C" { #endif /* Returns 0 on success. Prints error messages to stderr on failure. */ -int sqfs_super_init(sqfs_super_t *super, size_t block_size, uint32_t mtime, - E_SQFS_COMPRESSOR compressor); +SQFS_API int sqfs_super_init(sqfs_super_t *super, size_t block_size, + uint32_t mtime, + E_SQFS_COMPRESSOR compressor); /* Returns 0 on success. Prints error messages to stderr on failure. */ -int sqfs_super_write(sqfs_super_t *super, int fd); +SQFS_API int sqfs_super_write(sqfs_super_t *super, int fd); /* Returns 0 on success. Prints error messages to stderr on failure. */ -int sqfs_super_read(sqfs_super_t *super, int fd); +SQFS_API int sqfs_super_read(sqfs_super_t *super, int fd); #ifdef __cplusplus } diff --git a/include/sqfs/table.h b/include/sqfs/table.h index b5eeb54..0bd3112 100644 --- a/include/sqfs/table.h +++ b/include/sqfs/table.h @@ -7,6 +7,7 @@ #ifndef SQFS_TABLE_H #define SQFS_TABLE_H +#include "sqfs/predef.h" #include "sqfs/compress.h" #include "sqfs/super.h" @@ -28,12 +29,14 @@ extern "C" { Returns 0 on success. Internally prints error messages to stderr. */ -int sqfs_write_table(int outfd, sqfs_super_t *super, sqfs_compressor_t *cmp, - const void *data, size_t table_size, uint64_t *start); - -void *sqfs_read_table(int fd, sqfs_compressor_t *cmp, size_t table_size, - uint64_t location, uint64_t lower_limit, - uint64_t upper_limit); +SQFS_API int sqfs_write_table(int outfd, sqfs_super_t *super, + sqfs_compressor_t *cmp, + const void *data, size_t table_size, + uint64_t *start); + +SQFS_API void *sqfs_read_table(int fd, sqfs_compressor_t *cmp, + size_t table_size, uint64_t location, + uint64_t lower_limit, uint64_t upper_limit); #ifdef __cplusplus } diff --git a/include/sqfs/xattr.h b/include/sqfs/xattr.h index 5350534..d1b3bdd 100644 --- a/include/sqfs/xattr.h +++ b/include/sqfs/xattr.h @@ -9,6 +9,7 @@ #include "config.h" +#include "sqfs/predef.h" #include "sqfs/compress.h" #include <stdbool.h> @@ -54,28 +55,31 @@ extern "C" { #endif /* Get a prefix string from the ID or NULL if unknown */ -const char *sqfs_get_xattr_prefix(E_SQFS_XATTR_TYPE id); +SQFS_API const char *sqfs_get_xattr_prefix(E_SQFS_XATTR_TYPE id); /* Get id from xattr key prefix or -1 if not supported */ -int sqfs_get_xattr_prefix_id(const char *key); +SQFS_API int sqfs_get_xattr_prefix_id(const char *key); /* Check if a given xattr key can be encoded in squashfs at all. */ -bool sqfs_has_xattr(const char *key); +SQFS_API bool sqfs_has_xattr(const char *key); -void sqfs_xattr_reader_destroy(sqfs_xattr_reader_t *xr); +SQFS_API void sqfs_xattr_reader_destroy(sqfs_xattr_reader_t *xr); -sqfs_xattr_reader_t *sqfs_xattr_reader_create(int sqfsfd, sqfs_super_t *super, - sqfs_compressor_t *cmp); +SQFS_API sqfs_xattr_reader_t *sqfs_xattr_reader_create(int sqfsfd, + sqfs_super_t *super, + sqfs_compressor_t *cmp); -int sqfs_xattr_reader_get_desc(sqfs_xattr_reader_t *xr, uint32_t idx, - sqfs_xattr_id_t *desc); +SQFS_API int sqfs_xattr_reader_get_desc(sqfs_xattr_reader_t *xr, uint32_t idx, + sqfs_xattr_id_t *desc); -int sqfs_xattr_reader_seek_kv(sqfs_xattr_reader_t *xr, - const sqfs_xattr_id_t *desc); +SQFS_API int sqfs_xattr_reader_seek_kv(sqfs_xattr_reader_t *xr, + const sqfs_xattr_id_t *desc); +SQFS_API sqfs_xattr_value_t *sqfs_xattr_reader_read_value(sqfs_xattr_reader_t *xr, const sqfs_xattr_entry_t *key); +SQFS_API sqfs_xattr_entry_t *sqfs_xattr_reader_read_key(sqfs_xattr_reader_t *xr); #ifdef __cplusplus diff --git a/include/str_table.h b/include/str_table.h index 634854a..1f836cc 100644 --- a/include/str_table.h +++ b/include/str_table.h @@ -7,6 +7,8 @@ #ifndef STR_TABLE_H #define STR_TABLE_H +#include "sqfs/predef.h" + typedef struct str_bucket_t { struct str_bucket_t *next; char *str; @@ -28,22 +30,24 @@ typedef struct { /* `size` is the number of hash table buckets to use internally. Returns 0 on success. Internally writes errors to stderr. */ -int str_table_init(str_table_t *table, size_t size); +SQFS_INTERNAL int str_table_init(str_table_t *table, size_t size); -void str_table_cleanup(str_table_t *table); +SQFS_INTERNAL void str_table_cleanup(str_table_t *table); /* Resolve a string to an incremental, unique ID Returns 0 on success. Internally writes errors to stderr. */ +SQFS_INTERNAL int str_table_get_index(str_table_t *table, const char *str, size_t *idx); /* Resolve a unique ID to the string it represents. Returns NULL if the ID is unknown, i.e. out of bounds. */ +SQFS_INTERNAL const char *str_table_get_string(str_table_t *table, size_t index); -void str_table_reset_ref_count(str_table_t *table); +SQFS_INTERNAL void str_table_reset_ref_count(str_table_t *table); -void str_table_add_ref(str_table_t *table, size_t index); +SQFS_INTERNAL void str_table_add_ref(str_table_t *table, size_t index); -size_t str_table_get_ref_count(str_table_t *table, size_t index); +SQFS_INTERNAL size_t str_table_get_ref_count(str_table_t *table, size_t index); #endif /* STR_TABLE_H */ diff --git a/include/util.h b/include/util.h index 651a958..93b8a04 100644 --- a/include/util.h +++ b/include/util.h @@ -8,6 +8,7 @@ #define UTIL_H #include "config.h" +#include "sqfs/predef.h" #include <sys/types.h> #include <stdint.h> @@ -52,6 +53,7 @@ typedef struct sparse_map_t { on success. Writes to stderr on failure using 'errstr' as a perror style error prefix. */ +SQFS_INTERNAL int write_data(const char *errstr, int fd, const void *data, size_t size); /* @@ -60,11 +62,13 @@ int write_data(const char *errstr, int fd, const void *data, size_t size); on success. Writes to stderr on failure using 'errstr' as a perror style error prefix. */ +SQFS_INTERNAL int read_data(const char *errstr, int fd, void *buffer, size_t size); /* Similar to read_data but wrapps pread() instead of read(). */ +SQFS_INTERNAL int read_data_at(const char *errstr, off_t location, int fd, void *buffer, size_t size); @@ -74,6 +78,7 @@ int read_data_at(const char *errstr, off_t location, Prints out version information. The program name is extracted from the BSD style __progname global variable. */ +SQFS_INTERNAL void print_version(void); /* @@ -82,21 +87,26 @@ void print_version(void); Returns 0 on success. */ +SQFS_INTERNAL int mkdir_p(const char *path); /* Returns 0 on success. On failure, prints error message to stderr. */ +SQFS_INTERNAL int pushd(const char *path); /* Same as pushd, but the string doesn't have to be null-terminated. */ +SQFS_INTERNAL int pushdn(const char *path, size_t len); /* Returns 0 on success. On failure, prints error message to stderr. */ +SQFS_INTERNAL int popd(void); /* Write zero bytes to an output file to padd it to specified block size. Returns 0 on success. On failure, prints error message to stderr. */ +SQFS_INTERNAL int padd_file(int outfd, uint64_t size, size_t blocksize); /* @@ -107,12 +117,15 @@ int padd_file(int outfd, uint64_t size, size_t blocksize); Iternally checks for arithmetic overflows when allocating the combined thing. */ +SQFS_INTERNAL void *alloc_flex(size_t base_size, size_t item_size, size_t nmemb); /* Basically the same as calloc, but *ALWAYS* does overflow checking */ +SQFS_INTERNAL void *alloc_array(size_t item_size, size_t nmemb); /* allocates len + 1 (for the null-terminator) and does overflow checking */ +SQFS_INTERNAL void *alloc_string(size_t len); #endif /* UTIL_H */ diff --git a/lib/Makemodule.am b/lib/Makemodule.am index bdb23a8..c71c1f8 100644 --- a/lib/Makemodule.am +++ b/lib/Makemodule.am @@ -47,7 +47,7 @@ libsquashfs_la_SOURCES += include/sqfs/meta_reader.h include/sqfs/id_table.h libsquashfs_la_SOURCES += include/sqfs/compress.h include/sqfs/block_processor.h libsquashfs_la_SOURCES += include/sqfs/super.h include/sqfs/inode.h libsquashfs_la_SOURCES += include/sqfs/dir.h include/sqfs/xattr.h -libsquashfs_la_SOURCES += include/sqfs/table.h +libsquashfs_la_SOURCES += include/sqfs/table.h include/sqfs/predef.h libsquashfs_la_SOURCES += lib/sqfs/meta_writer.c lib/sqfs/super.c libsquashfs_la_SOURCES += lib/sqfs/id_table.c lib/sqfs/dir_writer.c libsquashfs_la_SOURCES += lib/sqfs/write_table.c include/highlevel.h @@ -110,7 +110,7 @@ sqfsinclude_HEADERS += include/sqfs/meta_reader.h include/sqfs/id_table.h sqfsinclude_HEADERS += include/sqfs/compress.h include/sqfs/block_processor.h sqfsinclude_HEADERS += include/sqfs/super.h include/sqfs/inode.h sqfsinclude_HEADERS += include/sqfs/dir.h include/sqfs/xattr.h -sqfsinclude_HEADERS += include/sqfs/table.h +sqfsinclude_HEADERS += include/sqfs/table.h include/sqfs/predef.h noinst_LIBRARIES += libfstree.a libtar.a libsqfshelper.a noinst_LTLIBRARIES += libutil.la diff --git a/lib/sqfs/block_processor.c b/lib/sqfs/block_processor.c index 5579eb5..3a57d14 100644 --- a/lib/sqfs/block_processor.c +++ b/lib/sqfs/block_processor.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/block_processor.h" diff --git a/lib/sqfs/block_processor_parallel.c b/lib/sqfs/block_processor_parallel.c index 5d505e1..d81ba91 100644 --- a/lib/sqfs/block_processor_parallel.c +++ b/lib/sqfs/block_processor_parallel.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/block_processor.h" diff --git a/lib/sqfs/comp/compressor.c b/lib/sqfs/comp/compressor.c index fef238a..005dbd4 100644 --- a/lib/sqfs/comp/compressor.c +++ b/lib/sqfs/comp/compressor.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include <string.h> diff --git a/lib/sqfs/comp/gzip.c b/lib/sqfs/comp/gzip.c index 39e101f..e80073d 100644 --- a/lib/sqfs/comp/gzip.c +++ b/lib/sqfs/comp/gzip.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include <stdbool.h> diff --git a/lib/sqfs/comp/internal.h b/lib/sqfs/comp/internal.h index 1f76a45..117bb82 100644 --- a/lib/sqfs/comp/internal.h +++ b/lib/sqfs/comp/internal.h @@ -9,21 +9,29 @@ #include "config.h" +#include "sqfs/predef.h" #include "sqfs/compress.h" #include "util.h" +SQFS_INTERNAL int sqfs_generic_write_options(int fd, const void *data, size_t size); +SQFS_INTERNAL int sqfs_generic_read_options(int fd, void *data, size_t size); +SQFS_INTERNAL sqfs_compressor_t *xz_compressor_create(const sqfs_compressor_config_t *cfg); +SQFS_INTERNAL sqfs_compressor_t *gzip_compressor_create(const sqfs_compressor_config_t *cfg); +SQFS_INTERNAL sqfs_compressor_t *lzo_compressor_create(const sqfs_compressor_config_t *cfg); +SQFS_INTERNAL sqfs_compressor_t *lz4_compressor_create(const sqfs_compressor_config_t *cfg); +SQFS_INTERNAL sqfs_compressor_t *zstd_compressor_create(const sqfs_compressor_config_t *cfg); #endif /* INTERNAL_H */ diff --git a/lib/sqfs/comp/lz4.c b/lib/sqfs/comp/lz4.c index ddfab5c..0893b34 100644 --- a/lib/sqfs/comp/lz4.c +++ b/lib/sqfs/comp/lz4.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include <stdbool.h> diff --git a/lib/sqfs/comp/lzo.c b/lib/sqfs/comp/lzo.c index 8512dfa..b01bf20 100644 --- a/lib/sqfs/comp/lzo.c +++ b/lib/sqfs/comp/lzo.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include <stdbool.h> diff --git a/lib/sqfs/comp/xz.c b/lib/sqfs/comp/xz.c index 6598de7..1f98a25 100644 --- a/lib/sqfs/comp/xz.c +++ b/lib/sqfs/comp/xz.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include <stdbool.h> diff --git a/lib/sqfs/comp/zstd.c b/lib/sqfs/comp/zstd.c index bd90207..8a1dbf3 100644 --- a/lib/sqfs/comp/zstd.c +++ b/lib/sqfs/comp/zstd.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include <stdbool.h> diff --git a/lib/sqfs/dir_writer.c b/lib/sqfs/dir_writer.c index 2fb655a..6ff9541 100644 --- a/lib/sqfs/dir_writer.c +++ b/lib/sqfs/dir_writer.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/inode.h" diff --git a/lib/sqfs/id_table.c b/lib/sqfs/id_table.c index 6d76f52..cf1fd9b 100644 --- a/lib/sqfs/id_table.c +++ b/lib/sqfs/id_table.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/id_table.h" diff --git a/lib/sqfs/meta_reader.c b/lib/sqfs/meta_reader.c index ac71d1c..c95360d 100644 --- a/lib/sqfs/meta_reader.c +++ b/lib/sqfs/meta_reader.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/meta_reader.h" diff --git a/lib/sqfs/meta_writer.c b/lib/sqfs/meta_writer.c index af73de3..8bea3a7 100644 --- a/lib/sqfs/meta_writer.c +++ b/lib/sqfs/meta_writer.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/meta_writer.h" diff --git a/lib/sqfs/process_block.c b/lib/sqfs/process_block.c index 5233ce1..9e1e8cc 100644 --- a/lib/sqfs/process_block.c +++ b/lib/sqfs/process_block.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/block_processor.h" diff --git a/lib/sqfs/read_inode.c b/lib/sqfs/read_inode.c index 90cc060..c249c95 100644 --- a/lib/sqfs/read_inode.c +++ b/lib/sqfs/read_inode.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/inode.h" diff --git a/lib/sqfs/read_super.c b/lib/sqfs/read_super.c index b9525b3..5bd5e50 100644 --- a/lib/sqfs/read_super.c +++ b/lib/sqfs/read_super.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/super.h" diff --git a/lib/sqfs/read_table.c b/lib/sqfs/read_table.c index fec71a5..d2664d4 100644 --- a/lib/sqfs/read_table.c +++ b/lib/sqfs/read_table.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/meta_reader.h" diff --git a/lib/sqfs/readdir.c b/lib/sqfs/readdir.c index 310929c..1c1082a 100644 --- a/lib/sqfs/readdir.c +++ b/lib/sqfs/readdir.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/dir.h" diff --git a/lib/sqfs/super.c b/lib/sqfs/super.c index 728c0e1..5541501 100644 --- a/lib/sqfs/super.c +++ b/lib/sqfs/super.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/super.h" diff --git a/lib/sqfs/write_inode.c b/lib/sqfs/write_inode.c index 408e428..7714da9 100644 --- a/lib/sqfs/write_inode.c +++ b/lib/sqfs/write_inode.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/inode.h" diff --git a/lib/sqfs/write_table.c b/lib/sqfs/write_table.c index 513a38d..a5b4c69 100644 --- a/lib/sqfs/write_table.c +++ b/lib/sqfs/write_table.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/meta_writer.h" diff --git a/lib/sqfs/xattr.c b/lib/sqfs/xattr.c index 378c53b..dd8f2ee 100644 --- a/lib/sqfs/xattr.c +++ b/lib/sqfs/xattr.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/xattr.h" diff --git a/lib/sqfs/xattr_reader.c b/lib/sqfs/xattr_reader.c index 60ffc58..11933d8 100644 --- a/lib/sqfs/xattr_reader.c +++ b/lib/sqfs/xattr_reader.c @@ -4,6 +4,7 @@ * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ +#define SQFS_BUILDING_DLL #include "config.h" #include "sqfs/meta_reader.h" |