X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=contrib%2Flar%2Fcli.c;h=36216d46ef8af8e18ea550f423117f01ed197dbb;hb=dabf916db20da0013033efb763b632aecaea20a5;hp=e8daf63a53934be7f5eaeb5c611ee4ff3e8f8566;hpb=50ccdfccce792d5bd013cae9eb93588a16a7ec62;p=project%2Fluci.git diff --git a/contrib/lar/cli.c b/contrib/lar/cli.c index e8daf63a5..36216d46e 100644 --- a/contrib/lar/cli.c +++ b/contrib/lar/cli.c @@ -18,25 +18,33 @@ 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 do_require( const char *package ) +int do_require( const char *package, const char *path ) { int stat = 1; lar_archive *ar; lar_member *mb; - if( (ar = lar_find_archive(package)) != NULL ) + if( (ar = lar_find_archive(package, path, 1)) != NULL ) { if( (mb = lar_find_member(ar, package)) != NULL ) { @@ -51,12 +59,33 @@ int do_require( const char *package ) 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; + } + + lar_close(ar); + } + + return stat; +} + int main( int argc, const char* argv[] ) { lar_archive *ar; int stat = 0; - if( argv[1] != NULL ) + if( argv[1] != NULL && argv[2] != NULL ) { switch(argv[1][0]) { @@ -78,7 +107,11 @@ int main( int argc, const char* argv[] ) break; case 'r': - stat = do_require(argv[2]); + stat = do_require(argv[2], argv[3]); + break; + + case 'f': + stat = do_findfile(argv[2], argv[3]); break; } @@ -88,7 +121,8 @@ int main( int argc, const char* argv[] ) { printf("Usage:\n"); printf("\tlar show []\n"); - printf("\tlar require \n"); + printf("\tlar require []\n"); + printf("\tlar find []\n"); return 1; }