Commit from LuCI Translation Portal by user jow.: 20 of 21 messages translated (0...
[project/luci.git] / contrib / lar / cli.c
1 #include "lar.h"
2
3 int do_print_member( lar_archive *ar, const char *name )
4 {
5 lar_member *member;
6
7 if( (member = lar_open_member(ar, name)) != NULL )
8 {
9 write(fileno(stdout), member->data, member->length);
10 lar_close_member(member);
11 }
12 else
13 LAR_DIE("Unable to locate archive member");
14
15 return 0;
16 }
17
18 int do_print_index( lar_archive *ar )
19 {
20 lar_index *index = ar->index;
21
22 if( ar->has_filenames )
23 {
24 while(index)
25 {
26 if( index->type == LAR_TYPE_REGULAR )
27 {
28 printf("%s\n", index->filename);
29 }
30
31 index = index->next;
32 }
33
34 return 0;
35 }
36
37 LAR_DIE("The archive contains no file list");
38 return 1;
39 }
40
41 int do_require( const char *package, const char *path )
42 {
43 int stat = 1;
44 lar_archive *ar;
45 lar_member *mb;
46
47 if( (ar = lar_find_archive(package, path, 1)) != NULL )
48 {
49 if( (mb = lar_find_member(ar, package)) != NULL )
50 {
51 write(fileno(stdout), mb->data, mb->length);
52 lar_close_member(mb);
53 stat = 0;
54 }
55
56 lar_close(ar);
57 }
58
59 return stat;
60 }
61
62 int do_findfile( const char *filename, const char *path )
63 {
64 int stat = 1;
65 lar_archive *ar;
66 lar_member *mb;
67
68 if( (ar = lar_find_archive(filename, path, 0)) != NULL )
69 {
70 if( (mb = lar_open_member(ar, filename)) != NULL )
71 {
72 write(fileno(stdout), mb->data, mb->length);
73 lar_close_member(mb);
74 stat = 0;
75 }
76
77 lar_close(ar);
78 }
79
80 return stat;
81 }
82
83 int main( int argc, const char* argv[] )
84 {
85 lar_archive *ar;
86 int stat = 0;
87
88 if( argv[1] != NULL && argv[2] != NULL )
89 {
90 switch(argv[1][0])
91 {
92 case 's':
93 if( (ar = lar_open(argv[2])) != NULL )
94 {
95 if( argv[3] != NULL )
96 stat = do_print_member(ar, argv[3]);
97 else
98 stat = do_print_index(ar);
99
100 lar_close(ar);
101 }
102 else
103 {
104 LAR_DIE("Failed to open archive");
105 }
106
107 break;
108
109 case 'r':
110 stat = do_require(argv[2], argv[3]);
111 break;
112
113 case 'f':
114 stat = do_findfile(argv[2], argv[3]);
115 break;
116 }
117
118 return stat;
119 }
120 else
121 {
122 printf("Usage:\n");
123 printf("\tlar show <archive> [<member>]\n");
124 printf("\tlar require <package> [<path>]\n");
125 printf("\tlar find <filename> [<path>]\n");
126
127 return 1;
128 }
129
130 return 0;
131 }