aboutsummaryrefslogtreecommitdiff
path: root/archival/rpm.c
diff options
context:
space:
mode:
Diffstat (limited to 'archival/rpm.c')
-rw-r--r--archival/rpm.c43
1 files changed, 18 insertions, 25 deletions
diff --git a/archival/rpm.c b/archival/rpm.c
index 7b27c0250..d399e0ea2 100644
--- a/archival/rpm.c
+++ b/archival/rpm.c
@@ -70,17 +70,15 @@ static void *map;
70static rpm_index **mytags; 70static rpm_index **mytags;
71static int tagcount; 71static int tagcount;
72 72
73void extract_cpio_gz(int fd); 73static void extract_cpio_gz(int fd);
74rpm_index **rpm_gettags(int fd, int *num_tags); 74static rpm_index **rpm_gettags(int fd, int *num_tags);
75int bsearch_rpmtag(const void *key, const void *item); 75static int bsearch_rpmtag(const void *key, const void *item);
76char *rpm_getstring(int tag, int itemindex); 76static char *rpm_getstring(int tag, int itemindex);
77int rpm_getint(int tag, int itemindex); 77static int rpm_getint(int tag, int itemindex);
78int rpm_getcount(int tag); 78static int rpm_getcount(int tag);
79void exec_script(int progtag, int datatag, char *prefix); 79static void fileaction_dobackup(char *filename, int fileref);
80void fileaction_dobackup(char *filename, int fileref); 80static void fileaction_setowngrp(char *filename, int fileref);
81void fileaction_setowngrp(char *filename, int fileref); 81static void loop_through_files(int filetag, void (*fileaction)(char *filename, int fileref));
82void fileaction_list(char *filename, int itemno);
83void loop_through_files(int filetag, void (*fileaction)(char *filename, int fileref));
84 82
85int rpm_main(int argc, char **argv) 83int rpm_main(int argc, char **argv)
86{ 84{
@@ -169,7 +167,7 @@ int rpm_main(int argc, char **argv)
169 return 0; 167 return 0;
170} 168}
171 169
172void extract_cpio_gz(int fd) { 170static void extract_cpio_gz(int fd) {
173 archive_handle_t *archive_handle; 171 archive_handle_t *archive_handle;
174 unsigned char magic[2]; 172 unsigned char magic[2];
175 173
@@ -196,7 +194,7 @@ void extract_cpio_gz(int fd) {
196} 194}
197 195
198 196
199rpm_index **rpm_gettags(int fd, int *num_tags) 197static rpm_index **rpm_gettags(int fd, int *num_tags)
200{ 198{
201 rpm_index **tags = xzalloc(200 * sizeof(struct rpmtag *)); /* We should never need mode than 200, and realloc later */ 199 rpm_index **tags = xzalloc(200 * sizeof(struct rpmtag *)); /* We should never need mode than 200, and realloc later */
202 int pass, tagindex = 0; 200 int pass, tagindex = 0;
@@ -235,14 +233,14 @@ rpm_index **rpm_gettags(int fd, int *num_tags)
235 return tags; /* All done, leave the file at the start of the gzipped cpio archive */ 233 return tags; /* All done, leave the file at the start of the gzipped cpio archive */
236} 234}
237 235
238int bsearch_rpmtag(const void *key, const void *item) 236static int bsearch_rpmtag(const void *key, const void *item)
239{ 237{
240 int *tag = (int *)key; 238 int *tag = (int *)key;
241 rpm_index **tmp = (rpm_index **) item; 239 rpm_index **tmp = (rpm_index **) item;
242 return (*tag - tmp[0]->tag); 240 return (*tag - tmp[0]->tag);
243} 241}
244 242
245int rpm_getcount(int tag) 243static int rpm_getcount(int tag)
246{ 244{
247 rpm_index **found; 245 rpm_index **found;
248 found = bsearch(&tag, mytags, tagcount, sizeof(struct rpmtag *), bsearch_rpmtag); 246 found = bsearch(&tag, mytags, tagcount, sizeof(struct rpmtag *), bsearch_rpmtag);
@@ -250,7 +248,7 @@ int rpm_getcount(int tag)
250 else return found[0]->count; 248 else return found[0]->count;
251} 249}
252 250
253char *rpm_getstring(int tag, int itemindex) 251static char *rpm_getstring(int tag, int itemindex)
254{ 252{
255 rpm_index **found; 253 rpm_index **found;
256 found = bsearch(&tag, mytags, tagcount, sizeof(struct rpmtag *), bsearch_rpmtag); 254 found = bsearch(&tag, mytags, tagcount, sizeof(struct rpmtag *), bsearch_rpmtag);
@@ -263,7 +261,7 @@ char *rpm_getstring(int tag, int itemindex)
263 } else return NULL; 261 } else return NULL;
264} 262}
265 263
266int rpm_getint(int tag, int itemindex) 264static int rpm_getint(int tag, int itemindex)
267{ 265{
268 rpm_index **found; 266 rpm_index **found;
269 int n, *tmpint; 267 int n, *tmpint;
@@ -284,7 +282,7 @@ int rpm_getint(int tag, int itemindex)
284 } else return -1; 282 } else return -1;
285} 283}
286 284
287void fileaction_dobackup(char *filename, int fileref) 285static void fileaction_dobackup(char *filename, int fileref)
288{ 286{
289 struct stat oldfile; 287 struct stat oldfile;
290 int stat_res; 288 int stat_res;
@@ -301,7 +299,7 @@ void fileaction_dobackup(char *filename, int fileref)
301 } 299 }
302} 300}
303 301
304void fileaction_setowngrp(char *filename, int fileref) 302static void fileaction_setowngrp(char *filename, int fileref)
305{ 303{
306 int uid, gid; 304 int uid, gid;
307 uid = bb_xgetpwnam(rpm_getstring(RPMTAG_FILEUSERNAME, fileref)); 305 uid = bb_xgetpwnam(rpm_getstring(RPMTAG_FILEUSERNAME, fileref));
@@ -309,12 +307,7 @@ void fileaction_setowngrp(char *filename, int fileref)
309 chown (filename, uid, gid); 307 chown (filename, uid, gid);
310} 308}
311 309
312void fileaction_list(char *filename, int ATTRIBUTE_UNUSED fileref) 310static void loop_through_files(int filetag, void (*fileaction)(char *filename, int fileref))
313{
314 printf("%s\n", filename);
315}
316
317void loop_through_files(int filetag, void (*fileaction)(char *filename, int fileref))
318{ 311{
319 int count = 0; 312 int count = 0;
320 while (rpm_getstring(filetag, count)) { 313 while (rpm_getstring(filetag, count)) {