Lines Matching defs:mtree

216 				 * directory files, like mtree(8) -d option. */
219 * global values. When generating mtree
368 * Indent a line as mtree utility to be readable for people.
371 mtree_indent(struct mtree_writer *mtree)
376 if (mtree->classic) {
377 if (mtree->indent) {
379 pd = mtree->depth * 4;
381 nd = mtree->depth?4:0;
387 s = r = mtree->ebuf.s;
395 archive_strappend_char(&mtree->buf, ' ');
396 archive_strncat(&mtree->buf, s, r - s);
398 archive_strncat(&mtree->buf, " \\\n", 3);
400 archive_strappend_char(&mtree->buf, ' ');
404 archive_strappend_char(&mtree->buf, ' ');
415 archive_strncat(&mtree->buf, s, x - s);
416 archive_strncat(&mtree->buf, " \\\n", 3);
418 archive_strappend_char(&mtree->buf, ' ');
425 archive_strappend_char(&mtree->buf, ' ');
426 archive_strcat(&mtree->buf, s);
431 archive_strncat(&mtree->buf, s, x - s);
432 archive_strncat(&mtree->buf, " \\\n", 3);
434 archive_strappend_char(&mtree->buf, ' ');
437 archive_strcat(&mtree->buf, s);
438 archive_string_empty(&mtree->ebuf);
447 write_global(struct mtree_writer *mtree)
456 keys = mtree->keys & SET_KEYS;
457 oldkeys = mtree->set.keys;
459 acs = &mtree->acs;
460 if (mtree->set.processing) {
469 mtree->set.uid == acs->uid_list->m_entry->uid)
476 mtree->set.gid == acs->gid_list->m_entry->gid)
483 mtree->set.mode == acs->mode_list->m_entry->mode)
491 mtree->set.fflags_set &&
493 mtree->set.fflags_clear))
507 if (mtree->dironly) {
509 mtree->set.type = AE_IFDIR;
512 mtree->set.type = AE_IFREG;
526 mtree->set.uid = acs->uid_list->m_entry->uid;
528 (intmax_t)mtree->set.uid);
541 mtree->set.gid = acs->gid_list->m_entry->gid;
543 (intmax_t)mtree->set.gid);
546 mtree->set.mode = acs->mode_list->m_entry->mode;
548 (unsigned int)mtree->set.mode);
556 mtree->set.fflags_set =
558 mtree->set.fflags_clear =
567 archive_string_sprintf(&mtree->buf, "/unset%s\n", unsetstr.s);
570 archive_string_sprintf(&mtree->buf, "/set%s\n", setstr.s);
572 mtree->set.keys = keys;
573 mtree->set.processing = 1;
649 attr_counter_set_collect(struct mtree_writer *mtree, struct mtree_entry *me)
652 struct att_counter_set *acs = &mtree->acs;
653 int keys = mtree->keys;
726 attr_counter_set_free(struct mtree_writer *mtree)
728 struct att_counter_set *acs = &mtree->acs;
737 get_global_set_keys(struct mtree_writer *mtree, struct mtree_entry *me)
741 keys = mtree->keys;
747 if (mtree->set.keys == 0)
750 if ((mtree->set.keys & (F_GNAME | F_GID)) != 0 &&
751 mtree->set.gid == me->gid)
753 if ((mtree->set.keys & (F_UNAME | F_UID)) != 0 &&
754 mtree->set.uid == me->uid)
756 if (mtree->set.keys & F_FLAGS) {
757 if (mtree->set.fflags_set == me->fflags_set &&
758 mtree->set.fflags_clear == me->fflags_clear)
761 if ((mtree->set.keys & F_MODE) != 0 && mtree->set.mode == me->mode)
769 if ((mtree->set.keys & F_TYPE) != 0 &&
770 mtree->set.type == AE_IFDIR)
775 if ((mtree->set.keys & F_TYPE) != 0 &&
776 mtree->set.type == AE_IFREG)
798 "Can't allocate memory for a mtree entry");
834 "Can't allocate memory for a mtree entry");
847 "Can't allocate memory for a mtree entry");
877 struct mtree_writer *mtree= a->format_data;
881 if (mtree->first) {
882 mtree->first = 0;
883 archive_strcat(&mtree->buf, "#mtree\n");
884 if ((mtree->keys & SET_KEYS) == 0)
885 mtree->output_global_set = 0;/* Disalbed. */
888 mtree->entry_bytes_remaining = archive_entry_size(entry);
891 if (mtree->dironly && archive_entry_filetype(entry) != AE_IFDIR)
902 mtree->mtree_entry = mtree_entry;
908 sum_init(mtree);
916 struct mtree_writer *mtree = a->format_data;
921 if (mtree->classic) {
924 * pathname of the entry as mtree utility does
927 if (!mtree->dironly)
928 archive_strappend_char(&mtree->buf, '\n');
930 archive_string_sprintf(&mtree->buf,
934 archive_string_sprintf(&mtree->buf,
938 if (mtree->output_global_set)
939 write_global(mtree);
941 archive_string_empty(&mtree->ebuf);
942 str = (mtree->indent || mtree->classic)? &mtree->ebuf : &mtree->buf;
944 if (!mtree->classic && me->parentdir.s) {
954 keys = get_global_set_keys(mtree, me);
971 } else if (mtree->set.processing &&
972 (mtree->set.keys & F_FLAGS) != 0)
1042 if (mtree->indent || mtree->classic)
1043 mtree_indent(mtree);
1045 if (mtree->buf.length > 32768) {
1047 a, mtree->buf.s, mtree->buf.length);
1048 archive_string_empty(&mtree->buf);
1057 struct mtree_writer *mtree = a->format_data;
1061 if (mtree->indent) {
1062 int i, pd = mtree->depth * 4;
1064 archive_strappend_char(&mtree->buf, ' ');
1066 archive_string_sprintf(&mtree->buf, "# %s/%s\n",
1070 if (mtree->indent) {
1071 archive_string_empty(&mtree->ebuf);
1072 archive_strncat(&mtree->ebuf, "..\n\n", (mtree->dironly)?3:4);
1073 mtree_indent(mtree);
1075 archive_strncat(&mtree->buf, "..\n\n", (mtree->dironly)?3:4);
1077 if (mtree->buf.length > 32768) {
1079 a, mtree->buf.s, mtree->buf.length);
1080 archive_string_empty(&mtree->buf);
1087 * Write mtree entries saved at attr_counter_set_collect() function.
1092 struct mtree_writer *mtree = a->format_data;
1093 struct mtree_entry *np = mtree->root;
1098 if (mtree->output_global_set) {
1103 attr_counter_set_reset(mtree);
1106 if (attr_counter_set_collect(mtree, e) < 0) {
1113 if (!np->dir_info->virtual || mtree->classic) {
1123 if (mtree->output_global_set)
1124 write_global(mtree);
1129 mtree->depth++;
1141 mtree->depth--;
1148 if (mtree->indent)
1149 mtree->depth++;
1151 } else if (mtree->classic) {
1153 * While printing mtree classic, if there are not
1168 if (mtree->indent)
1169 mtree->depth--;
1170 if (mtree->classic) {
1179 * Switch to next mtree entry in the directory.
1193 struct mtree_writer *mtree = a->format_data;
1196 if ((me = mtree->mtree_entry) == NULL)
1198 mtree->mtree_entry = NULL;
1201 sum_final(mtree, me->reg_info);
1209 struct mtree_writer *mtree= a->format_data;
1212 if (mtree->root != NULL) {
1220 return __archive_write_output(a, mtree->buf.s, mtree->buf.length);
1226 struct mtree_writer *mtree= a->format_data;
1228 if (n > mtree->entry_bytes_remaining)
1229 n = (size_t)mtree->entry_bytes_remaining;
1230 mtree->entry_bytes_remaining -= n;
1233 if (mtree->mtree_entry == NULL)
1236 if (mtree->mtree_entry->filetype == AE_IFREG)
1237 sum_update(mtree, buff, n);
1245 struct mtree_writer *mtree= a->format_data;
1247 if (mtree == NULL)
1251 mtree_entry_register_free(mtree);
1252 archive_string_free(&mtree->cur_dirstr);
1253 archive_string_free(&mtree->ebuf);
1254 archive_string_free(&mtree->buf);
1255 attr_counter_set_free(mtree);
1256 free(mtree);
1265 struct mtree_writer *mtree= a->format_data;
1281 mtree->dironly = (value != NULL)? 1: 0;
1297 mtree->indent = (value != NULL)? 1: 0;
1350 mtree->output_global_set = (value != NULL)? 1: 0;
1357 mtree->keys |= keybit;
1359 mtree->keys &= ~keybit;
1373 struct mtree_writer *mtree;
1380 if ((mtree = calloc(1, sizeof(*mtree))) == NULL) {
1382 "Can't allocate mtree data");
1386 mtree->mtree_entry = NULL;
1387 mtree->first = 1;
1388 memset(&(mtree->set), 0, sizeof(mtree->set));
1389 mtree->keys = DEFAULT_KEYS;
1390 mtree->dironly = 0;
1391 mtree->indent = 0;
1392 archive_string_init(&mtree->ebuf);
1393 archive_string_init(&mtree->buf);
1394 mtree_entry_register_init(mtree);
1395 a->format_data = mtree;
1397 a->format_name = "mtree";
1404 a->archive.archive_format_name = "mtree";
1425 struct mtree_writer *mtree;
1427 mtree = (struct mtree_writer *)a->format_data;
1429 /* Set to output a mtree archive in classic format. */
1430 mtree->classic = 1;
1431 /* Basically, mtree classic format uses '/set' global
1433 mtree->output_global_set = 1;
1439 sum_init(struct mtree_writer *mtree)
1442 mtree->compute_sum = 0;
1444 if (mtree->keys & F_CKSUM) {
1445 mtree->compute_sum |= F_CKSUM;
1446 mtree->crc = 0;
1447 mtree->crc_len = 0;
1450 if (mtree->keys & F_MD5) {
1451 if (archive_md5_init(&mtree->md5ctx) == ARCHIVE_OK)
1452 mtree->compute_sum |= F_MD5;
1454 mtree->keys &= ~F_MD5;/* Not supported. */
1458 if (mtree->keys & F_RMD160) {
1459 if (archive_rmd160_init(&mtree->rmd160ctx) == ARCHIVE_OK)
1460 mtree->compute_sum |= F_RMD160;
1462 mtree->keys &= ~F_RMD160;/* Not supported. */
1466 if (mtree->keys & F_SHA1) {
1467 if (archive_sha1_init(&mtree->sha1ctx) == ARCHIVE_OK)
1468 mtree->compute_sum |= F_SHA1;
1470 mtree->keys &= ~F_SHA1;/* Not supported. */
1474 if (mtree->keys & F_SHA256) {
1475 if (archive_sha256_init(&mtree->sha256ctx) == ARCHIVE_OK)
1476 mtree->compute_sum |= F_SHA256;
1478 mtree->keys &= ~F_SHA256;/* Not supported. */
1482 if (mtree->keys & F_SHA384) {
1483 if (archive_sha384_init(&mtree->sha384ctx) == ARCHIVE_OK)
1484 mtree->compute_sum |= F_SHA384;
1486 mtree->keys &= ~F_SHA384;/* Not supported. */
1490 if (mtree->keys & F_SHA512) {
1491 if (archive_sha512_init(&mtree->sha512ctx) == ARCHIVE_OK)
1492 mtree->compute_sum |= F_SHA512;
1494 mtree->keys &= ~F_SHA512;/* Not supported. */
1500 sum_update(struct mtree_writer *mtree, const void *buff, size_t n)
1502 if (mtree->compute_sum & F_CKSUM) {
1510 COMPUTE_CRC(mtree->crc, *p);
1511 mtree->crc_len += n;
1514 if (mtree->compute_sum & F_MD5)
1515 archive_md5_update(&mtree->md5ctx, buff, n);
1518 if (mtree->compute_sum & F_RMD160)
1519 archive_rmd160_update(&mtree->rmd160ctx, buff, n);
1522 if (mtree->compute_sum & F_SHA1)
1523 archive_sha1_update(&mtree->sha1ctx, buff, n);
1526 if (mtree->compute_sum & F_SHA256)
1527 archive_sha256_update(&mtree->sha256ctx, buff, n);
1530 if (mtree->compute_sum & F_SHA384)
1531 archive_sha384_update(&mtree->sha384ctx, buff, n);
1534 if (mtree->compute_sum & F_SHA512)
1535 archive_sha512_update(&mtree->sha512ctx, buff, n);
1540 sum_final(struct mtree_writer *mtree, struct reg_info *reg)
1543 if (mtree->compute_sum & F_CKSUM) {
1546 for (len = mtree->crc_len; len != 0; len >>= 8)
1547 COMPUTE_CRC(mtree->crc, len & 0xff);
1548 reg->crc = ~mtree->crc;
1551 if (mtree->compute_sum & F_MD5)
1552 archive_md5_final(&mtree->md5ctx, reg->buf_md5);
1555 if (mtree->compute_sum & F_RMD160)
1556 archive_rmd160_final(&mtree->rmd160ctx, reg->buf_rmd160);
1559 if (mtree->compute_sum & F_SHA1)
1560 archive_sha1_final(&mtree->sha1ctx, reg->buf_sha1);
1563 if (mtree->compute_sum & F_SHA256)
1564 archive_sha256_final(&mtree->sha256ctx, reg->buf_sha256);
1567 if (mtree->compute_sum & F_SHA384)
1568 archive_sha384_final(&mtree->sha384ctx, reg->buf_sha384);
1571 if (mtree->compute_sum & F_SHA512)
1572 archive_sha512_final(&mtree->sha512ctx, reg->buf_sha512);
1575 reg->compute_sum = mtree->compute_sum;
1823 * to add "./" to the head of the pathename because mtree reader
1824 * will suppose that it is v1(a.k.a classic) mtree format and
1900 mtree_entry_register_add(struct mtree_writer *mtree, struct mtree_entry *file)
1903 *mtree->file_list.last = file;
1904 mtree->file_list.last = &(file->next);
1908 mtree_entry_register_init(struct mtree_writer *mtree)
1910 mtree->file_list.first = NULL;
1911 mtree->file_list.last = &(mtree->file_list.first);
1915 mtree_entry_register_free(struct mtree_writer *mtree)
1919 file = mtree->file_list.first;
1985 struct mtree_writer *mtree = (struct mtree_writer *)a->format_data;
1994 if (mtree->root != NULL) {
1995 np = mtree->root;
1998 mtree->root = file;
1999 mtree_entry_register_add(mtree, file);
2018 if (archive_strlen(&(mtree->cur_dirstr))
2020 strcmp(mtree->cur_dirstr.s, fn) == 0) {
2022 &(mtree->cur_dirent->dir_info->rbtree),
2026 &(mtree->cur_dirent->dir_info->rbtree),
2030 file->parent = mtree->cur_dirent;
2031 mtree_entry_register_add(mtree, file);
2035 dent = mtree->root;
2049 dent == mtree->root) {
2095 mtree->root = vp;
2102 mtree_entry_register_add(mtree, vp);
2121 mtree->cur_dirent = dent;
2122 archive_string_empty(&(mtree->cur_dirstr));
2123 archive_string_ensure(&(mtree->cur_dirstr),
2128 mtree->cur_dirstr.s[0] = 0;
2131 archive_string_copy(&(mtree->cur_dirstr),
2134 &(mtree->cur_dirstr), '/');
2136 archive_string_concat(&(mtree->cur_dirstr),
2148 mtree_entry_register_add(mtree, file);
2180 /* Update the existent mtree entry's attributes by the new one's. */