15978408cSSascha Wildner /* $NetBSD: cd9660_debug.c,v 1.11 2010/10/27 18:51:35 christos Exp $ */
25978408cSSascha Wildner
35978408cSSascha Wildner /*-
45978408cSSascha Wildner * SPDX-License-Identifier: BSD-2-Clause-NetBSD
55978408cSSascha Wildner *
65978408cSSascha Wildner * Copyright (c) 2005 Daniel Watt, Walter Deignan, Ryan Gabrys, Alan
75978408cSSascha Wildner * Perez-Rathke and Ram Vedam. All rights reserved.
85978408cSSascha Wildner *
95978408cSSascha Wildner * This code was written by Daniel Watt, Walter Deignan, Ryan Gabrys,
105978408cSSascha Wildner * Alan Perez-Rathke and Ram Vedam.
115978408cSSascha Wildner *
125978408cSSascha Wildner * Redistribution and use in source and binary forms, with or
135978408cSSascha Wildner * without modification, are permitted provided that the following
145978408cSSascha Wildner * conditions are met:
155978408cSSascha Wildner * 1. Redistributions of source code must retain the above copyright
165978408cSSascha Wildner * notice, this list of conditions and the following disclaimer.
175978408cSSascha Wildner * 2. Redistributions in binary form must reproduce the above
185978408cSSascha Wildner * copyright notice, this list of conditions and the following
195978408cSSascha Wildner * disclaimer in the documentation and/or other materials provided
205978408cSSascha Wildner * with the distribution.
215978408cSSascha Wildner *
225978408cSSascha Wildner * THIS SOFTWARE IS PROVIDED BY DANIEL WATT, WALTER DEIGNAN, RYAN
235978408cSSascha Wildner * GABRYS, ALAN PEREZ-RATHKE AND RAM VEDAM ``AS IS'' AND ANY EXPRESS OR
245978408cSSascha Wildner * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
255978408cSSascha Wildner * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
265978408cSSascha Wildner * DISCLAIMED. IN NO EVENT SHALL DANIEL WATT, WALTER DEIGNAN, RYAN
275978408cSSascha Wildner * GABRYS, ALAN PEREZ-RATHKE AND RAM VEDAM BE LIABLE FOR ANY DIRECT, INDIRECT,
285978408cSSascha Wildner * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
295978408cSSascha Wildner * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
305978408cSSascha Wildner * USE,DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
315978408cSSascha Wildner * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
325978408cSSascha Wildner * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
335978408cSSascha Wildner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
345978408cSSascha Wildner * OF SUCH DAMAGE.
35*811c2036SSascha Wildner *
36*811c2036SSascha Wildner * $FreeBSD: head/usr.sbin/makefs/cd9660/cd9660_debug.c 333664 2018-05-16 02:58:05Z emaste $
375978408cSSascha Wildner */
385978408cSSascha Wildner
395978408cSSascha Wildner #include <sys/param.h>
405978408cSSascha Wildner
415978408cSSascha Wildner #include <sys/mount.h>
425978408cSSascha Wildner
435978408cSSascha Wildner #include "makefs.h"
445978408cSSascha Wildner #include "cd9660.h"
455978408cSSascha Wildner #include "iso9660_rrip.h"
465978408cSSascha Wildner
475978408cSSascha Wildner static void debug_print_susp_attrs(cd9660node *, int);
485978408cSSascha Wildner static void debug_dump_to_xml_padded_hex_output(const char *, unsigned char *,
495978408cSSascha Wildner int);
505978408cSSascha Wildner
515978408cSSascha Wildner static inline void
print_n_tabs(int n)525978408cSSascha Wildner print_n_tabs(int n)
535978408cSSascha Wildner {
545978408cSSascha Wildner int i;
555978408cSSascha Wildner
565978408cSSascha Wildner for (i = 1; i <= n; i ++)
575978408cSSascha Wildner printf("\t");
585978408cSSascha Wildner }
595978408cSSascha Wildner
605978408cSSascha Wildner #if 0
615978408cSSascha Wildner void
625978408cSSascha Wildner debug_print_rrip_info(cd9660node *n)
635978408cSSascha Wildner {
645978408cSSascha Wildner struct ISO_SUSP_ATTRIBUTES *t;
655978408cSSascha Wildner TAILQ_FOREACH(t, &node->head, rr_ll) {
665978408cSSascha Wildner
675978408cSSascha Wildner }
685978408cSSascha Wildner }
695978408cSSascha Wildner #endif
705978408cSSascha Wildner
715978408cSSascha Wildner static void
debug_print_susp_attrs(cd9660node * n,int indent)725978408cSSascha Wildner debug_print_susp_attrs(cd9660node *n, int indent)
735978408cSSascha Wildner {
745978408cSSascha Wildner struct ISO_SUSP_ATTRIBUTES *t;
755978408cSSascha Wildner
765978408cSSascha Wildner TAILQ_FOREACH(t, &n->head, rr_ll) {
775978408cSSascha Wildner print_n_tabs(indent);
785978408cSSascha Wildner printf("-");
795978408cSSascha Wildner printf("%c%c: L:%i",t->attr.su_entry.SP.h.type[0],
805978408cSSascha Wildner t->attr.su_entry.SP.h.type[1],
815978408cSSascha Wildner (int)t->attr.su_entry.SP.h.length[0]);
825978408cSSascha Wildner printf("\n");
835978408cSSascha Wildner }
845978408cSSascha Wildner }
855978408cSSascha Wildner
865978408cSSascha Wildner void
debug_print_tree(iso9660_disk * diskStructure,cd9660node * node,int level)875978408cSSascha Wildner debug_print_tree(iso9660_disk *diskStructure, cd9660node *node, int level)
885978408cSSascha Wildner {
895978408cSSascha Wildner #if !HAVE_NBTOOL_CONFIG_H
905978408cSSascha Wildner cd9660node *cn;
915978408cSSascha Wildner
925978408cSSascha Wildner print_n_tabs(level);
935978408cSSascha Wildner if (node->type & CD9660_TYPE_DOT) {
945978408cSSascha Wildner printf(". (%i)\n",
955978408cSSascha Wildner isonum_733(node->isoDirRecord->extent));
965978408cSSascha Wildner } else if (node->type & CD9660_TYPE_DOTDOT) {
975978408cSSascha Wildner printf("..(%i)\n",
985978408cSSascha Wildner isonum_733(node->isoDirRecord->extent));
995978408cSSascha Wildner } else if (node->isoDirRecord->name[0]=='\0') {
1005978408cSSascha Wildner printf("(ROOT) (%" PRIu32 " to %" PRId64 ")\n",
1015978408cSSascha Wildner node->fileDataSector,
1025978408cSSascha Wildner node->fileDataSector +
1035978408cSSascha Wildner node->fileSectorsUsed - 1);
1045978408cSSascha Wildner } else {
1055978408cSSascha Wildner printf("%s (%s) (%" PRIu32 " to %" PRId64 ")\n",
1065978408cSSascha Wildner node->isoDirRecord->name,
1075978408cSSascha Wildner (node->isoDirRecord->flags[0]
1085978408cSSascha Wildner & ISO_FLAG_DIRECTORY) ? "DIR" : "FILE",
1095978408cSSascha Wildner node->fileDataSector,
1105978408cSSascha Wildner (node->fileSectorsUsed == 0) ?
1115978408cSSascha Wildner node->fileDataSector :
1125978408cSSascha Wildner node->fileDataSector
1135978408cSSascha Wildner + node->fileSectorsUsed - 1);
1145978408cSSascha Wildner }
1155978408cSSascha Wildner if (diskStructure->rock_ridge_enabled)
1165978408cSSascha Wildner debug_print_susp_attrs(node, level + 1);
1175978408cSSascha Wildner TAILQ_FOREACH(cn, &node->cn_children, cn_next_child)
1185978408cSSascha Wildner debug_print_tree(diskStructure, cn, level + 1);
1195978408cSSascha Wildner #else
1205978408cSSascha Wildner printf("Sorry, debugging is not supported in host-tools mode.\n");
1215978408cSSascha Wildner #endif
1225978408cSSascha Wildner }
1235978408cSSascha Wildner
1245978408cSSascha Wildner void
debug_print_path_tree(cd9660node * n)1255978408cSSascha Wildner debug_print_path_tree(cd9660node *n)
1265978408cSSascha Wildner {
1275978408cSSascha Wildner cd9660node *iterator = n;
1285978408cSSascha Wildner
1295978408cSSascha Wildner /* Only display this message when called with the root node */
1305978408cSSascha Wildner if (n->parent == NULL)
1315978408cSSascha Wildner printf("debug_print_path_table: Dumping path table contents\n");
1325978408cSSascha Wildner
1335978408cSSascha Wildner while (iterator != NULL) {
1345978408cSSascha Wildner if (iterator->isoDirRecord->name[0] == '\0')
1355978408cSSascha Wildner printf("0) (ROOT)\n");
1365978408cSSascha Wildner else
1375978408cSSascha Wildner printf("%i) %s\n", iterator->level,
1385978408cSSascha Wildner iterator->isoDirRecord->name);
1395978408cSSascha Wildner
1405978408cSSascha Wildner iterator = iterator->ptnext;
1415978408cSSascha Wildner }
1425978408cSSascha Wildner }
1435978408cSSascha Wildner
1445978408cSSascha Wildner void
debug_print_volume_descriptor_information(iso9660_disk * diskStructure)1455978408cSSascha Wildner debug_print_volume_descriptor_information(iso9660_disk *diskStructure)
1465978408cSSascha Wildner {
1475978408cSSascha Wildner volume_descriptor *tmp = diskStructure->firstVolumeDescriptor;
1485978408cSSascha Wildner char temp[CD9660_SECTOR_SIZE];
1495978408cSSascha Wildner
1505978408cSSascha Wildner printf("==Listing Volume Descriptors==\n");
1515978408cSSascha Wildner
1525978408cSSascha Wildner while (tmp != NULL) {
1535978408cSSascha Wildner memset(temp, 0, CD9660_SECTOR_SIZE);
1545978408cSSascha Wildner memcpy(temp, tmp->volumeDescriptorData + 1, 5);
1555978408cSSascha Wildner printf("Volume descriptor in sector %" PRId64
1565978408cSSascha Wildner ": type %i, ID %s\n",
1575978408cSSascha Wildner tmp->sector, tmp->volumeDescriptorData[0], temp);
1585978408cSSascha Wildner switch(tmp->volumeDescriptorData[0]) {
1595978408cSSascha Wildner case 0:/*boot record*/
1605978408cSSascha Wildner break;
1615978408cSSascha Wildner
1625978408cSSascha Wildner case 1: /* PVD */
1635978408cSSascha Wildner break;
1645978408cSSascha Wildner
1655978408cSSascha Wildner case 2: /* SVD */
1665978408cSSascha Wildner break;
1675978408cSSascha Wildner
1685978408cSSascha Wildner case 3: /* Volume Partition Descriptor */
1695978408cSSascha Wildner break;
1705978408cSSascha Wildner
1715978408cSSascha Wildner case 255: /* terminator */
1725978408cSSascha Wildner break;
1735978408cSSascha Wildner }
1745978408cSSascha Wildner tmp = tmp->next;
1755978408cSSascha Wildner }
1765978408cSSascha Wildner
1775978408cSSascha Wildner printf("==Done Listing Volume Descriptors==\n");
1785978408cSSascha Wildner }
1795978408cSSascha Wildner
1805978408cSSascha Wildner void
debug_dump_to_xml_ptentry(path_table_entry * pttemp,int num,int mode)1815978408cSSascha Wildner debug_dump_to_xml_ptentry(path_table_entry *pttemp, int num, int mode)
1825978408cSSascha Wildner {
1835978408cSSascha Wildner printf("<ptentry num=\"%i\">\n" ,num);
1845978408cSSascha Wildner printf("<length>%i</length>\n", pttemp->length[0]);
1855978408cSSascha Wildner printf("<extended_attribute_length>%i</extended_attribute_length>\n",
1865978408cSSascha Wildner pttemp->extended_attribute_length[0]);
1875978408cSSascha Wildner printf("<parent_number>%i</parent_number>\n",
1885978408cSSascha Wildner debug_get_encoded_number(pttemp->parent_number,mode));
1895978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("name",
1905978408cSSascha Wildner pttemp->name, pttemp->length[0]);
1915978408cSSascha Wildner printf("</ptentry>\n");
1925978408cSSascha Wildner }
1935978408cSSascha Wildner
1945978408cSSascha Wildner void
debug_dump_to_xml_path_table(FILE * fd,off_t sector,int size,int mode)1955978408cSSascha Wildner debug_dump_to_xml_path_table(FILE *fd, off_t sector, int size, int mode)
1965978408cSSascha Wildner {
1975978408cSSascha Wildner path_table_entry pttemp;
1985978408cSSascha Wildner int t = 0;
1995978408cSSascha Wildner int n = 0;
2005978408cSSascha Wildner
2015978408cSSascha Wildner if (fseeko(fd, CD9660_SECTOR_SIZE * sector, SEEK_SET) == -1)
2025978408cSSascha Wildner err(1, "fseeko");
2035978408cSSascha Wildner
2045978408cSSascha Wildner while (t < size) {
2055978408cSSascha Wildner /* Read fixed data first */
2065978408cSSascha Wildner fread(&pttemp, 1, 8, fd);
2075978408cSSascha Wildner t += 8;
2085978408cSSascha Wildner /* Read variable */
2095978408cSSascha Wildner fread(((unsigned char*)&pttemp) + 8, 1, pttemp.length[0], fd);
2105978408cSSascha Wildner t += pttemp.length[0];
2115978408cSSascha Wildner debug_dump_to_xml_ptentry(&pttemp, n, mode);
2125978408cSSascha Wildner n++;
2135978408cSSascha Wildner }
2145978408cSSascha Wildner
2155978408cSSascha Wildner }
2165978408cSSascha Wildner
2175978408cSSascha Wildner /*
2185978408cSSascha Wildner * XML Debug output functions
2195978408cSSascha Wildner * Dump hierarchy of CD, as well as volume info, to XML
2205978408cSSascha Wildner * Can be used later to diff against a standard,
2215978408cSSascha Wildner * or just provide easy to read detailed debug output
2225978408cSSascha Wildner */
2235978408cSSascha Wildner void
debug_dump_to_xml(FILE * fd)2245978408cSSascha Wildner debug_dump_to_xml(FILE *fd)
2255978408cSSascha Wildner {
2265978408cSSascha Wildner unsigned char buf[CD9660_SECTOR_SIZE];
2275978408cSSascha Wildner off_t sector;
2285978408cSSascha Wildner int t, t2;
2295978408cSSascha Wildner struct iso_primary_descriptor primaryVD;
2305978408cSSascha Wildner struct _boot_volume_descriptor bootVD;
2315978408cSSascha Wildner
2325978408cSSascha Wildner printf("<cd9660dump>\n");
2335978408cSSascha Wildner
2345978408cSSascha Wildner /* Display Volume Descriptors */
2355978408cSSascha Wildner sector = 16;
2365978408cSSascha Wildner do {
2375978408cSSascha Wildner if (fseeko(fd, CD9660_SECTOR_SIZE * sector, SEEK_SET) == -1)
2385978408cSSascha Wildner err(1, "fseeko");
2395978408cSSascha Wildner fread(buf, 1, CD9660_SECTOR_SIZE, fd);
2405978408cSSascha Wildner t = (int)((unsigned char)buf[0]);
2415978408cSSascha Wildner switch (t) {
2425978408cSSascha Wildner case 0:
2435978408cSSascha Wildner memcpy(&bootVD, buf, CD9660_SECTOR_SIZE);
2445978408cSSascha Wildner break;
2455978408cSSascha Wildner case 1:
2465978408cSSascha Wildner memcpy(&primaryVD, buf, CD9660_SECTOR_SIZE);
2475978408cSSascha Wildner break;
2485978408cSSascha Wildner }
2495978408cSSascha Wildner debug_dump_to_xml_volume_descriptor(buf, sector);
2505978408cSSascha Wildner sector++;
2515978408cSSascha Wildner } while (t != 255);
2525978408cSSascha Wildner
2535978408cSSascha Wildner t = debug_get_encoded_number((u_char *)primaryVD.type_l_path_table,
2545978408cSSascha Wildner 731);
2555978408cSSascha Wildner t2 = debug_get_encoded_number((u_char *)primaryVD.path_table_size, 733);
2565978408cSSascha Wildner printf("Path table 1 located at sector %i and is %i bytes long\n",
2575978408cSSascha Wildner t,t2);
2585978408cSSascha Wildner debug_dump_to_xml_path_table(fd, t, t2, 721);
2595978408cSSascha Wildner
2605978408cSSascha Wildner t = debug_get_encoded_number((u_char *)primaryVD.type_m_path_table,
2615978408cSSascha Wildner 731);
2625978408cSSascha Wildner debug_dump_to_xml_path_table(fd, t, t2, 722);
2635978408cSSascha Wildner
2645978408cSSascha Wildner printf("</cd9660dump>\n");
2655978408cSSascha Wildner }
2665978408cSSascha Wildner
2675978408cSSascha Wildner static void
debug_dump_to_xml_padded_hex_output(const char * element,unsigned char * buf,int len)2685978408cSSascha Wildner debug_dump_to_xml_padded_hex_output(const char *element, unsigned char *buf,
2695978408cSSascha Wildner int len)
2705978408cSSascha Wildner {
2715978408cSSascha Wildner int i;
2725978408cSSascha Wildner int t;
2735978408cSSascha Wildner
2745978408cSSascha Wildner printf("<%s>",element);
2755978408cSSascha Wildner for (i = 0; i < len; i++) {
2765978408cSSascha Wildner t = (unsigned char)buf[i];
2775978408cSSascha Wildner if (t >= 32 && t < 127)
2785978408cSSascha Wildner printf("%c",t);
2795978408cSSascha Wildner }
2805978408cSSascha Wildner printf("</%s>\n",element);
2815978408cSSascha Wildner
2825978408cSSascha Wildner printf("<%s:hex>",element);
2835978408cSSascha Wildner for (i = 0; i < len; i++) {
2845978408cSSascha Wildner t = (unsigned char)buf[i];
2855978408cSSascha Wildner printf(" %x",t);
2865978408cSSascha Wildner }
2875978408cSSascha Wildner printf("</%s:hex>\n",element);
2885978408cSSascha Wildner }
2895978408cSSascha Wildner
2905978408cSSascha Wildner int
debug_get_encoded_number(unsigned char * buf,int mode)2915978408cSSascha Wildner debug_get_encoded_number(unsigned char* buf, int mode)
2925978408cSSascha Wildner {
2935978408cSSascha Wildner #if !HAVE_NBTOOL_CONFIG_H
2945978408cSSascha Wildner switch (mode) {
2955978408cSSascha Wildner /* 711: Single bite */
2965978408cSSascha Wildner case 711:
2975978408cSSascha Wildner return isonum_711(buf);
2985978408cSSascha Wildner
2995978408cSSascha Wildner /* 712: Single signed byte */
3005978408cSSascha Wildner case 712:
3015978408cSSascha Wildner return isonum_712((signed char *)buf);
3025978408cSSascha Wildner
3035978408cSSascha Wildner /* 721: 16 bit LE */
3045978408cSSascha Wildner case 721:
3055978408cSSascha Wildner return isonum_721(buf);
3065978408cSSascha Wildner
3075978408cSSascha Wildner /* 731: 32 bit LE */
3085978408cSSascha Wildner case 731:
3095978408cSSascha Wildner return isonum_731(buf);
3105978408cSSascha Wildner
3115978408cSSascha Wildner /* 722: 16 bit BE */
3125978408cSSascha Wildner case 722:
3135978408cSSascha Wildner return isonum_722(buf);
3145978408cSSascha Wildner
3155978408cSSascha Wildner /* 732: 32 bit BE */
3165978408cSSascha Wildner case 732:
3175978408cSSascha Wildner return isonum_732(buf);
3185978408cSSascha Wildner
3195978408cSSascha Wildner /* 723: 16 bit bothE */
3205978408cSSascha Wildner case 723:
3215978408cSSascha Wildner return isonum_723(buf);
3225978408cSSascha Wildner
3235978408cSSascha Wildner /* 733: 32 bit bothE */
3245978408cSSascha Wildner case 733:
3255978408cSSascha Wildner return isonum_733(buf);
3265978408cSSascha Wildner }
3275978408cSSascha Wildner #endif
3285978408cSSascha Wildner return 0;
3295978408cSSascha Wildner }
3305978408cSSascha Wildner
3315978408cSSascha Wildner void
debug_dump_integer(const char * element,char * buf,int mode)3325978408cSSascha Wildner debug_dump_integer(const char *element, char* buf, int mode)
3335978408cSSascha Wildner {
3345978408cSSascha Wildner printf("<%s>%i</%s>\n", element,
3355978408cSSascha Wildner debug_get_encoded_number((unsigned char *)buf, mode), element);
3365978408cSSascha Wildner }
3375978408cSSascha Wildner
3385978408cSSascha Wildner void
debug_dump_string(const char * element __unused,unsigned char * buf __unused,int len __unused)3395978408cSSascha Wildner debug_dump_string(const char *element __unused, unsigned char *buf __unused, int len __unused)
3405978408cSSascha Wildner {
3415978408cSSascha Wildner
3425978408cSSascha Wildner }
3435978408cSSascha Wildner
3445978408cSSascha Wildner void
debug_dump_directory_record_9_1(unsigned char * buf)3455978408cSSascha Wildner debug_dump_directory_record_9_1(unsigned char* buf)
3465978408cSSascha Wildner {
3475978408cSSascha Wildner printf("<directoryrecord>\n");
3485978408cSSascha Wildner debug_dump_integer("length",
3495978408cSSascha Wildner ((struct iso_directory_record*) buf)->length, 711);
3505978408cSSascha Wildner debug_dump_integer("ext_attr_length",
3515978408cSSascha Wildner ((struct iso_directory_record*) buf)->ext_attr_length,711);
3525978408cSSascha Wildner debug_dump_integer("extent",
3535978408cSSascha Wildner (char *)((struct iso_directory_record*) buf)->extent, 733);
3545978408cSSascha Wildner debug_dump_integer("size",
3555978408cSSascha Wildner (char *)((struct iso_directory_record*) buf)->size, 733);
3565978408cSSascha Wildner debug_dump_integer("flags",
3575978408cSSascha Wildner ((struct iso_directory_record*) buf)->flags, 711);
3585978408cSSascha Wildner debug_dump_integer("file_unit_size",
3595978408cSSascha Wildner ((struct iso_directory_record*) buf)->file_unit_size,711);
3605978408cSSascha Wildner debug_dump_integer("interleave",
3615978408cSSascha Wildner ((struct iso_directory_record*) buf)->interleave, 711);
3625978408cSSascha Wildner debug_dump_integer("volume_sequence_number",
3635978408cSSascha Wildner ((struct iso_directory_record*) buf)->volume_sequence_number,
3645978408cSSascha Wildner 723);
3655978408cSSascha Wildner debug_dump_integer("name_len",
3665978408cSSascha Wildner ((struct iso_directory_record*) buf)->name_len, 711);
3675978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("name",
3685978408cSSascha Wildner (u_char *)((struct iso_directory_record*) buf)->name,
3695978408cSSascha Wildner debug_get_encoded_number((u_char *)
3705978408cSSascha Wildner ((struct iso_directory_record*) buf)->length, 711));
3715978408cSSascha Wildner printf("</directoryrecord>\n");
3725978408cSSascha Wildner }
3735978408cSSascha Wildner
3745978408cSSascha Wildner
3755978408cSSascha Wildner void
debug_dump_to_xml_volume_descriptor(unsigned char * buf,int sector)3765978408cSSascha Wildner debug_dump_to_xml_volume_descriptor(unsigned char* buf, int sector)
3775978408cSSascha Wildner {
3785978408cSSascha Wildner printf("<volumedescriptor sector=\"%i\">\n", sector);
3795978408cSSascha Wildner printf("<vdtype>");
3805978408cSSascha Wildner switch(buf[0]) {
3815978408cSSascha Wildner case 0:
3825978408cSSascha Wildner printf("boot");
3835978408cSSascha Wildner break;
3845978408cSSascha Wildner
3855978408cSSascha Wildner case 1:
3865978408cSSascha Wildner printf("primary");
3875978408cSSascha Wildner break;
3885978408cSSascha Wildner
3895978408cSSascha Wildner case 2:
3905978408cSSascha Wildner printf("supplementary");
3915978408cSSascha Wildner break;
3925978408cSSascha Wildner
3935978408cSSascha Wildner case 3:
3945978408cSSascha Wildner printf("volume partition descriptor");
3955978408cSSascha Wildner break;
3965978408cSSascha Wildner
3975978408cSSascha Wildner case 255:
3985978408cSSascha Wildner printf("terminator");
3995978408cSSascha Wildner break;
4005978408cSSascha Wildner }
4015978408cSSascha Wildner
4025978408cSSascha Wildner printf("</vdtype>\n");
4035978408cSSascha Wildner switch(buf[0]) {
4045978408cSSascha Wildner case 1:
4055978408cSSascha Wildner debug_dump_integer("type",
4065978408cSSascha Wildner ((struct iso_primary_descriptor*)buf)->type, 711);
4075978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("id",
4085978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->id,
4095978408cSSascha Wildner ISODCL ( 2, 6));
4105978408cSSascha Wildner debug_dump_integer("version",
4115978408cSSascha Wildner ((struct iso_primary_descriptor*)buf)->version,
4125978408cSSascha Wildner 711);
4135978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("system_id",
4145978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*)buf)->system_id,
4155978408cSSascha Wildner ISODCL(9,40));
4165978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("volume_id",
4175978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*)buf)->volume_id,
4185978408cSSascha Wildner ISODCL(41,72));
4195978408cSSascha Wildner debug_dump_integer("volume_space_size",
4205978408cSSascha Wildner ((struct iso_primary_descriptor*)buf)->volume_space_size,
4215978408cSSascha Wildner 733);
4225978408cSSascha Wildner debug_dump_integer("volume_set_size",
4235978408cSSascha Wildner ((struct iso_primary_descriptor*)buf)->volume_set_size,
4245978408cSSascha Wildner 733);
4255978408cSSascha Wildner debug_dump_integer("volume_sequence_number",
4265978408cSSascha Wildner ((struct iso_primary_descriptor*)buf)->volume_sequence_number,
4275978408cSSascha Wildner 723);
4285978408cSSascha Wildner debug_dump_integer("logical_block_size",
4295978408cSSascha Wildner ((struct iso_primary_descriptor*)buf)->logical_block_size,
4305978408cSSascha Wildner 723);
4315978408cSSascha Wildner debug_dump_integer("path_table_size",
4325978408cSSascha Wildner ((struct iso_primary_descriptor*)buf)->path_table_size,
4335978408cSSascha Wildner 733);
4345978408cSSascha Wildner debug_dump_integer("type_l_path_table",
4355978408cSSascha Wildner ((struct iso_primary_descriptor*)buf)->type_l_path_table,
4365978408cSSascha Wildner 731);
4375978408cSSascha Wildner debug_dump_integer("opt_type_l_path_table",
4385978408cSSascha Wildner ((struct iso_primary_descriptor*)buf)->opt_type_l_path_table,
4395978408cSSascha Wildner 731);
4405978408cSSascha Wildner debug_dump_integer("type_m_path_table",
4415978408cSSascha Wildner ((struct iso_primary_descriptor*)buf)->type_m_path_table,
4425978408cSSascha Wildner 732);
4435978408cSSascha Wildner debug_dump_integer("opt_type_m_path_table",
4445978408cSSascha Wildner ((struct iso_primary_descriptor*)buf)->opt_type_m_path_table,732);
4455978408cSSascha Wildner debug_dump_directory_record_9_1(
4465978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*)buf)->root_directory_record);
4475978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("volume_set_id",
4485978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->volume_set_id,
4495978408cSSascha Wildner ISODCL (191, 318));
4505978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("publisher_id",
4515978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->publisher_id,
4525978408cSSascha Wildner ISODCL (319, 446));
4535978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("preparer_id",
4545978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->preparer_id,
4555978408cSSascha Wildner ISODCL (447, 574));
4565978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("application_id",
4575978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->application_id,
4585978408cSSascha Wildner ISODCL (575, 702));
4595978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("copyright_file_id",
4605978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->copyright_file_id,
4615978408cSSascha Wildner ISODCL (703, 739));
4625978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("abstract_file_id",
4635978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->abstract_file_id,
4645978408cSSascha Wildner ISODCL (740, 776));
4655978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("bibliographic_file_id",
4665978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->bibliographic_file_id,
4675978408cSSascha Wildner ISODCL (777, 813));
4685978408cSSascha Wildner
4695978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("creation_date",
4705978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->creation_date,
4715978408cSSascha Wildner ISODCL (814, 830));
4725978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("modification_date",
4735978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->modification_date,
4745978408cSSascha Wildner ISODCL (831, 847));
4755978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("expiration_date",
4765978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->expiration_date,
4775978408cSSascha Wildner ISODCL (848, 864));
4785978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("effective_date",
4795978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->effective_date,
4805978408cSSascha Wildner ISODCL (865, 881));
4815978408cSSascha Wildner
4825978408cSSascha Wildner debug_dump_to_xml_padded_hex_output("file_structure_version",
4835978408cSSascha Wildner (u_char *)((struct iso_primary_descriptor*) buf)->file_structure_version,
4845978408cSSascha Wildner ISODCL(882,882));
4855978408cSSascha Wildner break;
4865978408cSSascha Wildner }
4875978408cSSascha Wildner printf("</volumedescriptor>\n");
4885978408cSSascha Wildner }
4895978408cSSascha Wildner
490