Overlay/app-cdr/mdf2iso/files/mdf2iso-0.3.0-bigfiles.patch

662 lines
16 KiB
Diff

Only in mdf2iso/src: .deps
Only in mdf2iso.new/src: .kdbgrc.mdf2iso
diff -bur mdf2iso/src/Makefile.am mdf2iso.new/src/Makefile.am
--- mdf2iso/src/Makefile.am 2005-05-19 11:24:11.000000000 +0200
+++ mdf2iso.new/src/Makefile.am 2005-07-31 17:47:36.000000000 +0200
@@ -1,2 +1,3 @@
bin_PROGRAMS = mdf2iso
mdf2iso_SOURCES = mdf2iso.c
+AM_CFLAGS = -D_FILE_OFFSET_BITS=64 -Wall
diff -bur mdf2iso/src/mdf2iso.c mdf2iso.new/src/mdf2iso.c
--- mdf2iso/src/mdf2iso.c 2005-05-22 21:52:08.000000000 +0200
+++ mdf2iso.new/src/mdf2iso.c 2005-07-31 19:41:56.000000000 +0200
@@ -1,4 +1,4 @@
- /* $Id: mdf2iso.c, 22/05/05
+/* $Id: mdf2iso.c, 22/05/05
Copyright (C) 2004,2005 Salvatore Santagati <salvatore.santagati@gmail.com>
@@ -16,19 +16,14 @@
along with this program; if not, write to the
Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
+*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
-#define VERSION "0.3.0"
-
-/* Support Large File */
-
-#define _FILE_OFFSET_BITS 64
-
+#define VERSION "0.3.1"
const char SYNC_HEADER[12] = { (char) 0x00,
@@ -83,14 +78,21 @@
(char) 0x00
};
+#define ISO9660 0
+#define SYNC 1
+#define SYNC_MDF 2
+#define MDF_AUDIO 3
+#define UNKNOWN -1
-void
-toc_file (char *destfilename, int sub)
+int toc_file (char *destfilename, int sub)
{
- char destfiletoc[1024], destfiledat[1024];
+ int ret=0;
+ char *destfiletoc;
+ char *destfiledat;
FILE *ftoc;
- strcpy (destfiletoc, destfilename);
- strcpy (destfiledat, destfilename);
+
+ destfiletoc=strdup(destfilename);
+ destfiledat=strdup(destfilename);
strcpy (destfiletoc + strlen (destfilename) - 4, ".toc");
strcpy (destfiledat + strlen (destfilename) - 4, ".dat");
@@ -100,11 +102,8 @@
fprintf (ftoc, "// Track 1\n");
fprintf (ftoc, "TRACK MODE1_RAW");
- if (sub == 1)
- fprintf (ftoc, " RW_RAW\n");
-
- else
- fprintf (ftoc, "\n");
+ if (sub == 1) fprintf (ftoc, " RW_RAW\n");
+ else fprintf (ftoc, "\n");
fprintf (ftoc, "NO COPY\n");
fprintf (ftoc, "DATAFILE \"%s\"\n", destfiledat);
@@ -114,26 +113,27 @@
}
else
{
- printf ("%s\n", strerror (errno));
- exit (EXIT_FAILURE);
+ printf ("Error opening %s for output: %s\n",destfiletoc,strerror(errno));
+ ret=-1;
};
-
+ free(destfiletoc);
+ free(destfiledat);
+ return ret;
}
-int
-number_file (char *destfilename)
+/*
+int number_file (char *destfilename)
{
int i = 1, test_mdf = 0;
int n_mdf;
char mdf[2], destfilemdf[2354];
FILE *fsource;
+
strcpy (destfilemdf, destfilename);
strcpy (destfilemdf + strlen (destfilename) - 1, ".0");
for (i = 0; test_mdf == 0; i++)
-
{
if ((fsource = fopen (destfilemdf, "rb")) != NULL)
-
{
printf ("\nCheck : ");
sprintf (mdf, "md%d", i);
@@ -141,203 +141,219 @@
printf ("%s, ", destfilemdf);
fclose (fsource);
}
-
else
{
test_mdf = 1;
}
- };
+ }
printf ("\r \n");
n_mdf = i - 1;
return (n_mdf);
}
+*/
-void
-cuesheets (char *destfilename)
+int cuesheets (char *destfilename)
{
- char destfilecue[1024], destfilebin[1024];
+ int ret=0;
+ char *destfilecue;
+ char *destfilebin;
FILE *fcue;
- strcpy (destfilecue, destfilename);
- strcpy (destfilebin, destfilename);
+
+ destfilecue=strdup(destfilename);
+ destfilebin=strdup(destfilename);
strcpy (destfilecue + strlen (destfilename) - 4, ".cue");
strcpy (destfilebin + strlen (destfilename) - 4, ".bin");
- fcue = fopen (destfilecue, "w");
+ if ((fcue = fopen (destfilecue, "w"))!=NULL)
+ {
fprintf (fcue, "FILE \"%s\" BINARY\n", destfilebin);
fprintf (fcue, "TRACK 1 MODE1/2352\n");
fprintf (fcue, "INDEX 1 00:00:00\n");
rename (destfilename, destfilebin);
printf ("Create Cuesheets : %s\n", destfilecue);
fclose (fcue);
+ }
+ else
+ {
+ printf ("Error opening %s for output: %s\n",destfilecue,strerror(errno));
+ ret=-1;
+ }
+ return ret;
}
-void
-main_percent (int percent_bar)
+int previous_percent=-1;
+void main_percent (int percent_bar)
+// Prints a progress bar, takes a percentage as argument.
{
- int progress_bar, progress_space;
+ //int progress_bar, progress_space;
+
+ if (percent_bar==previous_percent) return; // Nothing changed, don't waste CPU cycles.
+
+ printf("%3d%% [:%.*s>%.*s:]\r",percent_bar,20-(percent_bar/5)," ",
+ percent_bar/5,"====================");
+ /*
printf ("%d%% [:", percent_bar);
- for (progress_bar = 1; progress_bar <= (int) (percent_bar / 5);
- progress_bar++)
+ for (progress_bar = 1; progress_bar <= (int) (percent_bar / 5); progress_bar++)
printf ("=");
printf (">");
- for (progress_space = 0; progress_space < (20 - progress_bar);
- progress_space++)
- printf (" ");
+ for (; progress_bar <= 20; ++progress_bar) printf (" ");
printf (":]\r");
+ */
}
-void
-usage ()
+void usage ()
+// Prints the command line syntax
{
- printf ("mdf2iso v%s by Salvatore Santagati\n", VERSION);
- printf ("Web : http//mdf2iso.berlios.de\n");
- printf ("Email : salvatore.santagati@gmail.com\n");
- printf ("Irc : irc.freenode.net #ignus\n");
- printf ("Note : iodellavitanonhocapitouncazzo\n");
- printf ("License : released under the GNU GPL v2 or later\n\n");
+ printf (" Web : http//mdf2iso.berlios.de\n");
+ printf (" Email : salvatore.santagati@gmail.com\n");
+ printf (" Irc : irc.freenode.net #ignus\n");
+ printf (" Note : iodellavitanonhocapitouncazzo\n\n");
printf ("Usage :\n");
- printf ("mdf2iso [OPTION] [BASENAME.MDF] [DESTINATION]\n\n");
- printf ("OPTION\n");
- printf ("\t--toc Generate toc file\n");
- printf ("\t--cue Generate cue file\n");
- printf ("\t--help display this notice\n\n");
+ printf ("mdf2iso [--cue|--toc|--help] <sourcefile> [destfile]\n\n");
+ printf ("Options:\n");
+ printf (" --toc Generate toc/dat files\n");
+ printf (" --cue Generate cue/bin files\n");
+ printf (" --help Display this notice\n");
+ printf (" sourcefile\tFilename of the .mdf file to be converted\n");
+ printf (" destfile\tFilename of the target ISO9660 file.\n"\
+ "\t\tIf none given, one is derived from sourcefile.\n\n");
}
-int
-main (int argc, char **argv)
+char mdftype(FILE *f)
+/* returns
+ -1 for unknown
+ 0 for ISO9660
+ 1 for SYNC
+ 2 for SYNC MDF
+ 3 for MDF Audio
+ (see #defines above)
+*/
{
- int seek_ecc, sector_size, seek_head, sector_data, n_mdf;
+ char buf[12];
+
+ fseek(f, 32768, SEEK_SET);
+ fread(buf, sizeof (char), 8, f);
+ if (!memcmp (ISO_9660, buf, 8)) return ISO9660; // File is ISO9660
+
+ fseek(f, 0L, SEEK_SET);
+ fread(buf, sizeof (char), 12, f);
+
+ fseek (f, 2352, SEEK_SET);
+
+ if (!memcmp (SYNC_HEADER, buf, 12)) // Has SYNC_HEADER
+ {
+ fread (buf, sizeof (char), 12, f);
+ if (!memcmp (SYNC_HEADER_MDF, buf, 12)) return SYNC_MDF; // File is SYNC MDF
+ if (!memcmp (SYNC_HEADER, buf, 12)) return SYNC; // File is SYNC
+ }
+ else // Does not have SYNC_HEADER
+ {
+ fread(buf, sizeof (char), 12, f);
+ if (!memcmp (SYNC_HEADER_MDF_AUDIO, buf, 12)) return MDF_AUDIO; // File is MDF Audio
+ }
+
+ // Reached a point where nothing else matters.
+ return UNKNOWN; // Unknown format
+}
+
+
+// === Main program code ===
+
+int main (int argc, char **argv)
+{
+ int seek_ecc, sector_size, seek_head, sector_data;//, n_mdf;
int cue = 0, cue_mode = 0, sub = 1, toc = 0, sub_toc = 0;
int opts = 0;
- double size_iso, write_iso;
- long percent = 0;
- long i, source_length, progressbar;
- char buf[2448], destfilename[2354];
+ long i, source_length;
+ char buf[2448];
+ char *destfilename=NULL;
+ char *basefilename=NULL;
FILE *fdest, *fsource;
+ // Print identification
+ printf ("mdf2iso v%s by Salvatore Santagati\n", VERSION);
+ printf ("Licensed under GPL v2 or later\n");
- if (argc < 2)
+ // *** Process command line options ***
+
+ if (argc < 2)
{
- usage ();
- exit (EXIT_FAILURE);
+ // Not enough parameters; print help
+ usage();
+ exit(EXIT_FAILURE);
}
- else
-
- {
+ // Search for options --cue and --toc
for (i = 0; i < argc; i++)
-
{
-
if (!strcmp (argv[i], "--help"))
-
{
usage ();
exit (EXIT_SUCCESS);
}
if (!strcmp (argv[i], "--cue"))
-
{
cue = 1;
opts++;
}
if (!strcmp (argv[i], "--toc"))
-
{
toc = 1;
opts++;
}
}
- if ((cue == 1) && (toc == 1))
-
- {
- usage ();
- exit (EXIT_FAILURE);
- }
- if ((opts == 1) && (argc <= 2))
-
+ // Catch impossible parameter combinations
+ if (((cue == 1) && (toc == 1)) ||
+ ((opts == 1) && (argc <= 2)))
{
- usage ();
- exit (EXIT_FAILURE);
+ usage();
+ exit(EXIT_FAILURE);
}
+ // Get the base filename
+ basefilename=argv[1+opts]; // simple pointer, but makes life easier.
+ // Get the destination filename
if (argc >= (3 + opts))
- strcpy (destfilename, argv[2 + opts]);
-
- else
-
- {
- strcpy (destfilename, argv[1 + opts]);
- if (strlen (argv[1 + cue]) < 5
- || strcmp (destfilename + strlen (argv[1 + opts]) - 4, ".mdf"))
- strcpy (destfilename + strlen (argv[1 + opts]), ".iso");
-
+ // The destination filename is explicitly entered at the prompt
+ destfilename=strdup(argv[2 + opts]);
else
- strcpy (destfilename + strlen (argv[1 + opts]) - 4, ".iso");
- }
- if ((fsource = fopen (argv[1 + opts], "rb")) != NULL)
-
{
- fseek (fsource, 32768, SEEK_CUR);
- fread (buf, sizeof (char), 8, fsource);
- if (memcmp (ISO_9660, buf, 8))
-
+ // Derive destination filename from the basename:
+ // If basename is "*.mdf" use "*.iso" als destname
+ // otherwise simply append ".iso" to the basename to create destname.
+ destfilename=strdup(basefilename);
+ i=strlen(destfilename); // Reusing 'i' here as temporary variable
+ if (i < 5 || strcmp(destfilename + i - 4, ".mdf"))
{
- fseek (fsource, 0L, SEEK_SET);
- fread (buf, sizeof (char), 12, fsource);
- if (!memcmp (SYNC_HEADER, buf, 12))
-
- {
- fseek (fsource, 0L, SEEK_SET);
- fseek (fsource, 2352, SEEK_CUR);
- fread (buf, sizeof (char), 12, fsource);
- if (!memcmp (SYNC_HEADER_MDF, buf, 12))
-
- {
- if (cue == 1)
- {
- cue_mode = 1;
-
- /* BAD SECTOR TO NORMAL IMAGE */
- seek_ecc = 96;
- sector_size = 2448;
- sector_data = 2352;
- seek_head = 0;
- }
-
- else if (toc == 0)
-
- {
-
- /*BAD SECTOR */
- seek_ecc = 384;
- sector_size = 2448;
- sector_data = 2048;
- seek_head = 16;
+ destfilename=realloc(destfilename,i+5);
+ strcat(destfilename, ".iso");
}
-
else
-
- {
-
- /*BAD SECTOR */
- seek_ecc = 0;
- sector_size = 2448;
- sector_data = 2448;
- seek_head = 0;
- sub_toc = 1;
- }
+ strcpy(destfilename + i - 3, "iso");
}
- else
+ // *** Preprocess basefile ***
+ // Try opening basefile
+ if ((fsource = fopen(basefilename, "rb")) == NULL)
{
- if (!memcmp (SYNC_HEADER, buf, 12))
+ free(destfilename);
+ printf ("Could not open %s: %s\n", basefilename, strerror(errno));
+ exit (EXIT_FAILURE);
+ }
+ // Determine filetype & set some stuff accordingly (or exit)
+ switch (mdftype(fsource))
{
+ case ISO9660:
+ printf("%s is already ISO9660.\n",basefilename);
+ fclose(fsource);
+ free(destfilename);
+ exit(EXIT_SUCCESS);
+ case SYNC:
if (cue == 1)
{
cue_mode = 1;
@@ -348,129 +364,134 @@
seek_head = 0;
}
if (toc == 0)
-
{
-
/*NORMAL IMAGE */
seek_ecc = 288;
sector_size = 2352;
sector_data = 2048;
seek_head = 16;
}
-
else
-
{
seek_ecc = 0;
sector_size = 2352;
sector_data = 2352;
seek_head = 0;
}
- }
-
- else
-
- {
- printf ("Sorry I don't know this format :(\n");
- exit (EXIT_FAILURE);
- }
- }
- }
-
- else
-
+ break;
+ case SYNC_MDF:
+ if (cue == 1)
{
- fseek (fsource, 0L, SEEK_SET);
- fseek (fsource, 2352, SEEK_CUR);
- fread (buf, sizeof (char), 12, fsource);
- if (memcmp (SYNC_HEADER_MDF_AUDIO, buf, 12))
+ cue_mode = 1;
+ /* BAD SECTOR TO NORMAL IMAGE */
+ seek_ecc = 96;
+ sector_size = 2448;
+ sector_data = 2352;
+ seek_head = 0;
+ }
+ else if (toc == 0)
{
- printf ("Sorry I don't know this format :(\n");
- exit (EXIT_FAILURE);
+ /*BAD SECTOR */
+ seek_ecc = 384;
+ sector_size = 2448;
+ sector_data = 2048;
+ seek_head = 16;
}
-
else
-
{
-
+ /*BAD SECTOR */
+ seek_ecc = 0;
+ sector_size = 2448;
+ sector_data = 2448;
+ seek_head = 0;
+ sub_toc = 1;
+ }
+ break;
+ case MDF_AUDIO:
/*BAD SECTOR AUDIO */
seek_head = 0;
sector_size = 2448;
seek_ecc = 96;
sector_data = 2352;
cue = 0;
+ break;
+ default:printf("Unknown format for %s.\n",basefilename);
+ fclose(fsource);
+ free(destfilename);
+ exit (EXIT_FAILURE);
}
- }
- if ((fdest = fopen (destfilename, "wb")) != NULL);
- else
+ // *** Create destination file ***
+
+ // Try opening the destination file for output
+ if ((fdest = fopen (destfilename, "wb")) == NULL)
{
- printf ("%s\n", strerror (errno));
+ printf ("Unable to open %s for output: %s\n",destfilename,strerror(errno));
+ free(destfilename);
+ fclose(fsource);
exit (EXIT_FAILURE);
- };
+ }
+
+
fseek (fsource, 0L, SEEK_END);
source_length = ftell (fsource) / sector_size;
- size_iso = (int) (source_length * sector_data);
- progressbar = 100 / source_length;
fseek (fsource, 0L, SEEK_SET);
-
{
for (i = 0; i < source_length; i++)
-
{
fseek (fsource, seek_head, SEEK_CUR);
- if (fread (buf, sizeof (char), sector_data, fsource));
-
- else
+ if (fread(buf, sizeof (char), sector_data, fsource)!=sector_data)
{
- printf ("%s\n", strerror (errno));
+ printf ("Error reading from %s: %s\n",basefilename, strerror (errno));
+ fclose(fsource);
+ fclose(fdest);
+ remove(destfilename);
+ free(destfilename);
exit (EXIT_FAILURE);
- };
- if (fwrite (buf, sizeof (char), sector_data, fdest));
-
- else
+ }
+ if (fwrite (buf, sizeof (char), sector_data, fdest)!=sector_data)
{
- printf ("%s\n", strerror (errno));
+ printf ("Error writing to %s: %s\n",destfilename, strerror (errno));
+ fclose(fsource);
+ fclose(fdest);
+ remove(destfilename);
+ free(destfilename);
exit (EXIT_FAILURE);
- };
+ }
fseek (fsource, seek_ecc, SEEK_CUR);
- write_iso = (int) (sector_data * i);
- if (i != 0)
- percent = (int) (write_iso * 100 / size_iso);
- main_percent (percent);
- }} printf ("100%%[:====================:]\n");
+ main_percent(i*100/source_length);
+ }
+ } printf ("100%% [:=====================:]\n");
fclose (fsource);
fclose (fdest);
- if (cue == 1)
- cuesheets (destfilename);
- if (toc == 1)
- toc_file (destfilename, sub_toc);
+ // *** create Toc or Cue file is requested ***
+ if (cue == 1) if (cuesheets(destfilename))
+ {
+ free(destfilename);
+ exit(EXIT_FAILURE);
+ }
+ if (toc == 1) if (toc_file(destfilename, sub_toc))
+ {
+ free(destfilename);
+ exit(EXIT_FAILURE);
+ }
if ((toc == 0) && (cue == 0))
- printf ("Create iso9660: %s\n", destfilename);
+ printf("Created iso9660: %s\n", destfilename);
+
+ free(destfilename);
exit (EXIT_SUCCESS);
- }
- else
- printf ("This is file iso9660 ;)\n");
+/*
n_mdf = number_file (destfilename) - 1;
- /* if (n_mdf > 1)
-
+ / * if (n_mdf > 1)
{
printf ("\rDetect %d md* file and now emerge this\n", n_mdf);
}
- */
+ * /
fclose (fsource);
- exit (EXIT_SUCCESS);
- }
-
- else
- {
- printf ("%s\n", strerror (errno));
- exit (EXIT_FAILURE);
- };
- }
+ exit (EXIT_SUCCESS);*/
}