5 "@(#)write.c 1.146 16/12/13 joerg";
44#include "dvd_reader.h"
56#define SIZEOF_UDF_EXT_ATTRIBUTE_COMMON 50
61#define INSERTMACRESFORK 1
89#if defined(APPLE_HYB) || defined(USE_LARGEFILES)
92 int isrfile,
unsigned rba));
146LOCAL void hfs_file_gen
__PR((UInt32_t start_extent));
149EXPORT int adj_size
__PR((
int Csize, UInt32_t start_extent,
int extra));
156LOCAL int compare_sort
__PR((
const void *rr,
const void *
ll));
158LOCAL int sort_file_addresses
__PR((
void));
165#define FILL_SPACE(X) memset(vol_desc.X, ' ', sizeof (vol_desc.X))
193 _(
"Implementation botch, write 0 bytes (size %d count %d).\n"),
208 comerr(
_(
"Cannot open '%s'.\n"), nbuf);
258 _(
"Trying to write %d bytes (not a multiple of 2048).\n"),
275 if ((amt <= 2048) && islast) {
356#if defined(APPLE_HYB) || defined(USE_LARGEFILES)
390 int bytestowrite = 0;
391 int correctedsize = 0;
402#if defined(APPLE_HYB) || defined(USE_LARGEFILES)
405#if defined(INSERTMACRESFORK) && defined(UDF)
406 if (isrfile && use_udf) {
439 if (amt < use && amt != remain) {
449 _(
"Try to use the option -data-change-warn\n"));
451 _(
"Files should not change while mkisofs is running.\n"));
454 _(
"File '%s' did %s.\n"),
457 _(
"shrink"):
_(
"grow"));
474#if defined(APPLE_HYB) && defined(INSERTMACRESFORK) && defined(UDF)
475 if (unroundeduse == remain && isrfile && use_udf && correctedsize) {
477 if (use - unroundeduse == correctedsize) {
480 }
else if (use - unroundeduse > correctedsize) {
481 bytestowrite = use - correctedsize;
483 }
else if (use - unroundeduse < correctedsize) {
484 bytestowrite = unroundeduse;
485 correctedsize -= use - unroundeduse;
512#ifndef NO_FLOATINGPOINT
518 (
int)((
frac+.00005) * 10000.)%100,
527#if defined(INSERTMACRESFORK) && defined(UDF)
528 if (isrfile && use_udf && correctedsize) {
555 if (remain !=
size) {
559 _(
"shrink"):
_(
"grow"));
584 _(
"The file name is %s and pad is %d, size is %lld and extent is %d\n"),
608#if defined(INSERTMACRESFORK) && defined(UDF)
609 if (file_is_resource(dwpnt->
name, dwpnt->hfstype) && (dwpnt->
size > 0) && use_udf) {
616 file_is_resource(dwpnt->
name, dwpnt->hfstype) && (dwpnt->
size > 0), rba);
634#define dvd_aud_vid_flag 0
641#if defined(APPLE_HYB) || defined(DVD_AUD_VID)
651 for (
i = 0;
i < dwpnt->
pad;
i++)
694 rpnt = (*r)->isorec.name;
695 lpnt = (*l)->isorec.name;
702 if ((*r)->assoc && (*r)->assoc == (*
l))
704 if ((*l)->assoc && (*l)->assoc == (*
r))
713 if (
strcmp(rpnt, lpnt) == 0) {
715 if ((*r)->mxpart < (*l)->mxpart)
717 else if ((*r)->mxpart > (*l)->mxpart)
721 _(
"Error: '%s' and '%s' have the same ISO9660 name '%s'.\n"),
722 (*r)->whole_name, (*l)->whole_name,
732 if (
strcmp((*r)->name, (*l)->name) == 0) {
734 _(
"Error: '%s' and '%s' have the same Rock Ridge name '%s'.\n"),
735 (*r)->whole_name, (*l)->whole_name,
750 if (
strcmp(rpnt,
".") == 0)
752 if (
strcmp(lpnt,
".") == 0)
755 if (
strcmp(rpnt,
"..") == 0)
757 if (
strcmp(lpnt,
"..") == 0)
766 if ((*r)->isorec.name_len[0] == 1 && *rpnt == 0)
768 if ((*l)->isorec.name_len[0] == 1 && *lpnt == 0)
771 if ((*r)->isorec.name_len[0] == 1 && *rpnt == 1)
773 if ((*l)->isorec.name_len[0] == 1 && *lpnt == 1)
777 while (*rpnt && *lpnt) {
778 if (*rpnt ==
';' && *lpnt !=
';')
780 if (*rpnt !=
';' && *lpnt ==
';')
783 if (*rpnt ==
';' && *lpnt ==
';')
786 if (*rpnt ==
'.' && *lpnt !=
'.')
788 if (*rpnt !=
'.' && *lpnt ==
'.')
791 if ((
unsigned char) *rpnt < (
unsigned char) *lpnt)
793 if ((
unsigned char) *rpnt > (
unsigned char) *lpnt)
832 s_entry = s_entry->
next;
848 sortlist[
j++] = s_entry;
850 sortlist[dcount] = s_entry;
855 s_entry = s_entry->
next;
861 _(
"Directory size too small (. or .. may be missing)\n"));
881 for (
i = 0;
i < dcount + xcount - 1;
i++) {
882 sortlist[
i]->
next = sortlist[
i + 1];
885 sortlist[dcount + xcount - 1]->
next =
NULL;
886 *sort_dir = sortlist[0];
929 r_sort = (*r)->s_entry->sort;
930 l_sort = (*l)->s_entry->sort;
932 if (r_sort != l_sort)
933 return (r_sort < l_sort ? 1 : -1);
935 return ((*r)->extent - (*l)->extent);
943reassign_link_addresses(dpnt)
951 for (s_entry = dpnt->
contents; s_entry; s_entry = s_entry->
next) {
953 if (s_entry->sort != NOT_SORTED)
964 reassign_link_addresses(dpnt->
subdir);
980 UInt32_t start_extent;
1000 start_extent =
dw_head->extent;
1007 sortlist[
i] = dwpnt;
1012 (
int (*)(
const void *,
const void *))compare_sort);
1018 for (
i = 0;
i <
num-1;
i++) {
1019 sortlist[
i]->
next = sortlist[
i+1];
1028 for (
i = 0, dwpnt =
dw_head;
i <
num;
i++, dwpnt = dwpnt->next) {
1030 dwpnt->extent =
s_entry->starting_block = start_extent;
1034 UInt32_t
ext = start_extent;
1042 s_entry->
mxroot->starting_block = start_extent;
1050 if (s_e == s_entry->
mxroot)
1067 start_extent += dwpnt->pad;
1093 title_set_info_t *title_set_info =
NULL;
1105 if (maxlen >
sizeof (dvd_path))
1106 maxlen =
sizeof (dvd_path);
1109 fprintf(
stderr,
_(
"Found 'VIDEO_TS', the path is %s \n"), dvd_path);
1111 title_set_info = DVDGetFileSet(dvd_path);
1112 if (title_set_info == 0) {
1153#ifdef USE_LARGEFILES
1161 if (s_entry->
mxpart == 0)
1167 if (s_entry->
mxpart != 1) {
1169 _(
"Panic: Multi extent parts for %s not sorted.\n"),
1187 s_hash->de->sort =
MAX(s_entry->sort, s_hash->de->sort);
1189 s_entry->sort = NOT_SORTED;
1205 while (finddir && finddir->
self != s_entry) {
1206 finddir = finddir->
next;
1210 if (title_set_info != 0) {
1211 DVDFreeFileSet(title_set_info);
1215 _(
"Fatal goof - could not find dir entry for '%s'\n"),
1278 if (s_entry->
size) {
1290 pad = DVDGetFilePad(title_set_info,
s_entry->name);
1293 _(
"Implementation botch. Video pad for file %s is %d\n"),
1296 _(
"Either the *.IFO file is bad or you found a mkisofs bug.\n"));
1301 _(
"The pad was %d for file %s\n"),
1312 dwpnt->hfstype =
s_entry->hfs_type;
1335#ifdef USE_LARGEFILES
1347 if (s_entry->
mxpart == 0) {
1357 if (s_entry->
mxpart != 1) {
1359 _(
"Panic: Multi extent parts for %s not sorted.\n"),
1396#if defined(INSERTMACRESFORK) && defined(UDF)
1397 if (file_is_resource(dwpnt->
name, dwpnt->
s_entry->hfs_type) && (dwpnt->
size > 0) && use_udf) {
1420 _(
"Warning: large file '%s'\n"),
1423 _(
"Starting block is %d\n"),
1426 _(
"Reported file size is %lld\n"),
1436 _(
"Extent overflow processing file '%s'\n"),
1439 _(
"Starting block is %d\n"),
1442 _(
"Reported file size is %lld\n"),
1465 if (title_set_info !=
NULL) {
1466 DVDFreeFileSet(title_set_info);
1470 _(
"Could not find correct 'VIDEO_TS' directory.\n"));
1485 s_entry_d = s_entry;
1486 s_entry = s_entry->
next;
1501 if (apple_both && s_entry_d->hfs_ent && !s_entry_d->assoc &&
1503 free(s_entry_d->hfs_ent);
1507#ifdef DUPLICATES_ONCE
1508 if (s_entry_d->digest_fast) {
1510 if (s_entry_d->digest_full &&
1511 (s_entry_d->digest_full != s_entry_d->digest_fast))
1512 free(s_entry_d->digest_full);
1514 free(s_entry_d->digest_fast);
1516 s_entry_d->digest_fast =
NULL;
1517 s_entry_d->digest_full =
NULL;
1543 unsigned int ce_address = 0;
1545 unsigned int ce_index = 0;
1546 unsigned int ce_size;
1547 unsigned int dir_index;
1548 char *directory_buffer;
1552 unsigned int total_size;
1555 directory_buffer = (
char *)
e_malloc(total_size);
1556 memset(directory_buffer, 0, total_size);
1563 ce_buffer = (
char *)
e_malloc(ce_size);
1564 memset(ce_buffer, 0, ce_size);
1575 s_entry = s_entry->
next;
1583 new_reclen = s_entry->
isorec.length[0];
1584 if ((dir_index & (
SECTOR_SIZE - 1)) + new_reclen >=
1590 s_entry->
isorec.name_len[0]);
1592 s_entry->
isorec.name_len[0];
1596 if (dir_index & 1) {
1597 directory_buffer[dir_index++] = 0;
1632 _(
"Warning: ce_index(%d) && ce_address(%d) not initialized\n"),
1633 ce_index, ce_address);
1637 if (pnt[0] ==
'C' && pnt[1] ==
'E') {
1638 nbytes =
get_733((
char *)pnt + 20);
1645 ce_address + (ce_index >> 11));
1655 memcpy(ce_buffer + ce_index,
1656 pnt + pnt[2], nbytes);
1668 memcpy(directory_buffer + dir_index,
1673 if (dir_index & 1) {
1674 directory_buffer[dir_index++] = 0;
1676 s_entry_d = s_entry;
1677 s_entry = s_entry->
next;
1689 if (dpnt->
size != dir_index) {
1691 _(
"Unexpected directory length %lld expected: %d '%s'\n"),
1697 free(directory_buffer);
1698 directory_buffer =
NULL;
1703 _(
"Continuation entry record length mismatch %d expected: %d.\n"),
1740 if (rr->
parent->path_index <
ll->parent->path_index) {
1743 if (rr->
parent->path_index >
ll->parent->path_index) {
1746 return (
strcmp(rr->
self->isorec.name,
ll->self->isorec.name));
1808 if ((*npnt == 0) || (dpnt ==
root)) {
1818 _(
"Fatal ISO9660 goof - directory has amnesia\n"));
1831 dpnt->
parent->path_index);
1833 dpnt->
parent->path_index);
1835 if (dpnt->
parent->path_index > 0xffff) {
1836 static int warned = 0;
1841 _(
"Unable to generate sane path tables - too many directories (%u)\n"),
1842 dpnt->
parent->path_index);
1845 _(
"Try to use the option -no-limit-pathtables\n"));
1872 _(
"Path table lengths do not match %d expected: %d\n"),
1930 for (
i = 0;
i < hfs_pad;
i++)
1947 _(
"Total directory extents being written = %u\n"),
1954 _(
"Total extents scheduled to be written (inc HFS) = %u\n"),
1960 _(
"Total extents scheduled to be written = %u\n"),
1973 if (HFS_ROUND_UP(hce->hfs_tot_size) -
1974 hce->hfs_tot_size * HFS_BLOCKSZ) {
1976 HFS_ROUND_UP(hce->hfs_tot_size) -
1977 hce->hfs_tot_size * HFS_BLOCKSZ, 1,
outfile, 0,
FALSE);
1985 mac_boot.off, 0, 0);
1996 _(
"Total extents actually written (inc HFS) = %u\n"),
1998 fprintf(
stderr,
_(
"(Size of ISO volume = %d, HFS extra = %d)\n"),
2010 _(
"Number of extents written not what was predicted. Please fix.\n"));
2022 "next extent, last_extent, last_extent_written %d %d %d\n",
2118 vol_desc.file_structure_version[0] = 1;
2131 char *xap = &((
char *)&
vol_desc)[1024];
2133 memcpy(&xap[0],
"CD-XA001", 8);
2134 memcpy(&xap[8],
"\0\0", 2);
2135 memcpy(&xap[10],
"\0\0\0\0\0\0\0\0", 8);
2136 memcpy(&xap[18],
"\0\0\0\0\0\0\0\0", 8);
2163 vol_desc.file_structure_version[0] = 2;
2184 memset(&evol_desc, 0,
sizeof (evol_desc));
2214 memset(vers, 0,
sizeof (vers));
2224 for (
i = 1;
i < X_ac;
i++) {
2236 else if (X_av[
i][0] ==
'/')
2308 while (
p >
from && *
p !=
'/')
2358 UInt32_t starting_extent;
2369 UInt32_t starting_extent;
2385 UInt32_t starting_extent;
2396 UInt32_t starting_extent;
2401 starting_extent += 16;
2403 if ((emod = starting_extent % 16) != 0) {
2404 starting_extent += 16 - emod;
2415 UInt32_t starting_extent;
2417 starting_extent += 150;
2444 if (sort_file_addresses() == 0)
2445 reassign_link_addresses(
root);
2456 hfs_file_gen(start_extent);
2458 else if (use_prep_boot || use_chrp_boot)
2481 UInt32_t starting_extent;
2496 UInt32_t starting_extent;
2504 UInt32_t starting_extent;
2510 s_entry =
root->contents;
2547 for (
i = 0;
i < npad;
i++) {
2571 for (
i = 0;
i < npad;
i++) {
2588 for (
i = 0;
i < 150;
i++) {
2609 if (hfs_parms ==
NULL)
2624hfs_file_gen(start_extent)
2625 UInt32_t start_extent;
2633 hce = (hce_mem *)
e_malloc(
sizeof (hce_mem));
2635 hce->error = (
char *)
e_malloc(1024);
2638 hce->hfs_ce = hce->hfs_hdr = hce->hfs_map = 0;
2643 if (gen_pt || use_prep_boot || use_chrp_boot)
2647 hce->hfs_map_size = HFS_MAP_SIZE;
2649 hce->hfs_map_size = 0;
2653 for (
p = hfs_parms; *
p;
p++)
2658 if ((hce->ctc_size = hfs_get_parms(
"CTC")) == 0)
2659 hce->ctc_size = CTC;
2662 if ((hce->max_XTCsize = hfs_get_parms(
"MAX_XTCSIZE")) == 0)
2663 hce->max_XTCsize = MAX_XTCSIZE;
2666 if ((loop = hfs_get_parms(
"CTC_LOOP")) == 0)
2680 hce->error[0] =
'\0';
2684 Csize = make_mac_volume(
root, start_extent);
2695 if (loop == 0 ||
errno != HCE_ERROR) {
2697 if (
errno == HCE_ERROR)
2706 hce->ctc_size *= CTC;
2721 hfs_extra = HFS_ROUND_UP(hce->hfs_tot_size) /
SECTOR_SIZE;
2726 mac_boot.name = hfs_boot_file;
2733 if (gen_mac_label(&mac_boot)) {
2742 perr(
"Autostart filename must less than 12 characters");
2759 (hce->hfs_hdr_size + hce->hfs_map_size) * HFS_BLOCKSZ,
2762 hfs_pad -= (start_extent + (hce->hfs_hdr_size + hce->hfs_map_size) /
2766 gen_prepboot_label(hce->hfs_map);
2779 hce = (hce_mem *)
e_malloc(
sizeof (hce_mem));
2782 hce->hfs_ce = hce->hfs_hdr = hce->hfs_map = 0;
2785 hce->hfs_map_size = HFS_MAP_SIZE;
2787 hce->hfs_map = (
unsigned char *)
e_malloc(hce->hfs_map_size * HFS_BLOCKSZ);
2788 gen_prepboot_label(hce->hfs_map);
2828adj_size(Csize, start_extent,
extra)
2830 UInt32_t start_extent;
2845 start_extent -= (
extra / HFS_BLK_CONV);
2857 s_entry =
dw->s_entry;
2868 if (!s_entry->hfs_ent)
2871 start_extent +=
size;
2874 return (start_extent);
2891 for (s_entry = dpnt->
contents; s_entry;
2892 s_entry = s_entry->
next) {
2897 if (s_entry->hfs_ent ||
2915 adj_size_other(dpnt->
subdir);
2934 int tot_size = hce->hfs_map_size + hce->hfs_hdr_size;
2945 if (tot_size > 64) tot_size = 64;
2948 n = tot_size / HFS_BLK_CONV;
2949 r = tot_size % HFS_BLK_CONV;
2970insert_padding_file(
size)
2976 size *= HFS_BLOCKSZ;
int strcmp(const char *String1, const char *String2)
char * strstr(char *String1, char *String2)
ACPI_SIZE strlen(const char *String)
char * strcpy(char *DstString, const char *SrcString)
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
size_t strlcpy(char *d, const char *s, size_t bufsize)
void add_hash(struct hash_table *table, unsigned char *name, int len, unsigned char *pointer)
_In_ fcb _In_ chunk _In_ uint64_t _In_ uint64_t _In_ bool _In_opt_ void _In_opt_ PIRP _In_ LIST_ENTRY _In_ uint8_t _In_ uint64_t _In_ bool file_write
EXPORT BOOL errwarnonly(int etype, const char *fname)
EXPORT BOOL errabort(int etype, const char *fname, BOOL doexit)
EXPORT BOOL errhidden(int etype, const char *fname)
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)
EXPORT int errmsg(char *msg, va_alist)
static const WCHAR *const ext[]
#define ROUND_UP(n, align)
EXPORT ssize_t ffileread(FILE *f, void *buf, size_t len)
GLuint GLuint GLsizei count
GLdouble GLdouble GLdouble r
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_ _CRTIMP FILE *__cdecl freopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode, _Inout_ FILE *_File)
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
_Check_return_opt_ _CRTIMP int __cdecl fflush(_Inout_opt_ FILE *_File)
_Check_return_opt_ _CRTIMP size_t __cdecl fread(_Out_writes_bytes_(_ElementSize *_Count) void *_DstBuf, _In_ size_t _ElementSize, _In_ size_t _Count, _Inout_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
_Check_return_opt_ _CRTIMP int __cdecl fseek(_Inout_ FILE *_File, _In_ long _Offset, _In_ int _Origin)
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_ _CRTIMP long __cdecl ftell(_Inout_ FILE *_File)
_Check_return_opt_ _CRTIMP size_t __cdecl fwrite(_In_reads_bytes_(_Size *_Count) const void *_Str, _In_ size_t _Size, _In_ size_t _Count, _Inout_ FILE *_File)
_Check_return_ _CRTIMP int __cdecl sscanf(_In_z_ const char *_Src, _In_z_ _Scanf_format_string_ const char *_Format,...)
REFIID LPVOID DWORD_PTR dw
EXPORT void do_inode(struct directory *dpnt)
EXPORT void do_dir_nlink(struct directory *dpnt)
#define ISO_VD_SUPPLEMENTARY
EXPORT void set_723(void *vp, UInt32_t i)
EXPORT void set_731(void *vp, UInt32_t i)
EXPORT void set_722(void *vp, UInt32_t i)
EXPORT void set_721(void *vp, UInt32_t i)
EXPORT void set_732(void *vp, UInt32_t i)
EXPORT UInt32_t get_733(void *vp)
EXPORT void set_733(void *vp, UInt32_t i)
EXPORT char * findgequal(char *s)
EXPORT int iso9660_date(char *result, time_t crtime)
char *abstract char * volset_id
int volume_sequence_number
struct iso_directory_record root_record
unsigned int path_table_size
EXPORT void * e_malloc(size_t size)
int extension_record_size
UInt32_t extension_record_extent
EXPORT int iso9660_ldate(char *result, time_t crtime, int nsec, int gmtoff)
EXPORT char * e_strdup(char *s) const
unsigned int path_table[4]
#define memcpy(s1, s2, n)
struct directory * reloc_dir
#define INHIBIT_ISO9660_ENTRY
#define sprintf(buf, format,...)
EXPORT char * movebytes(void *fromv, void *tov, ssize_t cnt) const
EXPORT char ** saved_av()
#define offsetof(TYPE, MEMBER)
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
void __cdecl qsort(_Inout_updates_bytes_(_NumOfElements *_SizeOfElements) void *_Base, _In_ size_t _NumOfElements, _In_ size_t _SizeOfElements, _In_ int(__cdecl *_PtFuncCompare)(const void *, const void *))
EXPORT int seterrno(int err)
struct directory_entry * s_entry
struct deferred_write * 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
unsigned int total_rr_attr_size
struct directory * parent
struct directory * subdir
struct directory_entry * self
struct directory_entry * contents
unsigned int starting_block
char version[ISODCL(7, 7)]
char reserved[ISODCL(10, 14)]
char signature[ISODCL(7, 8)]
unsigned int of_start_extent
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList