limpeza do código

This commit is contained in:
Blau Araujo 2025-06-20 09:16:56 -03:00
parent 79d2ab1c5a
commit 0082116cf0

View file

@ -16,67 +16,50 @@ typedef enum {
OPT_HELP OPT_HELP
} Option; } Option;
// Trata argumentos recebidos
int parse_arg(char *arg); int parse_arg(char *arg);
int main(int argc, char **argv) { int main(int argc, char **argv) {
char *file = NULL; char *file = NULL;
char *mode = NULL; char *mode = NULL;
// Verificação do número de argumentos... if (argc == 2) {
if (argc < 2 || argc > 3) {
// Só pode haver 2 ou 3 argumentos...
return print_error_usage(MSG_ARGC_ERROR, argv[0]);
} else if (argc == 2) {
// Invocação com 2 argumentos...
switch (parse_arg(argv[1])) { switch (parse_arg(argv[1])) {
case OPT_HELP: case OPT_HELP:
// Imprime ajuda e termina...
return print_usage(EXIT_SUCCESS, argv[0]); return print_usage(EXIT_SUCCESS, argv[0]);
case OPT_NAME: case OPT_NAME:
// Arquivo existe?
if (access(argv[1], F_OK) == 0) { if (access(argv[1], F_OK) == 0) {
// Sem opções, só arquivos novos!
return print_error_usage(MSG_FILE_EXISTS, argv[0]); return print_error_usage(MSG_FILE_EXISTS, argv[0]);
} }
// Nome do novo arquivo...
file = argv[1]; file = argv[1];
mode = "w"; mode = "w";
break; break;
default: default:
// Nome do arquivo não pode começar com '-'!
return print_error_usage(MSG_INVALID_ARG, argv[0]); return print_error_usage(MSG_INVALID_ARG, argv[0]);
} }
} else { } else if (argc == 3) {
// Invocação com 3 argumentos...
for (int i = 1; argv[i] != NULL; i++) { for (int i = 1; argv[i] != NULL; i++) {
switch (parse_arg(argv[i])) { switch (parse_arg(argv[i])) {
case OPT_NAME: case OPT_NAME:
// Só pode haver uma definição de nome...
if (file == NULL) file = argv[i]; if (file == NULL) file = argv[i];
break; break;
case OPT_OVERWRITE: case OPT_OVERWRITE:
// Só pode haver uma definição de modo...
if (mode == NULL) mode = "w"; if (mode == NULL) mode = "w";
break; break;
case OPT_APPEND: case OPT_APPEND:
// Só pode haver uma definição de modo...
if (mode == NULL) mode = "a"; if (mode == NULL) mode = "a";
break; break;
case OPT_HELP: case OPT_HELP:
// Exibe ajuda e termina com sucesso...
return print_usage(EXIT_SUCCESS, argv[0]); return print_usage(EXIT_SUCCESS, argv[0]);
case OPT_ERROR: case OPT_ERROR:
// Algum dos argumentos é inválido...
print_error_fmt(MSG_INVALID_FMT, argv[i]); print_error_fmt(MSG_INVALID_FMT, argv[i]);
return print_usage(EXIT_FAILURE, argv[0]); return print_usage(EXIT_FAILURE, argv[0]);
} }
} }
// Tem que haver um nome e um modo depois do loop...
if (file == NULL || mode == NULL) { if (file == NULL || mode == NULL) {
return print_error_usage(MSG_INCORRECT_ALL, argv[0]); return print_error_usage(MSG_INCORRECT_ALL, argv[0]);
} }
} else {
return print_error_usage(MSG_ARGC_ERROR, argv[0]);
} }
FILE *fstr = fopen(file, mode); FILE *fstr = fopen(file, mode);