added some basic parsing for args
This commit is contained in:
parent
898c1a5b46
commit
b42108386a
@ -1,6 +1,8 @@
|
|||||||
#define DISPLAY(...) fprintf(stderr, __VA_ARGS__)
|
#define DISPLAY(...) fprintf(stderr, __VA_ARGS__)
|
||||||
#define FILE_CHUNK_SIZE 4 << 20
|
#define FILE_CHUNK_SIZE 4 << 20
|
||||||
#define MAX_NUM_JOBS 30;
|
#define MAX_NUM_JOBS 30;
|
||||||
|
#define stdinmark "/*stdin*\\"
|
||||||
|
#define stdoutmark "/*stdout*\\"
|
||||||
typedef unsigned char BYTE;
|
typedef unsigned char BYTE;
|
||||||
|
|
||||||
#include <stdio.h> /* fprintf */
|
#include <stdio.h> /* fprintf */
|
||||||
@ -125,7 +127,8 @@ static adaptCCtx* createCCtx(unsigned numJobs, const char* const outFilename)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
FILE* dstFile = fopen(outFilename, "wb");
|
unsigned const stdoutUsed = !strcmp(outFilename, stdoutmark);
|
||||||
|
FILE* dstFile = stdoutUsed ? stdout : fopen(outFilename, "wb");
|
||||||
if (dstFile == NULL) {
|
if (dstFile == NULL) {
|
||||||
DISPLAY("Error: could not open output file\n");
|
DISPLAY("Error: could not open output file\n");
|
||||||
freeCCtx(ctx);
|
freeCCtx(ctx);
|
||||||
@ -267,7 +270,8 @@ static int createCompressionJob(adaptCCtx* ctx, BYTE* data, size_t srcSize)
|
|||||||
static int compressFilename(const char* const srcFilename, const char* const dstFilename)
|
static int compressFilename(const char* const srcFilename, const char* const dstFilename)
|
||||||
{
|
{
|
||||||
BYTE* const src = malloc(FILE_CHUNK_SIZE);
|
BYTE* const src = malloc(FILE_CHUNK_SIZE);
|
||||||
FILE* const srcFile = fopen(srcFilename, "rb");
|
unsigned const stdinUsed = !strcmp(srcFilename, stdinmark);
|
||||||
|
FILE* const srcFile = stdinUsed ? stdin : fopen(srcFilename, "rb");
|
||||||
size_t const numJobs = MAX_NUM_JOBS;
|
size_t const numJobs = MAX_NUM_JOBS;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
adaptCCtx* ctx = NULL;
|
adaptCCtx* ctx = NULL;
|
||||||
@ -341,9 +345,28 @@ cleanup:
|
|||||||
/* return 0 if successful, else return error */
|
/* return 0 if successful, else return error */
|
||||||
int main(int argCount, const char* argv[])
|
int main(int argCount, const char* argv[])
|
||||||
{
|
{
|
||||||
if (argCount < 3) {
|
const char* inFilename = stdinmark;
|
||||||
DISPLAY("Error: not enough arguments\n");
|
const char* outFilename = stdoutmark;
|
||||||
return 1;
|
unsigned nextArgumentIsOutFilename = 0;
|
||||||
|
int argNum;
|
||||||
|
for (argNum=1; argNum<argCount; argNum++) {
|
||||||
|
const char* argument = argv[argNum];
|
||||||
|
if (argument[0]=='-') {
|
||||||
|
/* parse argument */
|
||||||
|
switch (argument[1]) {
|
||||||
|
case 'o':
|
||||||
|
argument+=2;
|
||||||
|
nextArgumentIsOutFilename = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nextArgumentIsOutFilename) {
|
||||||
|
outFilename = argument;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
inFilename = argument;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return compressFilename(argv[1], argv[2]);
|
return compressFilename(inFilename, outFilename);
|
||||||
}
|
}
|
||||||
|
@ -1,36 +1,36 @@
|
|||||||
make clean multi
|
make clean multi
|
||||||
|
|
||||||
./multi tests/test2048.pdf tmp.zst
|
./multi tests/test2048.pdf -otmp.zst
|
||||||
zstd -d tmp.zst
|
zstd -d tmp.zst
|
||||||
diff tmp tests/test2048.pdf
|
diff tmp tests/test2048.pdf
|
||||||
echo "diff test complete"
|
echo "diff test complete"
|
||||||
rm tmp*
|
rm tmp*
|
||||||
|
|
||||||
./multi tests/test512.pdf tmp.zst
|
./multi tests/test512.pdf -otmp.zst
|
||||||
zstd -d tmp.zst
|
zstd -d tmp.zst
|
||||||
diff tmp tests/test512.pdf
|
diff tmp tests/test512.pdf
|
||||||
echo "diff test complete"
|
echo "diff test complete"
|
||||||
rm tmp*
|
rm tmp*
|
||||||
|
|
||||||
./multi tests/test64.pdf tmp.zst
|
./multi tests/test64.pdf -otmp.zst
|
||||||
zstd -d tmp.zst
|
zstd -d tmp.zst
|
||||||
diff tmp tests/test64.pdf
|
diff tmp tests/test64.pdf
|
||||||
echo "diff test complete"
|
echo "diff test complete"
|
||||||
rm tmp*
|
rm tmp*
|
||||||
|
|
||||||
./multi tests/test16.pdf tmp.zst
|
./multi tests/test16.pdf -otmp.zst
|
||||||
zstd -d tmp.zst
|
zstd -d tmp.zst
|
||||||
diff tmp tests/test16.pdf
|
diff tmp tests/test16.pdf
|
||||||
echo "diff test complete"
|
echo "diff test complete"
|
||||||
rm tmp*
|
rm tmp*
|
||||||
|
|
||||||
./multi tests/test4.pdf tmp.zst
|
./multi tests/test4.pdf -otmp.zst
|
||||||
zstd -d tmp.zst
|
zstd -d tmp.zst
|
||||||
diff tmp tests/test4.pdf
|
diff tmp tests/test4.pdf
|
||||||
echo "diff test complete"
|
echo "diff test complete"
|
||||||
rm tmp*
|
rm tmp*
|
||||||
|
|
||||||
./multi tests/test.pdf tmp.zst
|
./multi tests/test.pdf -otmp.zst
|
||||||
zstd -d tmp.zst
|
zstd -d tmp.zst
|
||||||
diff tmp tests/test.pdf
|
diff tmp tests/test.pdf
|
||||||
echo "diff test complete"
|
echo "diff test complete"
|
||||||
|
Loading…
Reference in New Issue
Block a user