From 54c29f3214d9ad43bd0eeab1ff025af8bfbf1309 Mon Sep 17 00:00:00 2001 From: midipix Date: Thu, 30 Jan 2020 18:34:27 -0500 Subject: driver: implemented block-size logic. --- src/driver/tpax_driver_ctx.c | 63 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) (limited to 'src/driver') diff --git a/src/driver/tpax_driver_ctx.c b/src/driver/tpax_driver_ctx.c index 675d836..81c4e34 100644 --- a/src/driver/tpax_driver_ctx.c +++ b/src/driver/tpax_driver_ctx.c @@ -5,6 +5,7 @@ /******************************************************/ #include +#include #include #include #include @@ -84,7 +85,7 @@ static int tpax_driver_usage( "Synopsis:\n" " %s\n" " %s -r\n" - " %s -w [−x format]\n" + " %s -w [−x format] [-b blocksize]\n" " %s -r -w\n\n" "Options:\n", program,program,program,program,program); @@ -192,6 +193,44 @@ static int tpax_driver_usage_write_format( return TPAX_USAGE; } +static int tpax_driver_usage_block_size( + int fdout, + const char * program, + const char * arg, + const struct argv_option ** optv, + struct argv_meta * meta) +{ + tpax_driver_usage( + fdout,program, + arg,optv,meta); + + tpax_dprintf( + fdout, + "`%s' is not a valid positive decimal integer.\n", + arg); + + return TPAX_USAGE; +} + +static int tpax_driver_usage_block_size_range( + int fdout, + const char * program, + const char * arg, + const struct argv_option ** optv, + struct argv_meta * meta) +{ + tpax_driver_usage( + fdout,program, + arg,optv,meta); + + tpax_dprintf( + fdout, + "`%s' is outside the specified range of 512 to 32256.\n", + arg); + + return TPAX_USAGE; +} + static int tpax_driver_error_not_implemented( int fdout, const char * program, @@ -267,6 +306,7 @@ int tpax_get_driver_ctx( size_t nunits; const char * program; int fddst; + const char * ch; (void)envp; @@ -334,6 +374,27 @@ int tpax_get_driver_ctx( cctx.drvflags |= TPAX_DRIVER_WRITE_FORMAT_RUSTAR; break; + + case TAG_BLKSIZE: + ch = (entry->arg[0] == '+') + ? &entry->arg[1] + : entry->arg; + + for (; *ch; ch++) + if ((*ch < '0') || (*ch > '9')) + return tpax_driver_usage_block_size( + fdctx->fdout, + program,entry->arg, + optv,meta); + + cctx.blksize = atoi(entry->arg); + + if ((cctx.blksize < 512) || (cctx.blksize > 32256)) + return tpax_driver_usage_block_size_range( + fdctx->fdout, + program,entry->arg, + optv,meta); + break; } } else { operand = entry; -- cgit v1.2.3