aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c46
1 files changed, 11 insertions, 35 deletions
diff --git a/src/main.c b/src/main.c
index e536e93..4a7ce24 100644
--- a/src/main.c
+++ b/src/main.c
@@ -5,40 +5,16 @@
int main(int argc, char **argv)
{
- int opt;
- char *archive_file_name = NULL;
- bool create;
+ t_args args;
+ int archive_fd;
+ int ret;
- while ((opt = getopt(argc, argv, "Oxcvtf:")) != -1)
- {
- switch (opt)
- {
- case 'c':
- create = true;
- break;
- case 'x':
- create = false;
- break;
- case 'f':
- archive_file_name = optarg;
- break;
- case 'v':
- break;
- case 't':
- break;
- default:
- return 1;
- }
- }
- if (create)
- {
- if (archive_write(archive_file_name, argv + optind) == -1)
- return 1;
- }
- else
- {
- if (archive_read(archive_file_name) == -1)
- return 1;
- }
- return 0;
+ if (!args_parse(argc, argv, &args) ||
+ (archive_fd = archive_get_fd(&args)) == -1)
+ return EXIT_FAILURE;
+
+ ret = archive_dispatch_action(archive_fd, &args);
+ if (archive_fd != STDOUT_FILENO && archive_fd != STDIN_FILENO)
+ close(archive_fd);
+ return ret == -1 ? 1 : 0;
}