diff options
Diffstat (limited to 'contrib/lar/cli.c')
-rw-r--r-- | contrib/lar/cli.c | 61 |
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; +} + |