From ddd7fdac011efda5478748a0cd3cee8431db460e Mon Sep 17 00:00:00 2001 From: anthony Date: Wed, 30 Dec 2009 00:16:56 -0700 Subject: [PATCH] finish fixing segfault (probably caused by argv[] craziness) this diff brought to you by lmod --- src/fix/main.c | 61 +++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/src/fix/main.c b/src/fix/main.c index 5a37829b..f146cdaa 100644 --- a/src/fix/main.c +++ b/src/fix/main.c @@ -129,39 +129,44 @@ int main(int argc, char *argv[]) ulOptions = 0; - if ((--argc) == 0) + if (argc == 1) PrintUsage(); - while (*argv[argn] == '-') { - argc -= 1; - switch (argv[argn++][1]) { - case '?': - case 'h': - PrintUsage(); - break; - case 'd': - ulOptions |= OPTF_DEBUG; - break; - case 'p': - ulOptions |= OPTF_PAD; - break; - case 'r': - ulOptions |= OPTF_TRUNCATE; - break; - case 'v': - ulOptions |= OPTF_VALIDATE; - break; - case 't': - strncpy(cartname, argv[argn - 1] + 2, 16); - ulOptions |= OPTF_TITLE; - break; - case 'q': - ulOptions|=OPTF_QUIET; - break; + while (argn < argc) { + if(argv[argn][0] == '-') { + switch (argv[argn][1]) { + case '?': + case 'h': + PrintUsage(); + break; + case 'd': + ulOptions |= OPTF_DEBUG; + break; + case 'p': + ulOptions |= OPTF_PAD; + break; + case 'r': + ulOptions |= OPTF_TRUNCATE; + break; + case 'v': + ulOptions |= OPTF_VALIDATE; + break; + case 't': + strncpy(cartname, argv[argn] + 2, 16); + ulOptions |= OPTF_TITLE; + break; + case 'q': + ulOptions|=OPTF_QUIET; + break; + } } + argn++; } - strcpy(filename, argv[argn++]); + if(argv[argc - 1][0] == '-') + PrintUsage(); + + strcpy(filename, argv[argc - 1]); if (!FileExists(filename)) strcat(filename, ".gb");