diff --git a/src/main.c b/src/main.c index fa14025..dc166c6 100644 --- a/src/main.c +++ b/src/main.c @@ -38,9 +38,8 @@ static error_t parse_opt(int key, char* arg, struct argp_state* state) { case ARGP_KEY_ARG: switch (state->arg_num) { case 0: - // Premier argument : fichier d'entrée. Si omis, - // utilisation de l'entrée standard - args->source = fopen(arg, "r"); + // Premier argument : fichier d'entrée + args->source = fopen(arg, "rb"); if (args->source == NULL) { argp_error( @@ -53,7 +52,7 @@ static error_t parse_opt(int key, char* arg, struct argp_state* state) { case 1: // Second argument : fichier de sortie. Si omis, // utilisation de la sortie standard - args->dest = fopen(arg, "w"); + args->dest = fopen(arg, "wb"); if (args->dest == NULL) { argp_error( @@ -65,11 +64,19 @@ static error_t parse_opt(int key, char* arg, struct argp_state* state) { default: argp_error( - state, "Trop d'arguments - L'argument %s est superflu", + state, "Trop d'arguments (l'argument %s est superflu)", arg ); } + break; + case ARGP_KEY_END: + if (state->arg_num < 1) { + argp_error( + state, "Fichier d'entrée manquant (le premier argument " + " est obligatoire)" + ); + } break; default: @@ -108,7 +115,7 @@ static struct argp_option options[] = { static struct argp argp = { .options = options, .parser = parse_opt, - .args_doc = "[SOURCE [DEST]]", + .args_doc = "SOURCE [DEST]", .doc = "Compresse ou décompresse SOURCE vers DEST en utilisant " "l'algorithme de Huffman (par défaut, compresse SOURCE vers DEST)." }; @@ -123,7 +130,7 @@ int main(int argc, char** argv) { Args args = { .verbose = FALSE, .compress = TRUE, - .source = stdin, + .source = NULL, .dest = stdout };