Changeset View
Changeset View
Standalone View
Standalone View
usr.bin/ar/acpyacc.y
Show First 20 Lines • Show All 400 Lines • ▼ Show 20 Lines | |||||
/* Extract modules from current archive. */ | /* Extract modules from current archive. */ | ||||
static void | static void | ||||
arscp_extract(struct list *list) | arscp_extract(struct list *list) | ||||
{ | { | ||||
if (!arscp_target_exist()) | if (!arscp_target_exist()) | ||||
return; | return; | ||||
arscp_mlist2argv(list); | arscp_mlist2argv(list); | ||||
ar_read_archive(bsdar, 'x'); | ar_read_archive(bsdar, 'x', stdout); | ||||
arscp_free_argv(); | arscp_free_argv(); | ||||
arscp_free_mlist(list); | arscp_free_mlist(list); | ||||
} | } | ||||
/* List modules of archive. (Simple Mode) */ | /* List modules of archive. (Simple Mode) */ | ||||
static void | static void | ||||
arscp_list(void) | arscp_list(void) | ||||
{ | { | ||||
if (!arscp_target_exist()) | if (!arscp_target_exist()) | ||||
return; | return; | ||||
bsdar->argc = 0; | bsdar->argc = 0; | ||||
bsdar->argv = NULL; | bsdar->argv = NULL; | ||||
/* Always verbose. */ | /* Always verbose. */ | ||||
bsdar->options |= AR_V; | bsdar->options |= AR_V; | ||||
ar_read_archive(bsdar, 't'); | ar_read_archive(bsdar, 't', stdout); | ||||
bsdar->options &= ~AR_V; | bsdar->options &= ~AR_V; | ||||
} | } | ||||
/* List modules of archive. (Advance Mode) */ | /* List modules of archive. (Advance Mode) */ | ||||
static void | static void | ||||
arscp_dir(char *archive, struct list *list, char *rlt) | arscp_dir(char *archive, struct list *list, char *rlt) | ||||
{ | { | ||||
FILE *out; | FILE *out; | ||||
/* If rlt != NULL, redirect output to it */ | /* If rlt != NULL, redirect output to it */ | ||||
out = NULL; | |||||
if (rlt) { | |||||
out = stdout; | out = stdout; | ||||
if ((stdout = fopen(rlt, "w")) == NULL) | if (rlt) { | ||||
if ((out = fopen(rlt, "w")) == NULL) | |||||
bsdar_errc(bsdar, errno, "fopen %s failed", rlt); | bsdar_errc(bsdar, errno, "fopen %s failed", rlt); | ||||
} | } | ||||
bsdar->filename = archive; | bsdar->filename = archive; | ||||
if (list) | if (list) | ||||
arscp_mlist2argv(list); | arscp_mlist2argv(list); | ||||
else { | else { | ||||
bsdar->argc = 0; | bsdar->argc = 0; | ||||
bsdar->argv = NULL; | bsdar->argv = NULL; | ||||
} | } | ||||
if (verbose) | if (verbose) | ||||
bsdar->options |= AR_V; | bsdar->options |= AR_V; | ||||
ar_read_archive(bsdar, 't'); | ar_read_archive(bsdar, 't', out); | ||||
bsdar->options &= ~AR_V; | bsdar->options &= ~AR_V; | ||||
if (rlt) { | if (rlt) { | ||||
if (fclose(stdout) == EOF) | if (fclose(out) == EOF) | ||||
bsdar_errc(bsdar, errno, "fclose %s failed", rlt); | bsdar_errc(bsdar, errno, "fclose %s failed", rlt); | ||||
stdout = out; | |||||
free(rlt); | free(rlt); | ||||
} | } | ||||
free(archive); | free(archive); | ||||
bsdar->filename = tmpac; | bsdar->filename = tmpac; | ||||
arscp_free_argv(); | arscp_free_argv(); | ||||
arscp_free_mlist(list); | arscp_free_mlist(list); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 193 Lines • Show Last 20 Lines |