static void rpmcliAllArgCallback( poptContext con, enum poptCallbackReason reason, const struct poptOption * opt, const char * arg, const void * data) { /* XXX avoid accidental collisions with POPT_BIT_SET for flags */ if (opt->arg == NULL) switch (opt->val) { case 'q': rpmSetVerbosity(RPMLOG_WARNING); break; case 'v': rpmIncreaseVerbosity(); break; case POPT_PREDEFINE: (void) rpmDefineMacro(NULL, arg, RMIL_CMDLINE); break; case 'D': { char *s, *t; /* XXX Convert '-' in macro name to underscore, skip leading %. */ s = t = xstrdup(arg); while (*t && !risspace(*t)) { if (*t == '-') *t = '_'; t++; } t = s; if (*t == '%') t++; /* XXX Predefine macro if not initialized yet. */ if (rpmcliInitialized < 0) (void) rpmDefineMacro(NULL, t, RMIL_CMDLINE); rpmcliConfigured(); (void) rpmDefineMacro(NULL, t, RMIL_CMDLINE); (void) rpmDefineMacro(rpmCLIMacroContext, t, RMIL_CMDLINE); free(s); break; } case 'E': rpmcliConfigured(); { char *val = rpmExpand(arg, NULL); fprintf(stdout, "%s\n", val); free(val); } break; case POPT_DBPATH: rpmcliConfigured(); addMacro(NULL, "_dbpath", NULL, arg, RMIL_CMDLINE); break; case POPT_SHOWVERSION: printVersion(stdout); exit(EXIT_SUCCESS); break; case POPT_SHOWRC: rpmcliConfigured(); (void) rpmShowRC(stdout); exit(EXIT_SUCCESS); break; case POPT_QUERYTAGS: rpmDisplayQueryTags(stdout); exit(EXIT_SUCCESS); break; case RPMCLI_POPT_NODIGEST: rpmcliQueryFlags |= VERIFY_DIGEST; break; case RPMCLI_POPT_NOSIGNATURE: rpmcliQueryFlags |= VERIFY_SIGNATURE; break; case RPMCLI_POPT_NOHDRCHK: rpmcliQueryFlags |= VERIFY_HDRCHK; break; } }
static void rpmcliAllArgCallback(poptContext con, /*@unused@*/ enum poptCallbackReason reason, const struct poptOption * opt, const char * arg, /*@unused@*/ const void * data) /*@globals pgpDigVSFlags, rpmcliTargets, rpmcliQueryFlags, rpmCLIMacroContext, rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ /*@modifies con, pgpDigVSFlags, rpmcliTargets, rpmcliQueryFlags, rpmCLIMacroContext, rpmGlobalMacroContext, fileSystem, internalState @*/ { /* XXX avoid accidental collisions with POPT_BIT_SET for flags */ if (opt->arg == NULL) switch (opt->val) { case POPT_PREDEFINE: (void) rpmDefineMacro(NULL, arg, RMIL_CMDLINE); break; case 'D': { char *s, *t; /* XXX Convert '-' in macro name to underscore, skip leading %. */ s = t = xstrdup(arg); while (*t && !xisspace(*t)) { if (*t == '-') *t = '_'; t++; } t = s; if (*t == '%') t++; rpmcliConfigured(); /*@-type@*/ /* XXX adding macro to global context isn't Right Thing Todo. */ (void) rpmDefineMacro(NULL, t, RMIL_CMDLINE); (void) rpmDefineMacro(rpmCLIMacroContext, t, RMIL_CMDLINE); /*@=type@*/ s = _free(s); } break; case POPT_UNDEFINE: { char *s, *t; /* XXX Convert '-' in macro name to underscore, skip leading %. */ s = t = xstrdup(arg); while (*t && !xisspace(*t)) { if (*t == '-') *t = '_'; t++; } t = s; if (*t == '%') t++; /*@-type@*/ rpmcliConfigured(); (void) rpmUndefineMacro(NULL, t); (void) rpmUndefineMacro(rpmCLIMacroContext, t); /*@=type@*/ s = _free(s); } break; case 'E': assert(arg != NULL); rpmcliConfigured(); { const char * val = rpmcliEvalSlurp(arg); size_t val_len = fwrite(val, strlen(val), 1, stdout); if (val_len > 0 && val[val_len - 1] != '\n') fprintf(stdout, "\n"); val = _free(val); } break; case POPT_SHOWVERSION: printVersion(stdout); /*@i@*/ con = rpmcliFini(con); exit(EXIT_SUCCESS); /*@notreached@*/ break; case POPT_SHOWRC: rpmcliConfigured(); (void) rpmShowRC(stdout); /*@i@*/ con = rpmcliFini(con); exit(EXIT_SUCCESS); /*@notreached@*/ break; case POPT_QUERYTAGS: rpmDisplayQueryTags(NULL, NULL, NULL); /*@i@*/ con = rpmcliFini(con); exit(EXIT_SUCCESS); /*@notreached@*/ break; case RPMCLI_POPT_NODIGEST: rpmcliQueryFlags |= VERIFY_DIGEST; pgpDigVSFlags |= _RPMVSF_NODIGESTS; break; case RPMCLI_POPT_NOSIGNATURE: rpmcliQueryFlags |= VERIFY_SIGNATURE; pgpDigVSFlags |= _RPMVSF_NOSIGNATURES; break; case RPMCLI_POPT_NOHDRCHK: rpmcliQueryFlags |= VERIFY_HDRCHK; pgpDigVSFlags |= RPMVSF_NOHDRCHK; break; case RPMCLI_POPT_TARGETPLATFORM: if (rpmcliTargets == NULL) rpmcliTargets = xstrdup(arg); else { /*@-modobserver @*/ char * t = (char *) rpmcliTargets; size_t nb = strlen(t) + (sizeof(",")-1) + strlen(arg) + 1; /*@i@*/ t = xrealloc(t, nb); (void) stpcpy( stpcpy(t, ","), arg); rpmcliTargets = t; /*@=modobserver @*/ } break; } }