4 #if defined(WITH_XAR) && defined(HAVE_XAR_H)
8 #if defined(__LCLINT__)
27 const char *
name,
char *buffer,
size_t length)
31 char **buffer,
size_t *size)
44 #define xar_open(_fn, _f) (NULL)
45 #define xar_close(_x) (1)
46 #define xar_iter_new() (NULL)
47 #define xar_iter_free(_i)
48 #define xar_file_first(_x, _i) (NULL)
49 #define xar_file_next(_i) (NULL)
50 #define xar_add_frombuffer(_x, _parent, _fn, _b, _bsize) (NULL)
51 #define xar_extract_tobuffersz(_x, _f, _b, _bsize) (1)
52 #define xar_get_path(_f) "*No XAR*"
53 #define xar_opt_set(_a1, _a2, _a3) (1)
54 #define XAR_OPT_COMPRESSION 0
55 #define XAR_OPT_VAL_NONE 0
56 #define XAR_OPT_VAL_GZIP 0
59 #define _RPMXAR_INTERNAL
91 xar->member =
_free(xar->member);
92 xar->b =
_free(xar->b);
102 if (_xarPool == NULL) {
108 memset(((
char *)xar)+
sizeof(xar->_item), 0,
sizeof(*xar)-
sizeof(xar->_item));
115 int flags = ((fmode && *fmode ==
'w') ?
WRITE :
READ);
124 fprintf(stderr,
"<-- %s(%s,%s) xar %p i %p x %p first %d\n", __FUNCTION__, fn, fmode, xar, xar->i, xar->x, xar->first);
133 fprintf(stderr,
"--> %s(%p) i %p x %p first %d\n", __FUNCTION__, xar, (xar ? xar->i : NULL), (xar ? xar->x : NULL), (xar ? xar->first : -1));
142 rc = (xar && xar->f ? 0 : 1);
143 if (
_xar_debug)fprintf(stderr,
"<-- %s(%p) rc %d\n", __FUNCTION__, xar, rc);
149 int payload = !strcmp(fn,
"Payload");
153 fprintf(stderr,
"--> rpmxarPush(%p, %s) %p[%u] %02x%02x%02x%02x%02x%02x%02x%02x\n", xar, fn, b, (
unsigned)bsize, b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7]);
156 if (xar->x && b != NULL) {
174 if (fn != NULL && strcmp(fn, path)) {
178 xar->member =
_free(xar->member);
181 xar->b =
_free(xar->b);
182 xar->bsize = xar->bx = 0;
192 unsigned char * b = xar->b;
193 size_t bsize = xar->bsize;
194 fprintf(stderr,
"<-- rpmxarPull(%p, %s) %p[%u] %02x%02x%02x%02x%02x%02x%02x%02x\n", xar, fn, b, (
unsigned)bsize, b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7]);
204 unsigned char ** obp,
size_t * obsizep)
207 fprintf(stderr,
"--> rpmxarSwapBuf(%p, %p[%u], %p, %p) %p[%u]\n", xar, b, (
unsigned) bsize, obp, obsizep, xar->b, (
unsigned) xar->bsize);
211 *obsizep = xar->bsize;
218 xar->b =
_free(xar->b);
229 ssize_t
xarRead(
void * cookie,
char * buf,
size_t count)
242 rc = xar->bsize - xar->bx;
244 if (count < (
size_t)rc) rc = count;
245 assert(xar->b != NULL);
246 memmove(buf, &xar->b[xar->bx], rc);
255 fprintf(stderr,
"<-- %s(%p,%p,0x%x) %s %p[%u:%u] rc 0x%x\n", __FUNCTION__, cookie, buf, (
unsigned)count, (xar->member ? xar->member :
"(nil)"), xar->b, (
unsigned)xar->bx, (
unsigned)xar->bsize, (
unsigned)rc);
262 const char * path = (xar && xar->f ?
xar_get_path(xar->f) : NULL);
264 fprintf(stderr,
"<-- %s(%p) %s\n", __FUNCTION__, xar, path);
273 const char * t = NULL;
275 xar_prop_get(xar->f,
"mode", &t);
276 m = (t ? (mode_t) strtoll(t, NULL, 8) : 0);
278 xar_prop_get(xar->f,
"type", &t);
279 if (!strcmp(t,
"file"))
281 else if (!strcmp(t,
"hardlink"))
283 else if (!strcmp(t,
"directory"))
285 else if (!strcmp(t,
"symlink"))
287 else if (!strcmp(t,
"fifo"))
289 else if (!strcmp(t,
"character special"))
291 else if (!strcmp(t,
"block special"))
293 else if (!strcmp(t,
"socket"))
296 else if (!strcmp(t,
"whiteout"))
310 const char *t = NULL;
312 xar_prop_get(xar->f,
"device/major", &t);
313 major = (t ? (unsigned) strtoll(t, NULL, 0) : 0);
314 xar_prop_get(xar->f,
"device/minor", &t);
315 minor = (t ? (unsigned) strtoll(t, NULL, 0) : 0);
320 return (major << 8) |
minor;
330 #if defined(HAVE_XAR_GET_SIZE)
331 t = xar_get_size(xar->x, xar->f);
332 ll = strtoll(t, NULL, 0);
335 xar_prop_get(xar->f,
"data/size", &t);
337 ll = strtoll(t, NULL, 0);
348 const char * t = NULL;
350 xar_prop_get(xar->f,
"user", &t);
352 xar_prop_get(xar->f,
"uid", &t);
353 u = (t ? (uid_t) strtoll(t, NULL, 0) : getuid());
364 const char * t = NULL;
366 xar_prop_get(xar->f,
"group", &t);
368 xar_prop_get(xar->f,
"gid", &t);
369 g = (t ? (gid_t) strtoll(t, NULL, 0) : getgid());
379 const char * t = NULL;
381 xar_prop_get(xar->f, tprop, &t);
384 strptime(t,
"%FT%T", &tm);
385 tv->tv_sec = timegm(&tm);
390 tv->tv_sec = time(NULL);
401 memset(st, 0,
sizeof(*st));
402 st->st_dev = (dev_t)0;
406 st->st_nlink = (S_ISDIR(st->st_mode) ? 2 : 1);
409 st->st_rdev = (S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode))
412 st->st_blksize = (blksize_t) 0;
413 st->st_blocks = (blkcnt_t) 0;
414 xarTime(xar,
"atime", (
struct timeval *)&st->st_atime);
415 xarTime(xar,
"ctime", (
struct timeval *)&st->st_ctime);
416 xarTime(xar,
"mtime", (
struct timeval *)&st->st_mtime);
421 fprintf(stderr,
"<-- %s(%p,%p) rc %d\n", __FUNCTION__, xar, st, rc);