X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=contrib%2Flar%2Fcli.c;h=36216d46ef8af8e18ea550f423117f01ed197dbb;hb=cd41385f15d9c18f7af41b4c2f6a1a4f178d7811;hp=2b5e08891274c0a5d0dd583819ebcb96a00ca92d;hpb=1744f962b0c0d324aa9a5ebbbcfb4f98e312a217;p=project%2Fluci.git diff --git a/contrib/lar/cli.c b/contrib/lar/cli.c index 2b5e08891..36216d46e 100644 --- a/contrib/lar/cli.c +++ b/contrib/lar/cli.c @@ -18,46 +18,114 @@ int do_print_member( lar_archive *ar, const char *name ) int do_print_index( lar_archive *ar ) { lar_index *index = ar->index; - LAR_FNAME(filename); - while(index) + if( ar->has_filenames ) { - lar_get_filename(ar, index, filename); - printf("%s\n", filename); - index = index->next; + while(index) + { + if( index->type == LAR_TYPE_REGULAR ) + { + printf("%s\n", index->filename); + } + + index = index->next; + } + + return 0; } - return 0; + LAR_DIE("The archive contains no file list"); + return 1; } -int main( int argc, const char* argv[] ) +int do_require( const char *package, const char *path ) { + int stat = 1; lar_archive *ar; - int stat = 0; + lar_member *mb; - if( argv[1] != NULL ) + if( (ar = lar_find_archive(package, path, 1)) != NULL ) { - if( (ar = lar_open(argv[1])) != NULL ) + if( (mb = lar_find_member(ar, package)) != NULL ) { - if( argv[2] ) - stat = do_print_member(ar, argv[2]); - else - stat = do_print_index(ar); + write(fileno(stdout), mb->data, mb->length); + lar_close_member(mb); + stat = 0; + } + + lar_close(ar); + } - lar_close(ar); - return stat; + return stat; +} + +int do_findfile( const char *filename, const char *path ) +{ + int stat = 1; + lar_archive *ar; + lar_member *mb; + + if( (ar = lar_find_archive(filename, path, 0)) != NULL ) + { + if( (mb = lar_open_member(ar, filename)) != NULL ) + { + write(fileno(stdout), mb->data, mb->length); + lar_close_member(mb); + stat = 0; } - else + + lar_close(ar); + } + + return stat; +} + +int main( int argc, const char* argv[] ) +{ + lar_archive *ar; + int stat = 0; + + if( argv[1] != NULL && argv[2] != NULL ) + { + switch(argv[1][0]) { - LAR_DIE("Failed to open archive"); + case 's': + if( (ar = lar_open(argv[2])) != NULL ) + { + if( argv[3] != NULL ) + stat = do_print_member(ar, argv[3]); + else + stat = do_print_index(ar); + + lar_close(ar); + } + else + { + LAR_DIE("Failed to open archive"); + } + + break; + + case 'r': + stat = do_require(argv[2], argv[3]); + break; + + case 'f': + stat = do_findfile(argv[2], argv[3]); + break; } + + return stat; } else { - printf("Usage: lar []\n"); + printf("Usage:\n"); + printf("\tlar show []\n"); + printf("\tlar require []\n"); + printf("\tlar find []\n"); + return 1; } return 0; } -