5 "@(#)multi.c 1.104 16/01/06 joerg";
40#include <vms/fabdef.h>
45#define howmany(x, y) (((x)+((y)-1))/(y))
48#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
59#define TF_ATTRIBUTES 8
73 struct stat *lstatbuf));
127 comerr(
_(
"Seek error on old image\n"));
131 comerr(
_(
"Read error on old image\n"));
147 for (
i = 0;
i <
len;
i++) {
176static int did_xa = 0;
193 }
else if (pnt[2] == 0) {
210 errmsgno(
EX_BAD,
_(
"Problems with old ISO directory entry for file: '%s'.\n"), &
cp[33]);
212 errmsgno(
EX_BAD,
_(
"Illegal extended directory attributes found (bad XA disk?).\n"));
217 if (
len >= 4 && pnt[3] != 1 && pnt[3] != 2) {
240 pnt = (
unsigned char *) idr;
242 pnt -=
sizeof (idr->
name);
270 UInt32_t cont_extent;
271 UInt32_t cont_offset;
276 cont_extent = cont_offset = cont_size = 0;
282 if (pnt[3] != 1 && pnt[3] != 2) {
284 _(
"**BAD RRVERSION (%d) in '%c%c' field (%2.2X %2.2X).\n"),
285 pnt[3], pnt[0], pnt[1], pnt[0], pnt[1]);
290 _(
"**BAD RRLEN (%d) in '%2.2s' field %2.2X %2.2X.\n"),
291 pnt[2], pnt, pnt[0], pnt[1]);
295 if (pnt[0] ==
'R' && pnt[1] ==
'R')
296 flag1 = pnt[4] & 0xff;
298 if (
strncmp((
char *)pnt,
"PX", 2) == 0)
300 if (
strncmp((
char *)pnt,
"PN", 2) == 0)
302 if (
strncmp((
char *)pnt,
"SL", 2) == 0)
304 if (
strncmp((
char *)pnt,
"NM", 2) == 0)
306 if (
strncmp((
char *)pnt,
"CL", 2) == 0)
308 if (
strncmp((
char *)pnt,
"PL", 2) == 0)
310 if (
strncmp((
char *)pnt,
"RE", 2) == 0)
312 if (
strncmp((
char *)pnt,
"TF", 2) == 0)
314 if (
strncmp((
char *)pnt,
"SP", 2) == 0) {
319 if (
strncmp((
char *)pnt,
"AA", 2) == 0) {
324 if (
strncmp((
char *)pnt,
"ER", 2) == 0) {
331 if (
strncmp((
char *)pnt,
"CE", 2) == 0) {
336 if (
strncmp((
char *)pnt,
"ST", 2) == 0) {
375 UInt32_t cont_extent;
376 UInt32_t cont_offset;
380 cont_extent = cont_offset = cont_size = 0;
385 if (pnt[3] != 1 && pnt[3] != 2) {
387 _(
"**BAD RRVERSION (%d) in '%c%c' field (%2.2X %2.2X).\n"),
388 pnt[3], pnt[0], pnt[1], pnt[0], pnt[1]);
393 _(
"**BAD RRLEN (%d) in '%2.2s' field %2.2X %2.2X.\n"),
394 pnt[2], pnt, pnt[0], pnt[1]);
397 if (
strncmp((
char *)pnt,
"NM", 2) == 0) {
398 strncpy(name_buf, (
char *)pnt + 5, pnt[2] - 5);
399 name_buf[pnt[2] - 5] = 0;
414 }
else if (
strncmp((
char *)pnt,
"CE", 2) == 0) {
415 cont_extent =
get_733(pnt + 4);
416 cont_offset =
get_733(pnt + 12);
418 }
else if (
strncmp((
char *)pnt,
"ST", 2) == 0) {
456 struct stat *statbuf;
457 struct stat *lstatbuf;
459 UInt32_t cont_extent;
460 UInt32_t cont_offset;
471 cont_extent = cont_offset = cont_size = 0;
483 if (pnt[3] != 1 && pnt[3] != 2) {
485 _(
"**BAD RRVERSION (%d) in '%c%c' field (%2.2X %2.2X).\n"),
486 pnt[3], pnt[0], pnt[1], pnt[0], pnt[1]);
491 _(
"**BAD RRLEN (%d) in '%2.2s' field %2.2X %2.2X.\n"),
492 pnt[2], pnt, pnt[0], pnt[1]);
501 if (
strncmp((
char *)pnt,
"PX", 2) == 0) {
508 if (
strncmp((
char *)pnt,
"TF", 2) == 0) {
525 if (
strncmp((
char *)pnt,
"CE", 2) == 0) {
526 cont_extent =
get_733(pnt + 4);
527 cont_offset =
get_733(pnt + 12);
530 if (
strncmp((
char *)pnt,
"ST", 2) == 0) {
547 pnt = &
sector[cont_offset];
553 cont_extent = cont_offset = cont_size = 0;
560 if (same_file_type) {
572 size_t idr_length = idr->
length[0] & 0xFF;
574 size_t idr_namelength = idr->
name_len[0] & 0xFF;
575 int namelimit = space_left -
577 int nlimit = (idr_namelength < namelimit) ?
578 idr_namelength : namelimit;
583 if (idr_length > space_left) {
585 _(
"Bad directory length %zu (> %d available) for '%.*s'.\n"),
586 idr_length, namelimit, nlimit, idr->
name);
589 if (idr_length == 0) {
597 _(
"Zero directory length for '%.*s'.\n"),
605 if ((idr_length & 1) != 0) {
607 idr_length, nlimit, idr->
name);
610 if (idr_namelength == 0) {
614 if (!(idr_namelength & 1)) {
622 idr_namelength) > idr_length) {
623 int xlimit = idr_length -
632 idr_namelength, xlimit, xlimit, idr->
name);
635 idr_namelength + idr_ext_length) > idr_length) {
636 int xlimit = idr_length -
640 comerrno(
EX_BAD,
_(
"Bad extended attribute length %zu (> %d) for '%.*s'.\n"),
641 idr_ext_length, xlimit, nlimit, idr->
name);
653 int rlen = idr_length -
669 unsigned char *cpnt1;
683 unsigned char *tt_buf;
687 static int warning_given = 0;
719 if (idr->
length[0] == 0) {
756 if (idr->
length[0] == 0) {
763 error(
"IDR name: '%s' ist: %d soll: %d\n",
767 (*pnt)->starting_block =
770 if ((*pnt)->size == 0) {
774 if (((UInt32_t)(*pnt)->starting_block) <=
null_inodes) {
779 (*pnt)->priority = 0;
781 (*pnt)->got_rr_name = 0;
782 (*pnt)->table =
NULL;
783 (*pnt)->whole_name =
NULL;
784 (*pnt)->filedir =
NULL;
785 (*pnt)->parent_rec =
NULL;
790 (*pnt)->inode = (*pnt)->starting_block;
792 (*pnt)->rr_attributes =
NULL;
793 (*pnt)->rr_attr_size = 0;
794 (*pnt)->total_rr_attr_size = 0;
797 (*pnt)->assoc =
NULL;
798 (*pnt)->hfs_ent =
NULL;
806 rlen = idr->
length[0] & 0xff;
807 cpnt = (
unsigned char *) idr;
823 (*pnt)->total_rr_attr_size =
824 (*pnt)->rr_attr_size = rlen;
825 (*pnt)->rr_attributes =
e_malloc(rlen);
826 memcpy((*pnt)->rr_attributes, cpnt, rlen);
830 error(
"INT name: '%s' ist: %d soll: %d\n",
831 (*pnt)->isorec.name,
strlen((*pnt)->isorec.name),
839 cpnt = (
unsigned char *) (*pnt)->isorec.name;
842 sizeof ((*pnt)->isorec.name) - idr->
name_len[0]);
861 if (
parse_rr((*pnt)->rr_attributes, rlen, *pnt) == -1) {
863 _(
"Cannot parse Rock Ridge attributes for '%s'.\n"),
866 if (((*pnt)->isorec.name_len[0] == 1) &&
867 (((*pnt)->isorec.name[0] == 0) ||
868 ((*pnt)->isorec.name[0] == 1))) {
870 if ((*pnt)->name !=
NULL) {
873 if ((*pnt)->whole_name !=
NULL) {
874 free((*pnt)->whole_name);
876 if ((*pnt)->isorec.name[0] == 0) {
887 if ((*pnt)->name !=
NULL) {
890 if ((*pnt)->whole_name !=
NULL) {
891 free((*pnt)->whole_name);
917 if (idr2->
length[0] == 0) {
931 s_entry->
size = tsize;
933 s_entry->
mxroot = s_entry;
935 s_entry->
next = *pnt;
944 (pnt[-1])->
next = *pnt;
945 (*pnt)->
mxroot = (pnt[-1])->mxroot;
946 (*pnt)->mxpart = (pnt[-1])->mxpart + 1;
957 for (pnt =
rtn,
i = 0;
i < nent;
i++, pnt++) {
960 rlen =
get_711((*pnt)->isorec.name_len);
962 for (
j = 0;
j < nent;
j++) {
964 (*pnt)->isorec.name, rlen) == 0 &&
966 rtn[
j]->assoc = *pnt;
984 if (apple_both == 0) {
985 apple_both = apple_ext = 1;
1001 if (tt_extent != 0 && tt_size != 0) {
1003 tt_buf = (
unsigned char *)
e_malloc(nbytes);
1012 while (cpnt - tt_buf < tt_size) {
1014 while ((cpnt1 - tt_buf < tt_size) &&
1020 if (cpnt1 - tt_buf < tt_size) {
1027 for (pnt =
rtn,
i = 0;
i < nent;
i++, pnt++) {
1028 rlen =
get_711((*pnt)->isorec.name_len);
1035 if (cpnt + 2 + rlen - tt_buf >= tt_size) {
1043 (*pnt)->isorec.name, rlen) == 0 &&
1044 cpnt[2 + rlen] ==
' ' &&
1045 (
p =
strchr((
char *)&cpnt[2 + rlen],
'\t'))) {
1059 if (!(*pnt)->got_rr_name) {
1060 if ((*pnt)->name !=
NULL) {
1073 }
else if (!seen_rockridge && !warning_given) {
1080 _(
"Warning: Neither Rock Ridge (-R) nor TRANS.TBL (-T) \n"));
1082 _(
"name translations were found on previous session.\n"));
1084 _(
"ISO-9660 file names have been used instead.\n"));
1087 if (dirbuff !=
NULL) {
1090 *nentp = nent + nmult;
1106 for (
i = 0;
i <
len;
i++,
p++) {
1151 struct stat *statbuf;
1152 struct stat *lstatbuf;
1159 for (
i = 0;
i <
len;
i++) {
1165 ptr[
i]->name[0] ==
'\0') {
1169 ptr[
i]->name[0] == 1) {
1226 curr_entry->
isorec.date, 7) != 0) {
1252 if (odpnt !=
NULL) {
1313 se1->
mxroot = curr_entry;
1319 curr_entry->
next = se1;
1330 sex->
mxroot = curr_entry;
1340 se1->
mxroot = curr_entry;
1349 se1->
isorec.flags[0] &= ~ISO_MULTIEXTENT;
1376 if (scsidev_open(
path) < 0)
1390 return (scsidev_close());
1420 for (
i = 0;
i < 100;
i++) {
1437 for (
i = 0;
i < 2048-3;
i++) {
1445 _(
"Previous session has incompatible sector size %u.\n"),
1451 _(
"Previous session has volume set size %u (must be 1).\n"),
1462 for (
i = 0;
i < 100;
i++) {
1470 sum2 =
p[2045] & 0xFF;
1472 sum2 +=
p[2046] & 0xFF;
1474 sum2 +=
p[2047] & 0xFF;
1476 error(
_(
"ISO-9660 image includes checksum signature for correct inode numbers.\n"));
1497 UInt32_t ttbl_extent = 0;
1498 unsigned int ttbl_index = 0;
1505 for (
i = 0;
i < n_orig;
i++) {
1506 if (pnt[
i] ==
NULL) {
1516 pnt[
i]->whole_name =
e_strdup(whole_path);
1547 pnt[
i]->filedir = this_dir;
1561 if (ttbl_extent == 0) {
1569 for (s_entry = this_dir->
contents; s_entry; s_entry = s_entry->
next) {
1596 for (s_entry = this_dir->
contents; s_entry; s_entry = s_entry->
next) {
1605 pnt[ttbl_index]->next = this_dir->
contents;
1606 pnt[ttbl_index]->filedir = this_dir;
1607 this_dir->
contents = pnt[ttbl_index];
1608 pnt[ttbl_index] =
NULL;
1637 this_dir->
self = dpnt;
1644 parent->subdir = this_dir;
1646 next_brother =
parent->subdir;
1647 while (next_brother->
next)
1648 next_brother = next_brother->
next;
1649 next_brother->
next = this_dir;
1673 for (
i = 0;
i < n_orig;
i++) {
1756#ifdef CDRECORD_DETERMINES_FIRST_WRITABLE_ADDRESS
1762 if (file_addr !=
NULL)
1772 if (file_addr !=
NULL)
1780 _(
"Special parameters for cdrecord not specified with -C\n"));
1791 if (file_addr !=
NULL) {
1823 struct stat statbuf,
1840 if (orig_contents ==
NULL) {
1843 _(
"Reading old session failed, cannot execute -old-root.\n"));
1850 int new_n_orig = n_orig;
1870 for (
i = 0;
i < new_n_orig;
i++) {
1873 if (new_orig_contents[
i]->
name !=
NULL &&
1882 subroot = new_orig_contents[
i]->
isorec;
1883 if (new_orig_contents != orig_contents) {
1888 if (!new_orig_contents) {
1890 _(
"Reading directory %s in old session failed, cannot execute -old-root.\n"),
1897 if (
i == new_n_orig) {
1899 _(
"-old-root (sub)directory %s not found in old session.\n"),
1914 for (s_entry = this_dir->
contents; s_entry; s_entry = s_entry->
next) {
1923 &statbuf, &lstatbuf,
NULL);
1932 for (s_e = s_entry->
mxroot;
1944 orig_contents = new_orig_contents;
1945 n_orig = new_n_orig;
1960 for (s_entry = this_dir->
contents; s_entry; s_entry = s_entry->
next) {
1992 &statbuf, &lstatbuf, &odpnt);
1996 if (odpnt !=
NULL &&
2036 for (s_e = s_entry->
mxroot;
2076 UInt32_t cont_extent = 0,
2082 if (pnt[3] != 1 && pnt[3] != 2) {
2084 _(
"**BAD RRVERSION (%d) in '%c%c' field (%2.2X %2.2X).\n"),
2085 pnt[3], pnt[0], pnt[1], pnt[0], pnt[1]);
2089 _(
"**BAD RRLEN (%d) in '%2.2s' field %2.2X %2.2X.\n"),
2090 pnt[2], pnt, pnt[0], pnt[1]);
2093 if (
strncmp((
char *)pnt,
"CL", 2) == 0) {
2101 }
else if (
strncmp((
char *)pnt,
"RE", 2) == 0) {
2104 dlink->
extent =
de->starting_block;
2109 }
else if (
strncmp((
char *)pnt,
"CE", 2) == 0) {
2110 cont_extent =
get_733(pnt + 4);
2111 cont_offset =
get_733(pnt + 12);
2112 cont_size =
get_733(pnt + 20);
2114 }
else if (
strncmp((
char *)pnt,
"ST", 2) == 0) {
2119 if (
len <= 3 && cont_extent) {
2122 pnt =
sector + cont_offset;
2124 cont_extent = cont_offset = cont_size = 0;
2136 for (; re; re = re->
next) {
2139 for (; cl; cl = cl->
next) {
2143 re->
de->parent_rec = cl->
de;
2144 re->
de->filedir = cl->
de->filedir;
2152 for (; rr_moved_e; rr_moved_e = rr_moved_e->
next) {
2154 if (re->
de == rr_moved_e) {
2173 for (; re; re = re->
next) {
2188 if (d_entry->
self == s_entry)
2190 d_entry = d_entry->
next;
2203 s_entry1 = d_entry->
contents->next;
2206 if (rr_attr !=
NULL)
2214 if (rr_attr !=
NULL)
char * strcat(char *DstString, const char *SrcString)
int strcmp(const char *String1, const char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
ACPI_SIZE strlen(const char *String)
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
char * strcpy(char *DstString, const char *SrcString)
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
char * strchr(const char *String, int ch)
size_t strlcpy(char *d, const char *s, size_t bufsize)
EXPORT void comerrno(int err, char *msg, va_alist)
EXPORT int errmsgno(int err, char *msg, va_alist)
EXPORT void comerr(char *msg, va_alist)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_ long __cdecl atol(_In_z_ const char *_Str)
EXPORT UInt32_t get_711(void *vp)
EXPORT UInt32_t get_733(void *vp)
EXPORT void set_733(void *vp, UInt32_t i)
EXPORT UInt32_t get_723(void *vp)
EXPORT int iso9660_date(char *result, time_t crtime)
EXPORT void * e_malloc(size_t size)
EXPORT char * e_strdup(char *s) const
#define memcpy(s1, s2, n)
#define SAFE_TO_REUSE_TABLE_ENTRY
#define INHIBIT_JOLIET_ENTRY
struct directory * reloc_dir
#define INHIBIT_UDF_ENTRY
UInt32_t last_extent_written
#define INHIBIT_ISO9660_ENTRY
struct task_struct * current
#define sprintf(buf, format,...)
static const char * contents
EXPORT char * movebytes(void *fromv, void *tov, ssize_t cnt) const
LOCAL void copy_mult_extent(struct directory_entry *se1, struct directory_entry *se2)
int get_session_start(int *file_addr)
LOCAL void prbytes(char *txt, Uchar *p, int len)
LOCAL void check_rr_relocation(struct directory_entry *de)
LOCAL void merge_remaining_entries(struct directory *this_dir, struct directory_entry **pnt, int n_orig)
struct iso_directory_record * merge_isofs(char *path)
int rr_flags(struct iso_directory_record *idr)
LOCAL int parse_rrflags(Uchar *pnt, int len, int cont_flag)
static UConst char sccsid[]
int merge_previous_session(struct directory *this_dir, struct iso_directory_record *mrootp, char *reloc_root, char *reloc_old_root)
LOCAL int free_mdinfo(struct directory_entry **ptr, int len)
LOCAL struct directory_entry ** read_merging_directory(struct iso_directory_record *mrootp, int *nentp)
int check_prev_session(struct directory_entry **ptr, int len, struct directory_entry *curr_entry, struct stat *statbuf, struct stat *lstatbuf, struct directory_entry **odpnt)
LOCAL void free_directory_entry(struct directory_entry *dirp)
LOCAL int parse_rr(unsigned char *pnt, int len, struct directory_entry *dpnt)
int open_merge_image(char *path)
static struct dir_extent_link * re_dirs
LOCAL int check_rr_dates(struct directory_entry *dpnt, struct directory_entry *current, struct stat *statbuf, struct stat *lstatbuf)
LOCAL int iso_dir_ents(struct directory_entry *de)
LOCAL int merge_old_directory_into_tree(struct directory_entry *dpnt, struct directory *parent)
unsigned char * parse_xa(unsigned char *pnt, int *lenp, struct directory_entry *dpnt)
LOCAL BOOL valid_iso_directory(struct iso_directory_record *idr, int idr_off, size_t space_left)
void finish_cl_pl_for_prev_session()
static struct dir_extent_link * cl_dirs
LOCAL void printasc(char *txt, unsigned char *p, int len)
LOCAL BOOL find_rr(struct iso_directory_record *idr, Uchar **pntp, int *lenp)
void match_cl_re_entries()
EXPORT int readsecs(UInt32_t startsecno, void *buffer, int sectorcount)
static int sum(int x_, int y_)
static unsigned __int64 next
#define offsetof(TYPE, MEMBER)
EXPORT size_t strlcat(char *s1, const char *s2, size_t len)
struct directory_entry * de
struct dir_extent_link * next
struct directory_entry * mxroot
unsigned int starting_block
unsigned int rr_attr_size
unsigned char * rr_attributes
struct directory_entry * next
struct iso_directory_record isorec
struct directory_entry * parent_rec
struct directory * filedir
unsigned int total_rr_attr_size
struct directory * parent
struct directory * subdir
struct directory_entry * self
struct directory_entry * contents
unsigned char name_len[ISODCL(33, 33)]
char extent[ISODCL(3, 10)]
char ext_attr_length[ISODCL(2, 2)]
unsigned char flags[ISODCL(26, 26)]
char size[ISODCL(11, 18)]
unsigned char length[ISODCL(1, 1)]
char volume_set_size[ISODCL(121, 124)]
char root_directory_record[ISODCL(157, 190)]
char logical_block_size[ISODCL(129, 132)]
char reserved[ISODCL(10, 14)]
char signature[ISODCL(7, 8)]
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList