SOURCES: mdf2iso-lfs.patch (NEW) - support for LARGE FILE SIZE

tiwek tiwek at pld-linux.org
Mon May 8 11:13:36 CEST 2006


Author: tiwek                        Date: Mon May  8 09:13:36 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- support for LARGE FILE SIZE

---- Files affected:
SOURCES:
   mdf2iso-lfs.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/mdf2iso-lfs.patch
diff -u /dev/null SOURCES/mdf2iso-lfs.patch:1.1
--- /dev/null	Mon May  8 11:13:36 2006
+++ SOURCES/mdf2iso-lfs.patch	Mon May  8 11:13:31 2006
@@ -0,0 +1,683 @@
+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/Makefile.in mdf2iso.new/src/Makefile.in
+--- mdf2iso/src/Makefile.in	2005-05-22 21:42:09.000000000 +0200
++++ mdf2iso.new/src/Makefile.in	2005-07-31 17:49:16.000000000 +0200
+@@ -136,6 +136,7 @@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
+ mdf2iso_SOURCES = mdf2iso.c
++AM_CFLAGS = -D_FILE_OFFSET_BITS=64 -Wall
+ all: all-am
+ 
+ .SUFFIXES:
+@@ -149,9 +150,9 @@
+ 	      exit 1;; \
+ 	  esac; \
+ 	done; \
+-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/Makefile'; \
++	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/Makefile'; \
+ 	cd $(top_srcdir) && \
+-	  $(AUTOMAKE) --foreign  src/Makefile
++	  $(AUTOMAKE) --gnu  src/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ 	@case '$?' in \
+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 at 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 at 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 at 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++)
<<Diff was trimmed, longer than 597 lines>>


More information about the pld-cvs-commit mailing list