18 #if !defined(POPT_ARGFLAG_TOGGLE)
19 #define POPT_ARGFLAG_TOGGLE 0
28 typedef struct rpmz_s *
rpmz;
30 #if defined(_RPMZ_INTERNAL)
33 extern struct rpmz_s
__rpmz;
44 const char *stdout_fn;
51 const char * base_prefix;
55 #if defined(_RPMZ_INTERNAL_XZ)
85 lzma_options_lzma _options;
87 lzma_filter _filters[LZMA_FILTERS_MAX + 1];
88 size_t _filters_count;
92 struct rpmzQueue_s _zq;
107 #if defined(_RPMZ_INTERNAL)
110 static int rpmzLoadManifests(
rpmz z)
118 if ((manifests = z->manifests) != NULL)
119 while ((fn = *manifests++) != NULL) {
127 if (!(xx == 0 && iob != NULL)) {
128 fprintf(stderr,
_(
"%s: Failed to open %s\n"),
__progname, fn);
133 be = (
char *)(iob->b + iob->blen);
134 while (be > (
char *)iob->b && (be[-1] ==
'\n' || be[-1] ==
'\r')) {
141 for (f = (
char *)iob->b; *f; f = fe) {
147 while (*fe && !(*fe ==
'\n' || *fe ==
'\r'))
151 while (*fe && (*fe ==
'\n' || *fe ==
'\r'))
168 path =
rpmExpand(z->base_prefix, g, NULL);
171 (void)
argvAdd(&z->argv, path);
187 static rpmRC rpmzParseEnv(
rpmz z,
const char * envvar,
192 static char whitespace[] =
" \f\n\r\t\v,";
193 static char _envvar[] =
"RPMZ";
194 char * s =
getenv((envvar ? envvar : _envvar));
196 poptContext optCon = NULL;
212 optCon = poptGetContext(
__progname, ac, (
const char **)av,
213 optionsTable, POPT_CONTEXT_KEEP_FIRST);
216 while ((xx = poptGetNextOpt(optCon)) > 0) {
217 const char * optArg = poptGetOptArg(optCon);
219 optArg =
_free(optArg);
224 fprintf(stderr,
_(
"%s: option table misconfigured (%d)\n"),
236 poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
242 fprintf(stderr,
"%s: cannot provide files in %s envvar\n",
249 optCon = poptFreeContext(optCon);
255 #if defined(_RPMZ_INTERNAL_XZ)
258 static rpmRC rpmzParseArgv0(
rpmz z,
const char * argv0)
263 const char * s = strrchr(argv0,
'/');
264 const char *
name = (s ? (s + 1) : argv0);
268 if (strstr(name,
"xz") != NULL) {
272 if (strstr(name,
"lz") != NULL) {
277 #if defined(WITH_BZIP2)
278 if (strstr(name,
"bz") != NULL) {
283 #if defined(WITH_ZLIB)
284 if (strstr(name,
"gz") != NULL) {
288 if (strstr(name,
"zlib") != NULL) {
293 if (strstr(name,
"zip") != NULL) {
303 if (strstr(name,
"cat") != NULL) {
306 }
else if (strstr(name,
"un") != NULL) {
char * getenv(const char *name)
struct rpmzQueue_s * rpmzQueue
static struct poptOption optionsTable[]
Job queue and buffer pool management.
rpmiob rpmiobFree(rpmiob iob)
Destroy a I/O buffer instance.
int rpmiobSlurp(const char *fn, rpmiob *iobp)
Yet Another syslog(3) API clone.
int argvCount(const ARGV_t argv)
Return no.
static int xisspace(int c)
unsigned long long rpmuint64_t
ARGV_t argvFree(ARGV_t argv)
Destroy an argv array.
The FD_t File Handle data structure.
int argvAdd(ARGV_t *argvp, ARGstr_t val)
Add a string to an argv array.
char * rpmExpand(const char *arg,...)
Return (malloc'ed) concatenated macro expansion(s).
enum rpmRC_e rpmRC
RPM return codes.
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
int argvSplit(ARGV_t *argvp, const char *str, const char *seps)
Split a string into an argv array.