static void print_file(xar_t x, xar_file_t f) { if( List && Verbose ) { char *size = xar_get_size(x, f); char *path = xar_get_path(f); char *type = xar_get_type(x, f); char *mode = xar_get_mode(x, f); char *user = xar_get_owner(x, f); char *group = xar_get_group(x, f); char *mtime = xar_get_mtime(x, f); printf("%s %8s/%-8s %10s %s %s\n", mode, user, group, size, mtime, path); free(size); free(type); free(path); free(mode); free(user); free(group); free(mtime); } else if( List || Verbose ) { char *path = xar_get_path(f); if (xar_path_issane(path) == 0) printf("Warning, archive contains invalid path: %s\n", path); else printf("%s\n", path); free(path); } }
static void print_file(xar_t x, xar_file_t f) { if( List && Verbose ) { char *size = xar_get_size(x, f); char *path = xar_get_path(f); char *type = xar_get_type(x, f); char *mode = xar_get_mode(x, f); char *user = xar_get_owner(x, f); char *group = xar_get_group(x, f); char *mtime = xar_get_mtime(x, f); printf("%s %8s/%-8s %10s %s %s\n", mode, user, group, size, mtime, path); free(size); free(type); free(path); free(mode); free(user); free(group); free(mtime); } else if( List || Verbose ) { char *path = xar_get_path(f); printf("%s\n", path); free(path); } }
int pkg_toc_process(const char *path, const char *toc) { u_int32_t pkgid; xar_t x; xar_iter_t i; xar_file_t f; struct vfs_fake_stat sb; if (!(x = xar_open(path, READ))) { Log(LOG_ERROR, "failed opening package %s", path); return EXIT_FAILURE; } xar_register_errhandler(x, pkg_xar_err_callback, NULL); if (!(i = xar_iter_new())) { Log(LOG_ERROR, "failed getting new xar iter in pkg %s", path); return EXIT_FAILURE; } db_pkg_remove(path); pkgid = db_pkg_add(path); fprintf(stderr, "id: %d\n", pkgid); for (f = xar_file_first(x, i); f; f = xar_file_next(i)) { char *size = xar_get_size(x, f); char *xpath = xar_get_path(f); char *xtype = xar_get_type(x, f); char *mode = xar_get_mode(x, f); char *user = xar_get_owner(x, f); char *group = xar_get_group(x, f); char *mtime = xar_get_mtime(x, f); const char *offset; char type = 'u'; /* * (f)ile, (d)irectory, (l)ink, (p)ipe * f(i)fo, (c)haracter, (b)lock, (s)ocket, * (u)ndefined */ if (!strcasecmp(xtype, "file")) { xar_prop_get(f, "data/offset", &offset); type = 'f'; } else { offset = "0"; if (!strcasecmp(xtype, "directory")) type = 'd'; else if (!strcasecmp(xtype, "hardlink")) type = 'l'; else if (!strcasecmp(xtype, "symlink")) type = 'l'; } #if 0 /* * what we gonna do with target? */ printf("%s: %s %8s/%-8s %10s %s %s @ %s\n", xtype, mode, user, group, size, mtime, xpath, offset); db_query(QUERY_INT, "INSERT INTO files (package, path, type, owner, group, size, offset, ctime, mode) VALUES (%lu, '%s', '%s', %s, %s, %s, %s, %s, %s, %s);", pkgid, xpath, type, user, group, size, offset, mtime); #endif free(mtime); free(group); free(user); free(mode); free(xtype); free(xpath); free(size); } return EXIT_SUCCESS; }