--- ./include/mconfig.h.orig Fri Sep 10 11:05:48 2004 +++ ./include/mconfig.h Mon Jul 3 16:29:14 2006 @@ -486,13 +486,16 @@ #define __MINGW32_HACK__ #include +#define stat __stat64 +#define off_t __int64 +#define fstat _fstat64 #ifdef clock_t #undef clock_t #endif #include #include -#define sleep(a) sleep((unsigned long)(a)*1000l); +#define sleep(a) _sleep((unsigned long)(a)*1000l); /* Mingw32 has no timezone structure */ struct timezone { @@ -505,8 +508,8 @@ #define HAVE_GETTIMEOFDAY 1 /* Mingw32's stat() not allow trailing slash */ -extern int __mgw32__stat(const char *path, struct stat *buf); -#define stat(a,b) __mgw32__stat(a,b) +extern int __mgw32__stat(const char *path, struct __stat64 *buf); +#define __stat64(a,b) __mgw32__stat(a,b) /* FIXME: Mingw32's local/gmtime() returns NULL for dates after 19.01.2038 03:14:07 (time_t > 0x7fffffff) */ extern struct tm* __mgw32__gmtime(const time_t *t); --- ./libmgw32/mgw32.c.orig Fri Sep 10 11:05:48 2004 +++ ./libmgw32/mgw32.c Sun Jul 2 22:21:46 2006 @@ -69,7 +69,7 @@ return (0); } -int __mgw32__stat(const char *path, struct stat *buf){ +int __mgw32__stat(const char *path, struct __stat64 *buf){ char tmppath[PATH_MAX+1]; @@ -78,7 +78,7 @@ tmppath[strlen(tmppath)-1] = '\0'; } - return (stat((const char *)tmppath, buf)); + return (_stat64((const char *)tmppath, buf)); } struct tm* __mgw32__gmtime(const time_t *t) { --- ./mkisofs/Makefile.orig Fri Sep 10 11:05:48 2004 +++ ./mkisofs/Makefile Sun Jul 2 23:17:50 2006 @@ -32,7 +32,7 @@ CPPOPTS += -DUDF CPPOPTS += -DDVD_VIDEO CPPOPTS += -DSORTING -CPPOPTS += -I../libhfs_iso/ +CPPOPTS += -I../libhfs_iso CPPOPTS += -DHAVE_CONFIG_H -DUSE_LIBSCHILY -DUSE_SCG \ '-DAPPID_DEFAULT="MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING"' \ -I../cdrecord @@ -41,9 +41,7 @@ CFILES= mkisofs.c tree.c write.c hash.c rock.c udf.c multi.c \ joliet.c match.c name.c fnmatch.c eltorito.c boot.c \ getopt.c getopt1.c \ - scsi.c \ - scsi_cdr.c cd_misc.c \ - modes.c \ + cd_misc.c \ apple.c volume.c desktop.c mac_label.c stream.c \ ifo_read.c dvd_file.c dvd_reader.c \ defaults.c getnum.c md5c.c --- ./mkisofs/multi.c.orig Sat May 15 15:59:40 2004 +++ ./mkisofs/multi.c Mon Jul 3 16:34:33 2006 @@ -26,6 +26,19 @@ */ #include +#ifdef __MINGW32_HACK__ +#define gethostname __mask__gethostname +#include +#undef gethostname +#include +#include + +#undef USE_SCG +#define _STANDARD_H +#define LOCAL +#define EXPORT +#define EX_BAD (-1) +#endif #include "mkisofs.h" #include #include @@ -189,6 +202,23 @@ { int f = fileno(in_image); +#ifdef __MINGW32_HACK__ + HANDLE h = (HANDLE)_get_osfhandle(f); + OVERLAPPED ov; + DWORD br = 0; /* bytes read */ + long long off = (long long)startsecno * SECTOR_SIZE; + + memset (&ov,0,sizeof(ov)); + ov.Offset = (DWORD)(off&0xffffffff); + ov.OffsetHigh = (DWORD)(off>>32); + + if (!ReadFile(h,buffer,sectorcount * SECTOR_SIZE,&br,&ov)) { + fprintf(stderr," Error reading old image\n"); + exit(10); + } + + return br; +#else if (lseek(f, (off_t) startsecno * SECTOR_SIZE, SEEK_SET) == (off_t) - 1) { #ifdef USE_LIBSCHILY comerr(" Seek error on old image\n"); @@ -207,6 +237,7 @@ #endif } return (sectorcount * SECTOR_SIZE); +#endif } #endif @@ -1137,6 +1168,14 @@ open_merge_image(path) char *path; { + if (path[0]=='-' && path[1]=='\0') { +#ifdef NEED_O_BINARY + setmode(fileno(stdin),O_BINARY); +#endif + in_image = stdin; + return (0); + } + #ifndef USE_SCG in_image = fopen(path, "rb"); if (in_image == NULL) { --- ./mkisofs/tree.c.orig Fri Sep 10 11:05:50 2004 +++ ./mkisofs/tree.c Mon Jul 3 16:26:10 2006 @@ -1570,7 +1570,7 @@ #endif return (0); } -#ifdef HAVE_LARGEFILES +#if defined(HAVE_LARGEFILES) || defined(__MINGW32_HACK__) /* * XXX What happens with Apple HFS? Does it allow files >= 2 GB? */