summaryrefslogtreecommitdiff
path: root/ubi-utils
diff options
context:
space:
mode:
Diffstat (limited to 'ubi-utils')
-rw-r--r--ubi-utils/src/pfi2bin.c168
1 files changed, 81 insertions, 87 deletions
diff --git a/ubi-utils/src/pfi2bin.c b/ubi-utils/src/pfi2bin.c
index ec09a4d..044fa24 100644
--- a/ubi-utils/src/pfi2bin.c
+++ b/ubi-utils/src/pfi2bin.c
@@ -28,9 +28,9 @@
#include <stdint.h>
#include <getopt.h>
#include <stdio.h>
-#include <argp.h>
#include <string.h>
#include <assert.h>
+#include <errno.h>
#include <ubigen.h>
#include <mtd/ubi-header.h>
@@ -50,6 +50,9 @@
#define MIN(a,b) ((a) < (b) ? (a) : (b))
+extern char *optarg;
+extern int optind;
+
static uint32_t crc32_table[256];
static char err_buf[ERR_BUF_SIZE];
@@ -66,48 +69,40 @@ typedef enum action_t {
static const char copyright [] __attribute__((unused)) =
"(c) Copyright IBM Corp 2006\n";
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-const char *argp_program_version = PROGRAM_VERSION;
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
static char doc[] = "\nVersion: " PROGRAM_VERSION "\n\tBuilt on "
BUILD_CPU" "BUILD_OS" at "__DATE__" "__TIME__"\n"
"\n"
"pfi2bin - a tool to convert PFI files into binary images.\n";
-static struct argp_option options[] = {
- /* COMMON */
- { name: NULL, key: 0, arg: NULL, flags: 0,
- doc: "Common settings:",
- group: OPTION_ARG_OPTIONAL},
-
- { name: "verbose", key: 'v', arg: NULL, flags: 0,
- doc: "Print more information.",
- group: OPTION_ARG_OPTIONAL },
-
- { name: "copyright", key: 'c', arg: NULL, flags: 0,
- group: OPTION_ARG_OPTIONAL },
-
-
- /* INPUT */
- { name: NULL, key: 0, arg: NULL, flags: 0,
- doc: "Input:",
- group: 4},
-
- { name: "platform", key: 'j', arg: "pdd-file", flags: 0,
- doc: "PDD information which contains the card settings.",
- group: 4 },
-
- /* OUTPUT */
- { name: NULL, key: 0, arg: NULL, flags: 0,
- doc: "Output:",
- group: 5},
-
- { name: "output", key: 'o', arg: "filename", flags: 0,
- doc: "Outputfile, default: stdout.",
- group: 5 },
-
- { name: NULL, key: 0, arg: NULL, flags: 0, doc: NULL, group: 0 },
+static const char *optionsstr =
+" Common settings:\n"
+" -c, --copyright\n"
+" -v, --verbose Print more information.\n"
+"\n"
+" Input:\n"
+" -j, --platform=pdd-file PDD information which contains the card settings.\n"
+"\n"
+" Output:\n"
+" -o, --output=filename Outputfile, default: stdout.\n"
+"\n"
+" -?, --help Give this help list\n"
+" --usage Give a short usage message\n"
+" -V, --version Print program version\n";
+
+static const char *usage =
+"Usage: pfi2bin.orig [-cv?V] [-j pdd-file] [-o filename] [--copyright]\n"
+" [--verbose] [--platform=pdd-file] [--output=filename] [--help]\n"
+" [--usage] [--version] pfifile\n";
+
+struct option long_options[] = {
+ { .name = "copyright", .has_arg = 0, .flag = NULL, .val = 'c' },
+ { .name = "verbose", .has_arg = 0, .flag = NULL, .val = 'v' },
+ { .name = "platform", .has_arg = 1, .flag = NULL, .val = 'j' },
+ { .name = "output", .has_arg = 1, .flag = NULL, .val = 'o' },
+ { .name = "help", .has_arg = 0, .flag = NULL, .val = '?' },
+ { .name = "usage", .has_arg = 0, .flag = NULL, .val = 0 },
+ { .name = "version", .has_arg = 0, .flag = NULL, .val = 'V' },
+ { NULL, 0, NULL, 0}
};
typedef struct io {
@@ -129,58 +124,57 @@ typedef struct myargs {
char **options; /* [STRING...] */
} myargs;
-static struct argp argp = {
- options: options,
- parser: parse_opt,
- args_doc: "pfifile",
- doc: doc,
- children: NULL,
- help_filter: NULL,
- argp_domain: NULL,
-};
-
-static error_t
-parse_opt(int key, char *arg, struct argp_state *state)
+static int
+parse_opt(int argc, char **argv, myargs *args)
{
- myargs *args = state->input;
-
- switch (key) {
- /* common settings */
- case 'v': /* --verbose=<level> */
- args->verbose = 1;
- break;
-
- case 'c': /* --copyright */
- fprintf(stderr, "%s\n", copyright);
- exit(0);
- break;
-
- case 'j': /* --platform */
- args->f_in_pdd = arg;
- break;
-
- case 'o': /* --output */
- args->f_out = arg;
- break;
-
- case ARGP_KEY_ARG:
- args->f_in_pfi = arg;
- /* args->arg1 = arg; */
- args->options = &state->argv[state->next];
- state->next = state->argc;
- break;
-
- case ARGP_KEY_END:
- if (args->action == ACT_NOTHING) {
- argp_usage(state);
- exit(1);
+ while (1) {
+ int key;
+
+ key = getopt_long(argc, argv, "cvj:o:?V", long_options, NULL);
+ if (key == -1)
+ break;
+
+ switch (key) {
+ /* common settings */
+ case 'v': /* --verbose=<level> */
+ args->verbose = 1;
+ break;
+
+ case 'c': /* --copyright */
+ fprintf(stderr, "%s\n", copyright);
+ exit(0);
+ break;
+
+ case 'j': /* --platform */
+ args->f_in_pdd = optarg;
+ break;
+
+ case 'o': /* --output */
+ args->f_out = optarg;
+ break;
+
+ case '?': /* help */
+ printf("pfi2bin [OPTION...] pfifile\n");
+ printf("%s", doc);
+ printf("%s", optionsstr);
+ printf("\nReport bugs to %s\n", PACKAGE_BUGREPORT);
+ exit(0);
+ break;
+
+ case 'V':
+ printf("%s\n", PACKAGE_VERSION);
+ exit(0);
+ break;
+
+ default:
+ printf("%s", usage);
+ exit(-1);
}
- break;
-
- default:
- return(ARGP_ERR_UNKNOWN);
}
+ if (optind < argc)
+ args->f_in_pfi = argv[optind++];
+
return 0;
}
@@ -658,7 +652,7 @@ main(int argc, char *argv[])
};
/* parse arguments */
- argp_parse(&argp, argc, argv, ARGP_IN_ORDER, 0, &args);
+ parse_opt(argc, argv, &args);
if (strcmp(args.f_in_pfi, "") == 0) {
err_quit("No PFI input file specified!");