mirror of
https://github.com/pygos/pkg-utils.git
synced 2024-11-21 20:39:46 +01:00
pkg2sqfs: add command line option to select compressor
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
This commit is contained in:
parent
ac8e457c96
commit
576491eae6
2 changed files with 35 additions and 5 deletions
|
@ -2,6 +2,7 @@
|
||||||
#include "pkg2sqfs.h"
|
#include "pkg2sqfs.h"
|
||||||
|
|
||||||
static struct option long_opts[] = {
|
static struct option long_opts[] = {
|
||||||
|
{ "compressor", required_argument, NULL, 'c' },
|
||||||
{ "block-size", required_argument, NULL, 'b' },
|
{ "block-size", required_argument, NULL, 'b' },
|
||||||
{ "dev-block-size", required_argument, NULL, 'B' },
|
{ "dev-block-size", required_argument, NULL, 'B' },
|
||||||
{ "default-uid", required_argument, NULL, 'u' },
|
{ "default-uid", required_argument, NULL, 'u' },
|
||||||
|
@ -12,7 +13,7 @@ static struct option long_opts[] = {
|
||||||
{ "help", no_argument, NULL, 'h' },
|
{ "help", no_argument, NULL, 'h' },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *short_opts = "b:B:u:g:m:fhV";
|
static const char *short_opts = "c:b:B:u:g:m:fhV";
|
||||||
|
|
||||||
extern char *__progname;
|
extern char *__progname;
|
||||||
|
|
||||||
|
@ -32,16 +33,18 @@ static const char *help_string =
|
||||||
"\n"
|
"\n"
|
||||||
"Possible options:\n"
|
"Possible options:\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
" --compressor, -c <name> Select the compressor to use.\n"
|
||||||
|
" directories (defaults to 'xz').\n"
|
||||||
" --block-size, -b <size> Block size to use for Squashfs image.\n"
|
" --block-size, -b <size> Block size to use for Squashfs image.\n"
|
||||||
" Defaults to %u.\n"
|
" Defaults to %u.\n"
|
||||||
" --dev-block-size, -B <size> Device block size to padd the image to.\n"
|
" --dev-block-size, -B <size> Device block size to padd the image to.\n"
|
||||||
" Defaults to %u.\n"
|
" Defaults to %u.\n"
|
||||||
" --default-uid, -u <valie> Default user ID for implicitly created\n"
|
" --default-uid, -u <valie> Default user ID for implicitly created\n"
|
||||||
" directories (defaults to 0)."
|
" directories (defaults to 0).\n"
|
||||||
" --default-gid, -g <value> Default group ID for implicitly created\n"
|
" --default-gid, -g <value> Default group ID for implicitly created\n"
|
||||||
" directories (defaults to 0)."
|
" directories (defaults to 0).\n"
|
||||||
" --default-mode, -m <value> Default permissions for implicitly created\n"
|
" --default-mode, -m <value> Default permissions for implicitly created\n"
|
||||||
" directories (defaults to 0755)."
|
" directories (defaults to 0755).\n"
|
||||||
" --force, -f Overwrite the output file if it exists.\n"
|
" --force, -f Overwrite the output file if it exists.\n"
|
||||||
" --help, -h Print help text and exit.\n"
|
" --help, -h Print help text and exit.\n"
|
||||||
" --version, -V Print version information and exit.\n"
|
" --version, -V Print version information and exit.\n"
|
||||||
|
@ -85,6 +88,15 @@ static void print_tree(int level, node_t *n)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *compressors[] = {
|
||||||
|
[SQFS_COMP_GZIP] = "gzip",
|
||||||
|
[SQFS_COMP_LZMA] = "lzma",
|
||||||
|
[SQFS_COMP_LZO] = "lzo",
|
||||||
|
[SQFS_COMP_XZ] = "xz",
|
||||||
|
[SQFS_COMP_LZ4] = "lz4",
|
||||||
|
[SQFS_COMP_ZSTD] = "zstd",
|
||||||
|
};
|
||||||
|
|
||||||
static long read_number(const char *name, const char *str, long min, long max)
|
static long read_number(const char *name, const char *str, long min, long max)
|
||||||
{
|
{
|
||||||
long base = 10, result = 0;
|
long base = 10, result = 0;
|
||||||
|
@ -182,6 +194,7 @@ int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
uint32_t blocksize = SQFS_DEFAULT_BLOCK_SIZE, timestamp = 0;
|
uint32_t blocksize = SQFS_DEFAULT_BLOCK_SIZE, timestamp = 0;
|
||||||
int i, outmode = O_WRONLY | O_CREAT | O_EXCL;
|
int i, outmode = O_WRONLY | O_CREAT | O_EXCL;
|
||||||
|
E_SQFS_COMPRESSOR compressor = SQFS_COMP_XZ;
|
||||||
const char *infile, *outfile;
|
const char *infile, *outfile;
|
||||||
int status = EXIT_FAILURE;
|
int status = EXIT_FAILURE;
|
||||||
compressor_stream_t *cmp;
|
compressor_stream_t *cmp;
|
||||||
|
@ -199,6 +212,14 @@ int main(int argc, char **argv)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
switch (i) {
|
switch (i) {
|
||||||
|
case 'c':
|
||||||
|
for (i = SQFS_COMP_MIN; i <= SQFS_COMP_MAX; ++i) {
|
||||||
|
if (strcmp(compressors[i], optarg) == 0) {
|
||||||
|
compressor = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'b':
|
case 'b':
|
||||||
blocksize = read_number("Block size", optarg,
|
blocksize = read_number("Block size", optarg,
|
||||||
1024, 0xFFFFFFFF);
|
1024, 0xFFFFFFFF);
|
||||||
|
@ -226,6 +247,12 @@ int main(int argc, char **argv)
|
||||||
case 'h':
|
case 'h':
|
||||||
printf(help_string, __progname,
|
printf(help_string, __progname,
|
||||||
SQFS_DEFAULT_BLOCK_SIZE, SQFS_DEVBLK_SIZE);
|
SQFS_DEFAULT_BLOCK_SIZE, SQFS_DEVBLK_SIZE);
|
||||||
|
|
||||||
|
fputs("Available compressors:\n", stdout);
|
||||||
|
|
||||||
|
for (i = SQFS_COMP_MIN; i <= SQFS_COMP_MAX; ++i)
|
||||||
|
printf("\t%s\n", compressors[i]);
|
||||||
|
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
case 'V':
|
case 'V':
|
||||||
printf(version_string, __progname,
|
printf(version_string, __progname,
|
||||||
|
@ -254,7 +281,7 @@ int main(int argc, char **argv)
|
||||||
goto out_pkg_close;
|
goto out_pkg_close;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sqfs_super_init(&info.super, timestamp, blocksize, SQFS_COMP_GZIP))
|
if (sqfs_super_init(&info.super, timestamp, blocksize, compressor))
|
||||||
goto out_close;
|
goto out_close;
|
||||||
|
|
||||||
cmp = sqfs_get_compressor(&info.super);
|
cmp = sqfs_get_compressor(&info.super);
|
||||||
|
|
|
@ -123,6 +123,9 @@ typedef enum {
|
||||||
SQFS_COMP_XZ = 4,
|
SQFS_COMP_XZ = 4,
|
||||||
SQFS_COMP_LZ4 = 5,
|
SQFS_COMP_LZ4 = 5,
|
||||||
SQFS_COMP_ZSTD = 6,
|
SQFS_COMP_ZSTD = 6,
|
||||||
|
|
||||||
|
SQFS_COMP_MIN = 1,
|
||||||
|
SQFS_COMP_MAX = 6,
|
||||||
} E_SQFS_COMPRESSOR;
|
} E_SQFS_COMPRESSOR;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
Loading…
Reference in a new issue