summaryrefslogtreecommitdiffhomepage
path: root/contrib/lar/cli.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/lar/cli.c')
-rw-r--r--contrib/lar/cli.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/contrib/lar/cli.c b/contrib/lar/cli.c
new file mode 100644
index 0000000000..026150e79e
--- /dev/null
+++ b/contrib/lar/cli.c
@@ -0,0 +1,61 @@
+#include "lar.h"
+
+int do_print_member( lar_archive *ar, const char *name )
+{
+ lar_member *member;
+
+ if( (member = lar_open_member(ar, name)) != NULL )
+ {
+ write(fileno(stdout), member->data, member->length);
+ lar_close_member(member);
+ }
+ else
+ LAR_DIE("Unable to locate archive member");
+
+ return 0;
+}
+
+int do_print_index( lar_archive *ar )
+{
+ lar_index *index = ar->index;
+ LAR_FNAME(filename);
+
+ while(index)
+ {
+ lar_get_filename(ar, index, filename);
+ printf("%s\n", filename);
+ index = index->next;
+ }
+
+ return 0;
+}
+
+int main( int argc, const char* argv[] )
+{
+ lar_archive *ar;
+
+ if( argv[1] != NULL )
+ {
+ if( (ar = lar_open(argv[1])) != NULL )
+ {
+ if( argv[2] )
+ return do_print_member(ar, argv[2]);
+ else
+ return do_print_index(ar);
+
+ lar_close(ar);
+ }
+ else
+ {
+ LAR_DIE("Failed to open archive");
+ }
+ }
+ else
+ {
+ printf("Usage: lar <archive> [<member>]\n");
+ return 1;
+ }
+
+ return 0;
+}
+