9 #define _RPMWF_INTERNAL
26 if (!strcmp(fn,
"Lead")) {
30 if (!strcmp(fn,
"Signature")) {
34 if (!strcmp(fn,
"Header")) {
38 if (!strcmp(fn,
"Payload")) {
44 fprintf(stderr,
"==> rpmwfPushXAR(%p, %s) %p[%u]\n", wf, fn, b, (
unsigned) nb);
48 xx =
rpmxarPush(wf->xar, fn, (
unsigned char *)b, nb);
62 xx =
rpmxarSwapBuf(wf->xar, NULL, 0, (
unsigned char **)&b, &nb);
65 fprintf(stderr,
"==> rpmwfPullXAR(%p, %s) %p[%u]\n", wf, fn, b, (
unsigned) nb);
67 if (!strcmp(fn,
"Lead")) {
71 if (!strcmp(fn,
"Signature")) {
75 if (!strcmp(fn,
"Header")) {
79 if (!strcmp(fn,
"Payload")) {
93 fprintf(stderr,
"==> rpmwfFini(%p)\n", wf);
95 if (wf->b && wf->b != (
void *)-1) {
96 xx = munmap(wf->b, wf->nb);
109 return (8 + 8 + 16 * ntohl(p[2]) + ntohl(p[3]));
115 fprintf(stderr,
"==> rpmwfInit(%p, %s, %s)\n", wf, fn, fmode);
121 wf->fd =
Fopen(fn, fmode);
123 if (wf->fd == NULL ||
Ferror(wf->fd)) {
128 if (fmode && *fmode ==
'r') {
129 wf->b = mmap(NULL, wf->nb, PROT_READ, MAP_SHARED,
Fileno(wf->fd), 0
L);
131 if (wf->b == (
void *)-1) {
137 wf->l = (
char *) wf->b;
138 assert(wf->l != NULL);
141 wf->s = wf->l + wf->nl;
143 wf->ns += ((8 - (wf->ns % 8)) % 8);
145 wf->h = wf->s + wf->ns;
148 wf->p = wf->h + wf->nh;
150 wf->np -= wf->nl + wf->ns + wf->nh;
161 if (!strcmp(fn,
"Lead")) {
165 if (!strcmp(fn,
"Signature")) {
169 if (!strcmp(fn,
"Header")) {
173 if (!strcmp(fn,
"Payload")) {
182 fprintf(stderr,
"==> rpmwfPushRPM(%p, %s) %p[%u]\n", wf, fn, b, (
unsigned) nb);
184 if (
Fwrite(b,
sizeof(b[0]), nb, wf->fd) != nb)
199 wf->l =
_free(wf->l);
200 wf->s =
_free(wf->s);
201 wf->h =
_free(wf->h);
202 wf->p =
_free(wf->p);
209 wf->fn =
_free(wf->fn);
222 if (_rpmwfPool == NULL) {
232 struct stat sb, *st = &sb;
237 if ((xx =
Stat(fn, st)) < 0)
242 wf->nb = (size_t)st->st_size;
251 fprintf(stderr,
"\t%s:\t%p[%u]\t%02x%02x%02x%02x%02x%02x%02x%02x\n", item, b, (
unsigned)bsize, b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7]);
259 fprintf(stderr,
"==> %s(%s) wf %p\n", msg, fn, wf);
298 if (wf->xar == NULL) {
348 fprintf(stderr,
"==> wrRPM(%s) wf %p\n\tLead %p[%u]\n\tSignature %p[%u]\n\tHeader %p[%u]\n\tPayload %p[%u]\n", rpmfn, wf, wf->l, (
unsigned)wf->nl, wf->s, (
unsigned) wf->ns, wf->h, (
unsigned) wf->nh, wf->p, (
unsigned) wf->np);
Structure(s)and methods for a XAR archive wrapper format.
Structure(s)and methods for a archive wrapper format (e.g.
rpmRC rpmwfFini(rpmwf wf)
rpmwf rdRPM(const char *rpmfn)
rpmRC wrRPM(const char *rpmfn, rpmwf wf)
static void rpmwfDump(rpmwf wf, const char *msg, const char *fn)
size_t Fwrite(const void *buf, size_t size, size_t nmemb, FD_t fd)
fwrite(3) clone.
char * xstrdup(const char *str)
FD_t Fopen(const char *path, const char *_fmode)
fopen(3) clone.
int rpmxarNext(rpmxar xar)
Iterate a xar archive instance.
int Stat(const char *path, struct stat *st)
stat(2) clone.
static void rpmwfDumpItem(const char *item, unsigned char *b, size_t bsize)
int rpmxarPush(rpmxar xar, const char *fn, unsigned char *b, size_t bsize)
int rpmxarPull(rpmxar xar, const char *fn)
rpmioItem rpmioGetPool(rpmioPool pool, size_t size)
Get unused item from pool, or alloc a new item.
rpmRC rpmwfPullXAR(rpmwf wf, const char *fn)
static void rpmwfScrub(void *_wf)
static size_t hSize(rpmuint32_t *p)
rpmwf rpmwfNew(const char *fn)
rpmRC rpmwfPushXAR(rpmwf wf, const char *fn)
int Fclose(FD_t fd)
fclose(3) clone.
rpmwf rpmwfFree(rpmwf wf)
rpmwf rpmwfLink(rpmwf wf, const char *msg)
Reference a wrapper format instance.
enum rpmRC_e rpmRC
RPM return codes.
int Ferror(FD_t fd)
ferror(3) clone.
static rpmwf rpmwfGetPool(rpmioPool pool)
rpmioPool rpmioNewPool(const char *name, size_t size, int limit, int flags, char *(*dbg)(void *item), void(*init)(void *item), void(*fini)(void *item))
Create a memory pool.
int rpmxarSwapBuf(rpmxar xar, unsigned char *b, size_t bsize, unsigned char **obp, size_t *obsizep)
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
rpmRC rpmwfPushRPM(rpmwf wf, const char *fn)
rpmRC wrXAR(const char *xarfn, rpmwf wf)
rpmRC rpmwfInit(rpmwf wf, const char *fn, const char *fmode)
int Fileno(FD_t fd)
fileno(3) clone.
rpmxar rpmxarFree(rpmxar xar, const char *msg)
Destroy a xar archive instance.
rpmxar rpmxarNew(const char *fn, const char *fmode)
Create a xar archive instance.
rpmwf rdXAR(const char *xarfn)