66 lines
1.5 KiB
C
66 lines
1.5 KiB
C
#include "arguments.h"
|
|
#include "common.h"
|
|
|
|
#include <argp.h>
|
|
#include <string.h>
|
|
|
|
error_t parseArgument(int key, char* arg, struct argp_state* state) {
|
|
Args* args = state->input;
|
|
|
|
switch (key) {
|
|
case 'v':
|
|
args->verbose = TRUE;
|
|
break;
|
|
|
|
case 'd':
|
|
args->compress = FALSE;
|
|
break;
|
|
|
|
case ARGP_KEY_ARG:
|
|
switch (state->arg_num) {
|
|
case 0:
|
|
// Premier argument : fichier d'entrée
|
|
args->source = fopen(arg, "rb");
|
|
|
|
if (args->source == NULL) {
|
|
argp_error(
|
|
state, "%s: %s",
|
|
arg, strerror(errno)
|
|
);
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
// Second argument : fichier de sortie. Si omis,
|
|
// utilisation de la sortie standard
|
|
args->dest = fopen(arg, "wb");
|
|
|
|
if (args->dest == NULL) {
|
|
argp_error(
|
|
state, "%s: %s",
|
|
arg, strerror(errno)
|
|
);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
argp_error(
|
|
state, "trop d'arguments (l'argument %s, numéro %d "
|
|
"est superflu)", arg, state->arg_num + 1
|
|
);
|
|
}
|
|
break;
|
|
|
|
case ARGP_KEY_END:
|
|
if (state->arg_num < 1) {
|
|
argp_error(state, "fichier d'entrée manquant");
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return ARGP_ERR_UNKNOWN;
|
|
}
|
|
|
|
return 0;
|
|
}
|