diff options
Diffstat (limited to 'src/options.c')
-rw-r--r-- | src/options.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/options.c b/src/options.c index 1b258fe..55a91c5 100644 --- a/src/options.c +++ b/src/options.c @@ -11,13 +11,14 @@ static void printUsage(char *progname) printf("Usage: %s [OPTIONS] <elf-file>\n", progname); printf("\n" "Options:\n" - " -h, --help Print this help message\n" - " -o, --output Where to write the modified ELF file to\n" + " -h, --help Print this help message\n" + " -o, --output Where to write the modified ELF file to\n" "\n" - " --print-header Print ELF header\n" - " --print-segments Print program headers\n" - " --print-sections Print sections\n" + " --print-header Print ELF header\n" + " --print-segments Print program headers\n" + " --print-sections Print sections\n" "\n" + " --insert-before off,sz Insert spacing at given offset\n" "\n"); } @@ -28,6 +29,7 @@ void parseOptions(CLIOpts *opts, int argc, char **argv) char *progname = argv[0]; int c; int option_index = 0; + char *endptr; static struct option long_options[] = { {"help", 0, 0, 'h'}, @@ -35,6 +37,7 @@ void parseOptions(CLIOpts *opts, int argc, char **argv) {"print-header", 0, 0, 10001}, {"print-segments", 0, 0, 10002}, {"print-sections", 0, 0, 10003}, + {"insert-before", 1, 0, 10004}, {NULL, 0, NULL, 0} }; @@ -56,6 +59,16 @@ void parseOptions(CLIOpts *opts, int argc, char **argv) case 10003: opts->printSections = 1; break; + case 10004: + opts->insertBeforeOffs = strtoul(optarg, &endptr, 0); + if (endptr[0] != ',') { + goto USAGE; + } + opts->insertBeforeSz = strtoul(endptr + 1, &endptr, 0); + if (endptr[0] != '\0' || opts->insertBeforeSz == 0) { + goto USAGE; + } + break; case '?': default: goto USAGE; |