summaryrefslogtreecommitdiff
path: root/include/sqfs
diff options
context:
space:
mode:
Diffstat (limited to 'include/sqfs')
-rw-r--r--include/sqfs/dir.h9
-rw-r--r--include/sqfs/inode.h10
-rw-r--r--include/sqfs/meta_reader.h16
-rw-r--r--include/sqfs/meta_writer.h41
-rw-r--r--include/sqfs/table.h34
5 files changed, 53 insertions, 57 deletions
diff --git a/include/sqfs/dir.h b/include/sqfs/dir.h
index a1ca69c..6e47fef 100644
--- a/include/sqfs/dir.h
+++ b/include/sqfs/dir.h
@@ -9,6 +9,8 @@
#include "config.h"
+#include "sqfs/meta_reader.h"
+
#include <stdint.h>
#define SQFS_MAX_DIR_ENT 256
@@ -34,4 +36,11 @@ typedef struct {
uint8_t name[];
} sqfs_dir_index_t;
+/* Returns 0 on success. Internally prints to stderr on failure */
+int meta_reader_read_dir_header(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 *meta_reader_read_dir_ent(meta_reader_t *m);
+
#endif /* SQFS_DIR_H */
diff --git a/include/sqfs/inode.h b/include/sqfs/inode.h
index ac809d3..24889b8 100644
--- a/include/sqfs/inode.h
+++ b/include/sqfs/inode.h
@@ -9,6 +9,8 @@
#include "config.h"
+#include "sqfs/meta_reader.h"
+
#include <stdint.h>
typedef enum {
@@ -128,4 +130,12 @@ typedef struct {
uint8_t extra[];
} sqfs_inode_generic_t;
+
+/* Inode can be freed with a single free() call.
+ The function internally prints error message to stderr on failure. */
+sqfs_inode_generic_t *meta_reader_read_inode(meta_reader_t *ir,
+ sqfs_super_t *super,
+ uint64_t block_start,
+ size_t offset);
+
#endif /* SQFS_INODE_H */
diff --git a/include/sqfs/meta_reader.h b/include/sqfs/meta_reader.h
index 0de7401..75071e7 100644
--- a/include/sqfs/meta_reader.h
+++ b/include/sqfs/meta_reader.h
@@ -10,9 +10,7 @@
#include "config.h"
#include "sqfs/compress.h"
-#include "sqfs/inode.h"
#include "sqfs/data.h"
-#include "sqfs/dir.h"
typedef struct meta_reader_t meta_reader_t;
@@ -37,18 +35,4 @@ void meta_reader_get_position(meta_reader_t *m, uint64_t *block_start,
/* Returns 0 on success. Internally prints to stderr on failure */
int meta_reader_read(meta_reader_t *m, void *data, size_t size);
-/* Inode can be freed with a single free() call.
- The function internally prints error message to stderr on failure. */
-sqfs_inode_generic_t *meta_reader_read_inode(meta_reader_t *ir,
- sqfs_super_t *super,
- uint64_t block_start,
- size_t offset);
-
-/* Returns 0 on success. Internally prints to stderr on failure */
-int meta_reader_read_dir_header(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 *meta_reader_read_dir_ent(meta_reader_t *m);
-
#endif /* META_READER_H */
diff --git a/include/sqfs/meta_writer.h b/include/sqfs/meta_writer.h
index 6c56c93..aeee924 100644
--- a/include/sqfs/meta_writer.h
+++ b/include/sqfs/meta_writer.h
@@ -12,19 +12,6 @@
#include "sqfs/compress.h"
#include "sqfs/id_table.h"
#include "sqfs/data.h"
-#include "fstree.h"
-
-typedef struct {
- tree_node_t *node;
- uint32_t block;
- uint32_t index;
-} idx_ref_t;
-
-typedef struct {
- size_t num_nodes;
- size_t max_nodes;
- idx_ref_t idx_nodes[];
-} dir_index_t;
typedef struct meta_writer_t meta_writer_t;
@@ -56,32 +43,4 @@ void meta_writer_reset(meta_writer_t *m);
returns non-zero on failure. */
int meta_write_write_to_file(meta_writer_t *m);
-/*
- High level helper function that writes squashfs directory entries to
- a meta data writer.
-
- The dir_info_t structure is used to generate the listing and updated
- accordingly (such as writing back the header position and total size).
- A directory index is created on the fly and returned in *index.
- A single free() call is sufficient.
-
- Returns 0 on success. Prints error messages to stderr on failure.
- */
-int meta_writer_write_dir(meta_writer_t *dm, dir_info_t *dir,
- dir_index_t **index);
-
-/*
- High level helper function to serialize a tree_node_t to a squashfs inode
- and write it to a meta data writer.
-
- The inode is written to `im`. If it is a directory node, the directory
- contents are written to `dm` using meta_writer_write_dir. The given
- id_table_t is used to store the uid and gid on the fly and write the
- coresponding indices to the inode structure.
-
- Returns 0 on success. Prints error messages to stderr on failure.
- */
-int meta_writer_write_inode(fstree_t *fs, id_table_t *idtbl, meta_writer_t *im,
- meta_writer_t *dm, tree_node_t *node);
-
#endif /* META_WRITER_H */
diff --git a/include/sqfs/table.h b/include/sqfs/table.h
new file mode 100644
index 0000000..b1b0c2d
--- /dev/null
+++ b/include/sqfs/table.h
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: GPL-3.0-or-later */
+/*
+ * table.h
+ *
+ * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at>
+ */
+#ifndef SQFS_TABLE_H
+#define SQFS_TABLE_H
+
+#include "sqfs/compress.h"
+#include "sqfs/super.h"
+
+#include <stdint.h>
+#include <stddef.h>
+
+/*
+ Convenience function for writing meta data to a SquashFS image
+
+ This function internally creates a meta data writer and writes the given
+ 'data' blob with 'table_size' bytes to disk, neatly partitioned into meta
+ data blocks. For each meta data block, it remembers the 64 bit start address,
+ writes out all addresses to an uncompressed list and returns the location
+ where the address list starts in 'start'.
+
+ Returns 0 on success. Internally prints error messages to stderr.
+ */
+int sqfs_write_table(int outfd, sqfs_super_t *super, compressor_t *cmp,
+ const void *data, size_t table_size, uint64_t *start);
+
+void *sqfs_read_table(int fd, compressor_t *cmp, size_t table_size,
+ uint64_t location, uint64_t lower_limit,
+ uint64_t upper_limit);
+
+#endif /* SQFS_TABLE_H */