Create rpmtool to replace the toy example programs.
CVS patchset: 7283 CVS date: 2004/05/31 20:16:28
This commit is contained in:
parent
6fc421d235
commit
02eea0067f
|
@ -18,7 +18,7 @@ INCLUDES = -I. \
|
||||||
|
|
||||||
EXTRA_DIST = rpminject.c rpmsort.c hashtab.h
|
EXTRA_DIST = rpminject.c rpmsort.c hashtab.h
|
||||||
|
|
||||||
EXTRA_PROGRAMS = rpminject rpmsort
|
EXTRA_PROGRAMS = convertdb1 rpminject rpmsort rpmtool
|
||||||
|
|
||||||
LDADD = \
|
LDADD = \
|
||||||
$(top_builddir)/lib/librpm.la \
|
$(top_builddir)/lib/librpm.la \
|
||||||
|
@ -26,8 +26,8 @@ LDADD = \
|
||||||
|
|
||||||
staticLDFLAGS = @LDFLAGS_STATIC@ @LDFLAGS_NPTL@
|
staticLDFLAGS = @LDFLAGS_STATIC@ @LDFLAGS_NPTL@
|
||||||
|
|
||||||
noinst_PROGRAMS = \
|
noinst_PROGRAMS = rpmtool \
|
||||||
convertdb1 dump dumpdb rpmarchive rpmheader rpmlead rpmsignature
|
dump dumpdb rpmarchive
|
||||||
|
|
||||||
pkgbindir = @RPMCONFIGDIR@
|
pkgbindir = @RPMCONFIGDIR@
|
||||||
pkgbin_PROGRAMS = debugedit javadeps rpmcache rpmdeps rpmfile
|
pkgbin_PROGRAMS = debugedit javadeps rpmcache rpmdeps rpmfile
|
||||||
|
@ -66,4 +66,7 @@ rpminject_SOURCES = rpminject.c
|
||||||
rpmsort_SOURCES = rpmsort.c
|
rpmsort_SOURCES = rpmsort.c
|
||||||
#rpmsort_LDFLAGS = $(staticLDFLAGS)
|
#rpmsort_LDFLAGS = $(staticLDFLAGS)
|
||||||
|
|
||||||
|
rpmtool_SOURCES = rpmtool.c
|
||||||
|
#rpmtool_LDFLAGS = $(staticLDFLAGS)
|
||||||
|
|
||||||
$(PROGRAMS): $(LDADD)
|
$(PROGRAMS): $(LDADD)
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
/* rpmheader: spit out the header portion of a package */
|
|
||||||
|
|
||||||
#include "system.h"
|
|
||||||
|
|
||||||
#include <rpmlib.h>
|
|
||||||
#include "rpmlead.h"
|
|
||||||
#include "signature.h"
|
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
FD_t fdi, fdo;
|
|
||||||
struct rpmlead lead;
|
|
||||||
Header hd;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
setprogname(argv[0]); /* Retrofit glibc __progname */
|
|
||||||
if (argc == 1) {
|
|
||||||
fdi = Fopen("-", "r.ufdio");
|
|
||||||
} else {
|
|
||||||
fdi = Fopen(argv[1], "r.ufdio");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Ferror(fdi)) {
|
|
||||||
fprintf(stderr, "%s: %s: %s\n", argv[0],
|
|
||||||
(argc == 1 ? "<stdin>" : argv[1]), Fstrerror(fdi));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
readLead(fdi, &lead);
|
|
||||||
rpmReadSignature(fdi, NULL, lead.signature_type, NULL);
|
|
||||||
hd = headerRead(fdi, (lead.major >= 3) ?
|
|
||||||
HEADER_MAGIC_YES : HEADER_MAGIC_NO);
|
|
||||||
fdo = Fopen("-", "w.ufdio");
|
|
||||||
rc = headerWrite(fdo, hd, HEADER_MAGIC_YES);
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
/* rpmlead: spit out the lead portion of a package */
|
|
||||||
|
|
||||||
#include "system.h"
|
|
||||||
|
|
||||||
#include <rpmlib.h>
|
|
||||||
#include "rpmlead.h"
|
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
FD_t fdi, fdo;
|
|
||||||
struct rpmlead lead;
|
|
||||||
|
|
||||||
setprogname(argv[0]); /* Retrofit glibc __progname */
|
|
||||||
if (argc == 1) {
|
|
||||||
fdi = Fopen("-", "r.ufdio");
|
|
||||||
} else {
|
|
||||||
fdi = Fopen(argv[1], "r.ufdio");
|
|
||||||
}
|
|
||||||
if (fdi == NULL || Ferror(fdi)) {
|
|
||||||
fprintf(stderr, "%s: %s: %s\n", argv[0],
|
|
||||||
(argc == 1 ? "<stdin>" : argv[1]), Fstrerror(fdi));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
readLead(fdi, &lead);
|
|
||||||
fdo = Fopen("-", "w.ufdio");
|
|
||||||
writeLead(fdo, &lead);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
/* rpmsignature: spit out the signature portion of a package */
|
|
||||||
|
|
||||||
#include "system.h"
|
|
||||||
|
|
||||||
#include <rpmlib.h>
|
|
||||||
#include "rpmlead.h"
|
|
||||||
#include "signature.h"
|
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
FD_t fdi, fdo;
|
|
||||||
struct rpmlead lead;
|
|
||||||
Header sig;
|
|
||||||
|
|
||||||
setprogname(argv[0]); /* Retrofit glibc __progname */
|
|
||||||
if (argc == 1) {
|
|
||||||
fdi = Fopen("-", "r.ufdio");
|
|
||||||
} else {
|
|
||||||
fdi = Fopen(argv[1], "r.ufdio");
|
|
||||||
}
|
|
||||||
if (Ferror(fdi)) {
|
|
||||||
fprintf(stderr, "%s: %s: %s\n", argv[0],
|
|
||||||
(argc == 1 ? "<stdin>" : argv[1]), Fstrerror(fdi));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (readLead(fdi, &lead) != RPMRC_OK)
|
|
||||||
exit(1);
|
|
||||||
if (rpmReadSignature(fdi, &sig, lead.signature_type, NULL) == RPMRC_OK) {
|
|
||||||
fdo = Fopen("-", "w.ufdio");
|
|
||||||
rpmWriteSignature(fdo, sig);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -0,0 +1,244 @@
|
||||||
|
#include "system.h"
|
||||||
|
|
||||||
|
#include <rpmcli.h>
|
||||||
|
|
||||||
|
#include <rpmlead.h>
|
||||||
|
#include <signature.h>
|
||||||
|
#include "header_internal.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
typedef enum rpmtoolComponentBits_e {
|
||||||
|
RPMTOOL_NONE = 0,
|
||||||
|
RPMTOOL_LEAD = (1 << 0),
|
||||||
|
RPMTOOL_SHEADER = (1 << 1),
|
||||||
|
RPMTOOL_HEADER = (1 << 2),
|
||||||
|
RPMTOOL_DUMP = (1 << 3),
|
||||||
|
RPMTOOL_PAYLOAD = (1 << 4)
|
||||||
|
} rpmtoolComponentBits;
|
||||||
|
|
||||||
|
static rpmtoolComponentBits componentBits = RPMTOOL_NONE;
|
||||||
|
static const char * iav[] = { "-", NULL };
|
||||||
|
static const char * ifn = NULL;
|
||||||
|
static const char * ifmt = NULL;
|
||||||
|
static const char * oav[] = { "-", NULL };
|
||||||
|
static const char * ofn = NULL;
|
||||||
|
static const char * ofmt = NULL;
|
||||||
|
|
||||||
|
static int _rpmtool_debug = 0;
|
||||||
|
|
||||||
|
static struct poptOption optionsTable[] = {
|
||||||
|
{ "debug", 'd', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmtool_debug, -1,
|
||||||
|
NULL, NULL },
|
||||||
|
|
||||||
|
{ "lead", 'L', POPT_BIT_SET, &componentBits, RPMTOOL_LEAD,
|
||||||
|
N_("extract lead"), NULL},
|
||||||
|
{ "sheader", 'S', POPT_BIT_SET,&componentBits, RPMTOOL_SHEADER,
|
||||||
|
N_("extract signature header"), NULL},
|
||||||
|
{ "header", 'H', POPT_BIT_SET, &componentBits, RPMTOOL_HEADER,
|
||||||
|
N_("extract metadata header"), NULL},
|
||||||
|
{ "dump", 'D', POPT_BIT_SET, &componentBits, (RPMTOOL_HEADER|RPMTOOL_DUMP),
|
||||||
|
N_("extract metadata header"), NULL},
|
||||||
|
{ "payload", 'P', POPT_BIT_SET,&componentBits, RPMTOOL_PAYLOAD,
|
||||||
|
N_("extract payload"), NULL},
|
||||||
|
|
||||||
|
{ "file", 'f', POPT_ARG_STRING|POPT_ARGFLAG_DOC_HIDDEN, &ofn, 0,
|
||||||
|
N_("output FILE"), N_("FILE") },
|
||||||
|
|
||||||
|
{ NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
|
||||||
|
N_("Common options for all rpm modes and executables:"),
|
||||||
|
NULL },
|
||||||
|
|
||||||
|
POPT_AUTOALIAS
|
||||||
|
POPT_AUTOHELP
|
||||||
|
POPT_TABLEEND
|
||||||
|
};
|
||||||
|
|
||||||
|
static void initTool(const char * argv0)
|
||||||
|
{
|
||||||
|
setprogname(argv0);
|
||||||
|
/* XXX glibc churn sanity */
|
||||||
|
if (__progname == NULL) {
|
||||||
|
if ((__progname = strrchr(argv0, '/')) != NULL) __progname++;
|
||||||
|
else __progname = argv0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcmp(__progname, "rpmlead")) {
|
||||||
|
componentBits = RPMTOOL_LEAD;
|
||||||
|
ofmt = "lead";
|
||||||
|
}
|
||||||
|
if (!strcmp(__progname, "rpmsignature")) {
|
||||||
|
componentBits = RPMTOOL_SHEADER;
|
||||||
|
ofmt = NULL;
|
||||||
|
}
|
||||||
|
if (!strcmp(__progname, "rpmheader")) {
|
||||||
|
componentBits = RPMTOOL_HEADER;
|
||||||
|
ofmt = NULL;
|
||||||
|
}
|
||||||
|
if (!strcmp(__progname, "rpm2cpio")) {
|
||||||
|
componentBits = RPMTOOL_PAYLOAD;
|
||||||
|
ofmt = NULL;
|
||||||
|
}
|
||||||
|
if (!strcmp(__progname, "rpmpayload")) {
|
||||||
|
componentBits = RPMTOOL_PAYLOAD;
|
||||||
|
ofmt = NULL;
|
||||||
|
}
|
||||||
|
if (!strcmp(__progname, "dump")) {
|
||||||
|
componentBits = RPMTOOL_HEADER | RPMTOOL_DUMP;
|
||||||
|
ofmt = "dump";
|
||||||
|
}
|
||||||
|
if (!strcmp(__progname, "rpmdump")) {
|
||||||
|
componentBits = RPMTOOL_HEADER | RPMTOOL_DUMP;
|
||||||
|
ofmt = "dump";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *const argv[])
|
||||||
|
{
|
||||||
|
struct rpmlead lead;
|
||||||
|
Header sigh = NULL;
|
||||||
|
Header h = NULL;
|
||||||
|
FD_t fdi = NULL;
|
||||||
|
FD_t fdo = NULL;
|
||||||
|
const char ** av;
|
||||||
|
poptContext optCon;
|
||||||
|
int ec = 0;
|
||||||
|
int xx;
|
||||||
|
|
||||||
|
initTool(argv[0]); /* Retrofit glibc __progname */
|
||||||
|
|
||||||
|
optCon = rpmcliInit(argc, argv, optionsTable);
|
||||||
|
if (optCon == NULL)
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
|
||||||
|
av = poptGetArgs(optCon);
|
||||||
|
if (_rpmtool_debug)
|
||||||
|
fprintf(stderr, "*** av %p av[0] %p av[1] %p\n", av,
|
||||||
|
(av && av[0] ? av[0] : NULL),
|
||||||
|
(av && av[0] && av[1] ? av[1] : NULL));
|
||||||
|
if (av == NULL) av = iav;
|
||||||
|
|
||||||
|
while ((ifn = *av++) != NULL) {
|
||||||
|
|
||||||
|
if (fdi == NULL) {
|
||||||
|
if (_rpmtool_debug)
|
||||||
|
fprintf(stderr, "*** Fopen(%s,r.ufdio)\n", ifn);
|
||||||
|
fdi = Fopen(ifn, "r.ufdio");
|
||||||
|
if (fdi == NULL || Ferror(fdi)) {
|
||||||
|
fprintf(stderr, "%s: input Fopen(%s, \"r\"): %s\n", __progname,
|
||||||
|
ifn, Fstrerror(fdi));
|
||||||
|
ec++;
|
||||||
|
goto bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fdo == NULL) {
|
||||||
|
if (_rpmtool_debug)
|
||||||
|
fprintf(stderr, "*** Fopen(%s,w.ufdio)\n", (ofn != NULL ? ofn : "-"));
|
||||||
|
fdo = (ofn != NULL ? Fopen(ofn, "w.ufdio") : fdDup(STDOUT_FILENO));
|
||||||
|
if (fdo == NULL || Ferror(fdo)) {
|
||||||
|
fprintf(stderr, "%s: output Fopen(%s, \"w\"): %s\n", __progname,
|
||||||
|
(ofn != NULL ? ofn : "<stdout>"), Fstrerror(fdo));
|
||||||
|
ec++;
|
||||||
|
goto bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read/write package lead. */
|
||||||
|
if (readLead(fdi, &lead) != RPMRC_OK) {
|
||||||
|
ec++;
|
||||||
|
goto bottom;
|
||||||
|
}
|
||||||
|
if (componentBits & RPMTOOL_LEAD)
|
||||||
|
writeLead(fdo, &lead);
|
||||||
|
|
||||||
|
/* Read/write signature header. */
|
||||||
|
if (rpmReadSignature(fdi, &sigh, lead.signature_type, NULL) != RPMRC_OK)
|
||||||
|
{
|
||||||
|
ec++;
|
||||||
|
goto bottom;
|
||||||
|
}
|
||||||
|
if (componentBits & RPMTOOL_SHEADER)
|
||||||
|
rpmWriteSignature(fdo, sigh);
|
||||||
|
|
||||||
|
/* Read/write metadata header. */
|
||||||
|
h = headerRead(fdi,
|
||||||
|
(lead.major >= 3) ? HEADER_MAGIC_YES : HEADER_MAGIC_NO);
|
||||||
|
if (h == NULL) {
|
||||||
|
ec++;
|
||||||
|
goto bottom;
|
||||||
|
}
|
||||||
|
if (componentBits & RPMTOOL_HEADER) {
|
||||||
|
if ((componentBits & RPMTOOL_DUMP)
|
||||||
|
|| (ofmt != NULL && !strcmp(ofmt, "dump")))
|
||||||
|
headerDump(h, stdout, HEADER_DUMP_INLINE, rpmTagTable);
|
||||||
|
else
|
||||||
|
headerWrite(fdo, h, HEADER_MAGIC_YES);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read/write package payload. */
|
||||||
|
if (componentBits & RPMTOOL_PAYLOAD) {
|
||||||
|
const char * payload_compressor = NULL;
|
||||||
|
const char * rpmio_flags;
|
||||||
|
FD_t gzdi;
|
||||||
|
rpmRC rc;
|
||||||
|
char * t;
|
||||||
|
|
||||||
|
/* Retrieve type of payload compression. */
|
||||||
|
if (!headerGetEntry(h, RPMTAG_PAYLOADCOMPRESSOR, NULL,
|
||||||
|
(void **) &payload_compressor, NULL))
|
||||||
|
payload_compressor = "gzip";
|
||||||
|
rpmio_flags = t = alloca(sizeof("r.gzdio"));
|
||||||
|
*t++ = 'r';
|
||||||
|
if (!strcmp(payload_compressor, "gzip"))
|
||||||
|
t = stpcpy(t, ".gzdio");
|
||||||
|
if (!strcmp(payload_compressor, "bzip2"))
|
||||||
|
t = stpcpy(t, ".bzdio");
|
||||||
|
|
||||||
|
gzdi = Fdopen(fdi, rpmio_flags); /* XXX gzdi == fdi */
|
||||||
|
if (gzdi == NULL) {
|
||||||
|
fprintf(stderr, "%s: output Fdopen(%s, \"%s\"): %s\n", __progname,
|
||||||
|
(ofn != NULL ? ofn : "-"), rpmio_flags, Fstrerror(fdo));
|
||||||
|
fprintf(stderr, _("cannot re-open payload: %s\n"), Fstrerror(gzdi));
|
||||||
|
ec++;
|
||||||
|
goto bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = ufdCopy(gzdi, fdo);
|
||||||
|
Fclose(gzdi); /* XXX gzdi == fdi */
|
||||||
|
if (rc <= 0) {
|
||||||
|
ec++;
|
||||||
|
goto bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bottom:
|
||||||
|
sigh = headerFree(sigh);
|
||||||
|
h = headerFree(h);
|
||||||
|
|
||||||
|
if (fdi != NULL && Fileno(fdi) != STDIN_FILENO) {
|
||||||
|
xx = Fclose(fdi);
|
||||||
|
fdi = NULL;
|
||||||
|
}
|
||||||
|
if (fdo != NULL && Fileno(fdo) != STDOUT_FILENO) {
|
||||||
|
xx = Fclose(fdo);
|
||||||
|
fdo = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
sigh = headerFree(sigh);
|
||||||
|
h = headerFree(h);
|
||||||
|
|
||||||
|
if (fdi != NULL && Fileno(fdi) != STDIN_FILENO) {
|
||||||
|
xx = Fclose(fdi);
|
||||||
|
fdi = NULL;
|
||||||
|
}
|
||||||
|
if (fdo != NULL && Fileno(fdo) != STDOUT_FILENO) {
|
||||||
|
xx = Fclose(fdi);
|
||||||
|
fdi = NULL;
|
||||||
|
}
|
||||||
|
optCon = rpmcliFini(optCon);
|
||||||
|
|
||||||
|
return ec;
|
||||||
|
}
|
Loading…
Reference in New Issue