293 |
|
|
294 |
/* Archive extraction callback. */ |
/* Archive extraction callback. */ |
295 |
static bool |
static bool |
296 |
extract_archive_callback (struct uar_file *file) |
extract_archive_callback (struct uar_archive *uar, |
297 |
|
struct uar_file *file __attribute__ ((unused)), |
298 |
|
const char *uar_name __attribute__ ((unused)), |
299 |
|
const char *fs_name, enum uar_error_level level, |
300 |
|
const char *message) |
301 |
{ |
{ |
302 |
pinfo ("extracting: %s\n", uar_file_get_name (file)); |
if (level == UAR_ELEVEL_NONE) |
303 |
|
{ |
304 |
|
if (params.verbose) |
305 |
|
fprintf (stdout, "%s\n", fs_name); |
306 |
|
} |
307 |
|
else if (level == UAR_ELEVEL_WARNING) |
308 |
|
perr ("warning: %s: %s\n", fs_name, |
309 |
|
message != NULL ? message : uar_strerror (uar)); |
310 |
|
else if (level == UAR_ELEVEL_ERROR) |
311 |
|
perr ("error: %s: %s\n", fs_name, |
312 |
|
message != NULL ? message : uar_strerror (uar)); |
313 |
|
|
314 |
return true; |
return true; |
315 |
} |
} |
316 |
|
|
322 |
|
|
323 |
pinfo ("extracting archive: %s\n", params.file); |
pinfo ("extracting archive: %s\n", params.file); |
324 |
|
|
325 |
struct uar_archive *uar = uar_open (params.file); |
struct uar_archive *uar = uar_stream_open (params.file); |
326 |
|
|
327 |
if (uar == NULL || uar_has_error (uar)) |
if (uar == NULL || uar_has_error (uar)) |
328 |
{ |
{ |
330 |
return; |
return; |
331 |
} |
} |
332 |
|
|
333 |
#ifdef UAR_PRINT_VERBOSE_IMPL_INFO |
uar_set_extract_callback (uar, &extract_archive_callback); |
334 |
uar_debug_print (uar, false); |
|
335 |
#endif |
if (params.cwd != NULL) |
336 |
|
{ |
337 |
|
if (chdir (params.cwd) != 0) |
338 |
|
{ |
339 |
|
pinfo ("failed to change working directory: %s\n", |
340 |
|
strerror (errno)); |
341 |
|
return; |
342 |
|
} |
343 |
|
} |
344 |
|
|
345 |
|
char *cwd = getcwd (NULL, 0); |
346 |
|
|
347 |
if (!uar_extract (uar, params.cwd, &extract_archive_callback)) |
if (!uar_stream_extract (uar, cwd)) |
348 |
{ |
{ |
349 |
pinfo ("failed to extract archive: %s\n", strerror (errno)); |
pinfo ("failed to extract archive: %s\n", strerror (errno)); |
350 |
|
free (cwd); |
351 |
return; |
return; |
352 |
} |
} |
353 |
|
|
354 |
|
free (cwd); |
355 |
uar_close (uar); |
uar_close (uar); |
356 |
} |
} |
357 |
|
|
529 |
table->files = xcalloc (nfiles, sizeof (struct archive_file_info)); |
table->files = xcalloc (nfiles, sizeof (struct archive_file_info)); |
530 |
table->nfiles = 0; |
table->nfiles = 0; |
531 |
|
|
532 |
if (!uar_iterate (uar, &list_archive_callback_analyze, (void *) table)) |
if (!uar_stream_iterate (uar, &list_archive_callback_analyze, |
533 |
|
(void *) table)) |
534 |
{ |
{ |
535 |
pinfo ("failed to read archive: %s\n", strerror (errno)); |
pinfo ("failed to read archive: %s\n", strerror (errno)); |
536 |
goto list_archive_end; |
goto list_archive_end; |