Code:
int ArgHasIssue( int a, int num, char *argv[] )
{
char *arg = (a >= 0) ? argv[a] : NULL;
char *val = (arg && num) ? argv[a+num] : NULL;
ECHO
(
l_alloc.errors,
fprintf
(
l_alloc.errors,
"ArgHasIssue( %d, %d, %p ) arg = '%s', val = '%s'\n",
a,
num,
(void*)argv,
arg ? arg : argv[0],
val
)
);
if ( !arg )
return 0;
if ( !val )
{
val = strchr( arg, '=' );
if ( val )
++val;
}
if ( strstr( arg, "--q-zlib" ) )
{
quiet_zlib = true;
return 0;
}
if ( strstr( arg, "--verbose" ) )
{
SetVerbose( val );
l_alloc.errors = l_alloc.verbose;
return 0;
}
if ( strstr( arg, "--detailed" ) )
{
if ( !l_alloc.verbose )
{
SetVerbose( val );
l_alloc.errors = l_alloc.verbose;
}
l_alloc.detailed = l_alloc.verbose;
return 0;
}
if ( arg[1] == 'f' )
{
if ( !val )
{
ECHO
(
l_alloc.errors,
fprintf( l_alloc.errors, "No path declared '%s'\n", val )
)
return EINVAL;
}
if ( access(val, 0) != 0 )
{
ECHO
(
l_alloc.errors,
fprintf( l_alloc.errors, "Couldn't find '%s'\n", val )
)
return EACCES;
}
image_file = val;
return 0;
}
return EINVAL;
}
int ArgHadIssue( int err, int a, int num, char *argv[] )
{
int stop = a + num;
FILE *errors = l_alloc.errors;
ECHO( errors, ECHO_ERR( errors, err ) );
ECHO( errors, fprintf( errors, "Invalid argument/s: " ) );
do fprintf( errors, " %s", argv[a++] ); while ( a < stop );
fprintf( errors, "\nUsage: APP [--verbose,--detailed,-f PATH]\n" );
return EXIT_FAILURE;
}
int ProcessArgv( int argc, char **argv )
{
int a, i = -1, num = 0, err;
ECHO( l_alloc.errors, fprintf( l_alloc.errors, "ProcessArgv( %d, %p )\n", argc, (void*)argv ) );
for ( a = 0; a < argc; ++a )
{
char *arg = argv[a];
ECHO( l_alloc.errors, fprintf( l_alloc.errors, "Analysing argument '%s'\n", arg ) );
if ( !arg || arg[0] == '-' )
{
if ( num )
{
err = ArgHasIssue( i, num, argv );
if ( err )
return ArgHadIssue( err, i, num, argv );
}
i = a;
num = 0;
if ( arg && strchr( arg, '=' ) )
{
err = ArgHasIssue( i, num, argv );
if ( err )
return ArgHadIssue( err, i, num, argv );
}
continue;
}
++num;
}
if ( num )
{
err = ArgHasIssue( i, num, argv );
if ( err )
return ArgHadIssue( err, i, num, argv );
}
return 0;
}
Which is giving me this output at the moment:
Code:
make debug ARGS="--detailed=2 --q-zlib -f ./pngsuite/s01n3p01.png"
...
./d.out --detailed=2 --q-zlib -f ./pngsuite/s01n3p01.png
main.c:517: ProcessArgv( 5, 0x7ffd6453da78 )
main.c:523: Analysing argument './d.out'
main.c:523: Analysing argument '--detailed=2'
main.c:433: ArgHasIssue( -1, 1, 0x7ffd6453da78 ) arg = './d.out', val = '(null)'
main.c:433: ArgHasIssue( 1, 0, 0x7ffd6453da78 ) arg = '--detailed=2', val = '(null)'
main.c:523: Analysing argument '--q-zlib'
main.c:523: Analysing argument '-f'
main.c:523: Analysing argument './pngsuite/s01n3p01.png'
main.c:433: ArgHasIssue( 3, 1, 0x7ffd6453da78 ) arg = '-f', val = './pngsuite/s01n3p01.png'
Attempting to open ./openstreetmap.png
view/png.c:330: IDAT bytes = 31
buff/zlib.c:814: ExpandZlibArchive( 0x7ffd6453b878 )
last = 0, type = 00
buff/zlib.c:467: leng = 60801, nlen = 449
...
view/png.c:484: ScanLines( 0x7ffd6453b7e0 )
d.out: malloc.c:2539: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
make: *** [GNUmakefile:46: debug] Aborted (core dumped)
Compilation failed.
Trying to figure out why "--q-zlib" is being ignored at the moment