Compare commits
1 Commits
upstream/0
...
upstream/0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ccc2d79dd4 |
@@ -254,21 +254,14 @@ install: dvdisaster manual
|
||||
@echo "# dvdisaster uninstaller script" > $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "# Usage: sh dvdisaster-uninstall.sh" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "rm -f \"$(BINDIR)/dvdisaster\" \"$(BINDIR)/dvdisaster-uninstall.sh\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "rm -f \"$(DOCSUBDIR)/CHANGELOG\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "rm -f \"$(DOCSUBDIR)/COPYING\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "rm -f \"$(DOCSUBDIR)/CREDITS.de\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "rm -f \"$(DOCSUBDIR)/CREDITS.en\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "rm -f \"$(DOCSUBDIR)/manual.pdf\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "rm -f \"$(DOCSUBDIR)/README.MODIFYING\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "rm -f \"$(DOCSUBDIR)/TODO\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "rmdir \"$(DOCSUBDIR)\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "rm -f $(BINDIR)/dvdisaster $(BINDIR)/dvdisaster-uninstall.sh" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "rm -rf $(DOCSUBDIR)" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@for i in $(PO_LOCALES); do \
|
||||
echo "rm -f \"$(LOCALEDIR)/$$i/LC_MESSAGES/dvdisaster.mo\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh ; \
|
||||
echo "rm $(LOCALEDIR)/$$i/LC_MESSAGES/dvdisaster.mo" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh ; \
|
||||
done
|
||||
@echo "rm -f \"$(MANDIR)/man1/dvdisaster.1\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@echo "rm -f $(MANDIR)/man1/dvdisaster.1" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
@for i in $(MAN_LOCALES); do \
|
||||
echo "rm -f \"$(MANDIR)/$$i/man1/dvdisaster.1\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh ; \
|
||||
echo "rm $(MANDIR)/$$i/man1/dvdisaster.1" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh ; \
|
||||
done
|
||||
@echo "echo \"dvdisaster has been uninstalled.\"" >> $(BUILDROOT)$(BINDIR)/dvdisaster-uninstall.sh
|
||||
|
||||
|
||||
18
INSTALL
@@ -111,11 +111,11 @@ Please change into a directory which is writeable
|
||||
for you and unpack the source code archive:
|
||||
|
||||
user@host> cd /var/tmp
|
||||
user@host> tar xjf dvdisaster-0.79.5.tar.bz2
|
||||
user@host> tar xjf dvdisaster-0.79.6.tar.bz2
|
||||
|
||||
Then change into the newly created directory:
|
||||
|
||||
user@host> cd /var/tmp/dvdisaster-0.79.5
|
||||
user@host> cd /var/tmp/dvdisaster-0.79.6
|
||||
|
||||
3.2. Configuring the package
|
||||
----------------------------
|
||||
@@ -199,8 +199,7 @@ please remove the directory you have created as described
|
||||
in section 3.1:
|
||||
|
||||
user@host> cd /var/tmp
|
||||
user@host> rm -rf dvdisaster-0.79.5
|
||||
|
||||
user@host> rm -rf dvdisaster-0.79.6
|
||||
|
||||
5. Running the program
|
||||
======================
|
||||
@@ -228,16 +227,7 @@ Use camcontrol to find out which passthrough device
|
||||
is assigned to your drive:
|
||||
|
||||
root@freebsd# camcontrol devlist
|
||||
<NAME OF YOUR DRIVE> at scbus1 target 0 lun 0 (pass1,cd0)
|
||||
|
||||
You can change permission permanently by adding the
|
||||
following line to /etc/devfs.conf:
|
||||
|
||||
perm pass1 0660
|
||||
|
||||
To make the change available immediately, restart devfs:
|
||||
|
||||
root@freebsd# /etc/rc.d/devfs restart
|
||||
<NAME OF YOUR DRIVE> at scbus1 target 0 lun 0 (pass0,cd0)
|
||||
|
||||
|
||||
Avoid copy-on-write filesystems
|
||||
|
||||
8
TODO
@@ -1,15 +1,13 @@
|
||||
|
||||
Tentative to do/ release schedule
|
||||
|
||||
Version 0.79: new RS03 codec
|
||||
Version 0.79: new RS03 codec (encoding part)
|
||||
- lots of speed optimizations in error correction data encoding
|
||||
- multithreaded / multicore processor support for encoding
|
||||
(decoding still single threaded)
|
||||
- multithreaded / multicore processor support
|
||||
- add missing functionality, e.g. adaptive reading
|
||||
0.79.5: project re-launch
|
||||
0.79.6: re-introduce CRC and MD5 caching between reading
|
||||
and ecc creation; cosmetical changes; support
|
||||
for 100G BD
|
||||
and ecc creation; cosmetical changes
|
||||
0.79.7: re-introduce adaptive reading
|
||||
|
||||
Version 0.80: milestone release
|
||||
|
||||
8
bitmap.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -55,9 +55,9 @@ void FreeBitmap(Bitmap *bm)
|
||||
* Count the '1' bits in the bitmap
|
||||
*/
|
||||
|
||||
int CountBits(Bitmap *bm)
|
||||
{ int i;
|
||||
int sum = 0;
|
||||
gint32 CountBits(Bitmap *bm)
|
||||
{ gint32 i;
|
||||
gint32 sum = 0;
|
||||
|
||||
for(i=0; i<bm->size; i++)
|
||||
if(GetBit(bm, i))
|
||||
|
||||
2
build.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
4
build.h
@@ -1,2 +1,2 @@
|
||||
#define BUILD 2789
|
||||
#define BDATE "15.12.15 (Dienstag, 16:39)"
|
||||
#define BUILD 272
|
||||
#define BDATE "17.11.17 (Freitag, 09:57)"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
43
closure.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -225,17 +225,20 @@ void ReadDotfile()
|
||||
if(!strcmp(symbol, "last-image")) { g_free(Closure->imageName);
|
||||
if(!strcmp(value, "none"))
|
||||
Closure->imageName = g_strdup("");
|
||||
else Closure->imageName = g_strdup(value); continue;
|
||||
else Closure->imageName = g_strdup(value);
|
||||
continue;
|
||||
}
|
||||
if(!strcmp(symbol, "last-ecc")) { g_free(Closure->eccName);
|
||||
if(!strcmp(value, "none"))
|
||||
Closure->eccName = g_strdup("");
|
||||
else Closure->eccName = g_strdup(value); continue;
|
||||
else Closure->eccName = g_strdup(value);
|
||||
continue;
|
||||
}
|
||||
if(!strcmp(symbol, "adaptive-read")) { Closure->adaptiveRead = atoi(value); continue; }
|
||||
if(!strcmp(symbol, "auto-suffix")) { Closure->autoSuffix = atoi(value); continue; }
|
||||
if(!strcmp(symbol, "bd-size1")) { Closure->bdSize1 = Closure->savedBDSize1 = atoll(value); continue; }
|
||||
if(!strcmp(symbol, "bd-size2")) { Closure->bdSize2 = Closure->savedBDSize2 = atoll(value); continue; }
|
||||
if(!strcmp(symbol, "bd-size3")) { Closure->bdSize3 = Closure->savedBDSize3 = atoll(value); continue; }
|
||||
if(!strcmp(symbol, "cache-size")) { Closure->cacheMiB = atoi(value); continue; }
|
||||
if(!strcmp(symbol, "cd-size")) { Closure->cdSize = Closure->savedCDSize = atoll(value); continue; }
|
||||
if(!strcmp(symbol, "codec-threads")) { Closure->codecThreads = atoi(value); continue; }
|
||||
@@ -305,8 +308,8 @@ void ReadDotfile()
|
||||
}
|
||||
|
||||
if(fclose(dotfile))
|
||||
g_fprintf(stderr, "Error closing configuration file %s: %s\n",
|
||||
Closure->dotFile, strerror(errno));
|
||||
g_printf("Error closing configuration file %s: %s\n",
|
||||
Closure->dotFile, strerror(errno));
|
||||
}
|
||||
|
||||
static void update_dotfile()
|
||||
@@ -325,7 +328,7 @@ static void update_dotfile()
|
||||
|
||||
dotfile = portable_fopen(Closure->dotFile, "wb");
|
||||
if(!dotfile)
|
||||
{ g_fprintf(stderr, "Could not open configuration file %s: %s\n",
|
||||
{ g_printf("Could not open configuration file %s: %s\n",
|
||||
Closure->dotFile, strerror(errno));
|
||||
return;
|
||||
}
|
||||
@@ -344,6 +347,7 @@ static void update_dotfile()
|
||||
g_fprintf(dotfile, "auto-suffix: %d\n", Closure->autoSuffix);
|
||||
g_fprintf(dotfile, "bd-size1: %lld\n", (long long int)Closure->bdSize1);
|
||||
g_fprintf(dotfile, "bd-size2: %lld\n", (long long int)Closure->bdSize2);
|
||||
g_fprintf(dotfile, "bd-size3: %lld\n", (long long int)Closure->bdSize3);
|
||||
g_fprintf(dotfile, "cache-size: %d\n", Closure->cacheMiB);
|
||||
g_fprintf(dotfile, "cd-size: %lld\n", (long long int)Closure->cdSize);
|
||||
g_fprintf(dotfile, "codec-threads: %d\n", Closure->codecThreads);
|
||||
@@ -400,8 +404,8 @@ static void update_dotfile()
|
||||
save_colors(dotfile, "present-sector", Closure->darkSector);
|
||||
|
||||
if(fclose(dotfile))
|
||||
g_fprintf(stderr, "Error closing configuration file %s: %s\n",
|
||||
Closure->dotFile, strerror(errno));
|
||||
g_printf("Error closing configuration file %s: %s\n",
|
||||
Closure->dotFile, strerror(errno));
|
||||
}
|
||||
|
||||
/***
|
||||
@@ -419,7 +423,12 @@ void InitClosure()
|
||||
|
||||
/* Extract the version string */
|
||||
|
||||
#ifdef HAVE_UNSTABLE_RELEASE
|
||||
Closure->cookedVersion = g_strdup_printf("%s (unstable)", VERSION);
|
||||
Closure->releaseFlags = MFLAG_DEVEL;
|
||||
#else
|
||||
Closure->cookedVersion = g_strdup(VERSION);
|
||||
#endif
|
||||
|
||||
/* Generate a more comprehensive version string */
|
||||
|
||||
@@ -491,6 +500,7 @@ void InitClosure()
|
||||
Closure->dvdSize2 = Closure->savedDVDSize2 = DVD_DL_SIZE;
|
||||
Closure->bdSize1 = Closure->savedBDSize1 = BD_SL_SIZE;
|
||||
Closure->bdSize2 = Closure->savedBDSize2 = BD_DL_SIZE;
|
||||
Closure->bdSize3 = Closure->savedBDSize3 = BDXL_TL_SIZE;
|
||||
|
||||
Closure->logString = g_string_sized_new(1024);
|
||||
Closure->logLock = g_malloc0(sizeof(GMutex));
|
||||
@@ -535,21 +545,6 @@ void LocalizedFileDefaults()
|
||||
Closure->dDumpPrefix = g_strdup(_("sector-"));
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear the CRC cache
|
||||
*/
|
||||
|
||||
void ClearCrcCache(void)
|
||||
{ if(Closure->crcCache)
|
||||
g_free(Closure->crcCache);
|
||||
if(Closure->crcImageName)
|
||||
g_free(Closure->crcImageName);
|
||||
|
||||
Closure->crcCache = NULL;
|
||||
Closure->crcImageName = NULL;
|
||||
memset(Closure->md5Cache, 0, 16);
|
||||
}
|
||||
|
||||
/*
|
||||
* Clean up properly
|
||||
*/
|
||||
@@ -575,8 +570,6 @@ void FreeClosure()
|
||||
if(Closure->guiMode)
|
||||
update_dotfile();
|
||||
|
||||
ClearCrcCache();
|
||||
|
||||
cond_free(Closure->cookedVersion);
|
||||
cond_free(Closure->versionString);
|
||||
cond_free(Closure->device);
|
||||
|
||||
5
configure
vendored
@@ -19,7 +19,9 @@ fi
|
||||
|
||||
# Set the package name and version
|
||||
|
||||
PACKAGE dvdisaster 0.79.5
|
||||
PACKAGE dvdisaster 0.79.6
|
||||
CFG_HAVE_OPTIONS="$CFG_HAVE_OPTIONS -DHAVE_UNSTABLE_RELEASE"
|
||||
|
||||
|
||||
# Check for some essential tools.
|
||||
|
||||
@@ -124,7 +126,6 @@ WITH_OPTION embedded-src-path yes "[yes | no]"
|
||||
PRINT_MESSAGE "\nDebugging options (do not use in production system):"
|
||||
|
||||
WITH_OPTION memdebug no "[no | yes]"
|
||||
WITH_OPTION efence no "[no | yes]"
|
||||
|
||||
if test "$cfg_with_efence" == "yes"; then
|
||||
if ! CHECK_LIBRARY efence malloc efence; then
|
||||
|
||||
2
crc32.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
* CRC32 code based upon public domain code by Ross Williams (see notes below)
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
|
||||
211
crcbuf.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -26,27 +26,133 @@
|
||||
#include "rs02-includes.h"
|
||||
|
||||
/***
|
||||
*** Create an uninitialized CRC buffer
|
||||
*** Create a CRC buffer ready for accumulating CRC and MD5 sums
|
||||
***/
|
||||
|
||||
CrcBuf *CreateCrcBuf(guint64 sectors)
|
||||
{ CrcBuf *cb = g_malloc(sizeof(CrcBuf));
|
||||
CrcBuf *CreateCrcBuf(Image *image)
|
||||
{ CrcBuf *cb = g_malloc0(sizeof(CrcBuf));
|
||||
|
||||
cb->crcbuf = g_malloc(sectors * sizeof(guint32));
|
||||
cb->size = sectors;
|
||||
cb->valid = CreateBitmap0(sectors);
|
||||
/* MD5 sum related data */
|
||||
|
||||
cb->md5Ctxt = g_malloc(sizeof(struct MD5Context));
|
||||
MD5Init(cb->md5Ctxt);
|
||||
cb->md5State = MD5_BUILDING;
|
||||
cb->lastSector = 0;
|
||||
memset(cb->dataMD5sum, 0, 16);
|
||||
memset(cb->imageMD5sum, 0, 16);
|
||||
|
||||
/* image identification */
|
||||
|
||||
if(image->type == IMAGE_FILE)
|
||||
cb->imageName = g_strdup(image->file->path);
|
||||
|
||||
/* For augmented images we need both the pure data size and the full size
|
||||
in order to compute MD5 sums for both. Depending on what the user wants
|
||||
to do with the image (create an ecc file or re-augment the image) we'll
|
||||
need the first or the last version.
|
||||
There's one catch, though: If the augmented image is accompanied with
|
||||
an ecc file, we must treat the image as raw data; e.g. do not set
|
||||
the data size to the portion protected by the augmented ecc.
|
||||
Otherwise, the CRC sums from the ecc file which do also protect
|
||||
the augmented ecc part will become unreachable. */
|
||||
|
||||
if(image->eccHeader && !image->eccFileHeader) /* augmented image, and no ecc file? */
|
||||
{ cb->dataSectors = uchar_to_gint64(image->eccHeader->sectors);
|
||||
if(image->type == IMAGE_FILE)
|
||||
cb->allSectors = image->sectorSize;
|
||||
else cb->allSectors = image->dh->sectors;
|
||||
}
|
||||
else
|
||||
{ if(image->type == IMAGE_FILE)
|
||||
cb->dataSectors = cb->allSectors = image->sectorSize;
|
||||
else cb->dataSectors = cb->allSectors = image->dh->sectors;
|
||||
}
|
||||
|
||||
/* Note: The following statement is not correct for RS03.
|
||||
It does not hurt since RS03 will set the correct value when
|
||||
the CrcBuf is created via RS03GetCrcBuf(), and in all other
|
||||
cases it does currently not matter. Especially, CRC sums
|
||||
created during an image read are not used when subsequently
|
||||
creating new ecc data. */
|
||||
|
||||
cb->coveredSectors = cb->dataSectors;
|
||||
|
||||
/* Extract the fingerprint */
|
||||
|
||||
if(image->fpState == FP_PRESENT)
|
||||
{ memcpy(cb->mediumFP, image->imageFP, 16);
|
||||
cb->fpValid = TRUE;
|
||||
}
|
||||
cb->fpSector = image->fpSector;
|
||||
|
||||
/* CRC sum array */
|
||||
|
||||
cb->crcbuf = g_malloc(cb->allSectors * sizeof(guint32));
|
||||
cb->crcSize = cb->allSectors;
|
||||
cb->valid = CreateBitmap0(cb->allSectors);
|
||||
|
||||
image->crcCache = cb;
|
||||
return cb;
|
||||
}
|
||||
|
||||
/***
|
||||
*** Test a 2048 byte block against the checksum in the buffer
|
||||
***/
|
||||
/*
|
||||
* Add a 2048 byte block into the checksum buffer
|
||||
*/
|
||||
|
||||
int AddSectorToCrcBuffer(CrcBuf *cb, int mode, guint64 idx, unsigned char *buf, int buf_size)
|
||||
{ guint32 crc;
|
||||
|
||||
if(idx < 0 || idx >= cb->crcSize)
|
||||
return CRC_OUTSIDE_BOUND;
|
||||
|
||||
/* Update the CRC sums */
|
||||
|
||||
if( (mode & CRCBUF_UPDATE_CRC)
|
||||
|| ((mode & CRCBUF_UPDATE_CRC_AFTER_DATA) && idx >= cb->coveredSectors))
|
||||
{ crc = Crc32(buf, 2048); /* should be buf_size, but remains at 2048 for backwards compatibility. */
|
||||
cb->crcbuf[idx] = crc; /* does not harm except that the last sector is padded with the contents */
|
||||
SetBit(cb->valid, idx); /* of the previous sector when reading an image file whole size is not */
|
||||
} /* a multiple of 2048 */
|
||||
|
||||
/* Update the MD5 sums */
|
||||
|
||||
if(!(mode & CRCBUF_UPDATE_MD5))
|
||||
return CRC_GOOD;
|
||||
|
||||
if(cb->lastSector != idx) /* sector out of order -> md5sum dead */
|
||||
{ cb->md5State = MD5_INVALID;
|
||||
return CRC_BAD;
|
||||
}
|
||||
cb->lastSector++;
|
||||
|
||||
if(idx <= cb->allSectors-1)
|
||||
MD5Update(cb->md5Ctxt, buf, buf_size);
|
||||
|
||||
if(idx == cb->dataSectors-1)
|
||||
{ MD5Context *dataCtxt = alloca(sizeof(MD5Context));
|
||||
|
||||
memcpy(dataCtxt, cb->md5Ctxt, sizeof(MD5Context));
|
||||
MD5Final(cb->dataMD5sum, dataCtxt);
|
||||
cb->md5State |= MD5_DATA_COMPLETE;
|
||||
}
|
||||
|
||||
if(idx == cb->allSectors-1)
|
||||
{ MD5Final(cb->imageMD5sum, cb->md5Ctxt);
|
||||
cb->md5State |= MD5_IMAGE_COMPLETE;
|
||||
cb->md5State &= ~MD5_BUILDING;
|
||||
}
|
||||
|
||||
return CRC_GOOD;
|
||||
}
|
||||
|
||||
/*
|
||||
* Test a 2048 byte block against the checksum in the buffer
|
||||
*/
|
||||
|
||||
int CheckAgainstCrcBuffer(CrcBuf *cb, gint64 idx, unsigned char *buf)
|
||||
{ guint32 crc;
|
||||
|
||||
if(idx < 0 || idx >= cb->size)
|
||||
if(idx < 0 || idx >= cb->crcSize)
|
||||
return CRC_OUTSIDE_BOUND;
|
||||
|
||||
crc = Crc32(buf, 2048);
|
||||
@@ -60,6 +166,36 @@ int CheckAgainstCrcBuffer(CrcBuf *cb, gint64 idx, unsigned char *buf)
|
||||
return CRC_BAD;
|
||||
}
|
||||
|
||||
/*
|
||||
* Make sure that the current image and ecc file match the
|
||||
* cached CRC and md5 informaton
|
||||
*/
|
||||
|
||||
int CrcBufValid(CrcBuf *crcbuf, Image *image, EccHeader *eh)
|
||||
{
|
||||
if(!crcbuf)
|
||||
{ Verbose("CrcBufValid: crcbuf==NULL\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* if still in building state we do not have all CRC sums */
|
||||
|
||||
if(crcbuf->md5State & MD5_BUILDING)
|
||||
{ Verbose("CrcBufValid: NO, still building\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* presence of one MD5 sum suffices (data md5sum may not be present
|
||||
under some circumstances) */
|
||||
|
||||
if((!(crcbuf->md5State & MD5_COMPLETE)))
|
||||
{ Verbose("CrcBufValid: NOT complete\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Verbose("CrcBufValid: buffer VALID\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/***
|
||||
*** Clean up
|
||||
@@ -67,7 +203,60 @@ int CheckAgainstCrcBuffer(CrcBuf *cb, gint64 idx, unsigned char *buf)
|
||||
|
||||
void FreeCrcBuf(CrcBuf *cb)
|
||||
{
|
||||
if(!cb)
|
||||
{ Verbose("FreeCrcBuf - nothing to do\n");
|
||||
return;
|
||||
}
|
||||
|
||||
g_free(cb->crcbuf);
|
||||
FreeBitmap(cb->valid);
|
||||
if(cb->imageName)
|
||||
g_free(cb->imageName);
|
||||
if(cb->md5Ctxt)
|
||||
g_free(cb->md5Ctxt);
|
||||
g_free(cb);
|
||||
|
||||
Verbose("FreeCrcBuf - buffer cleared\n");
|
||||
}
|
||||
|
||||
/***
|
||||
*** Debugging output
|
||||
***/
|
||||
|
||||
void PrintCrcBuf(CrcBuf *cb)
|
||||
{ char digest[33];
|
||||
guint64 i,missing=0;
|
||||
|
||||
if(!Closure->verbose)
|
||||
return;
|
||||
|
||||
PrintLog("CrcBuf contents, image path %s:\n", cb->imageName ? cb->imageName : "none (medium)" );
|
||||
PrintLog(" crcSize: %lld, dataSectors: %lld, coveredSectors: %lld, allSectors: %lld\n",
|
||||
cb->crcSize, cb->dataSectors, cb->coveredSectors, cb->allSectors);
|
||||
|
||||
PrintLog(" md5State:");
|
||||
if(cb->md5State)
|
||||
{ if(cb->md5State & MD5_BUILDING) PrintLog(" building");
|
||||
if(cb->md5State & MD5_DATA_COMPLETE) PrintLog(" data_complete");
|
||||
if(cb->md5State & MD5_IMAGE_COMPLETE) PrintLog(" image_complete");
|
||||
}
|
||||
else PrintLog(" invalid");
|
||||
PrintLog("\n");
|
||||
|
||||
if(cb->md5State & MD5_COMPLETE)
|
||||
{ AsciiDigest(digest, cb->dataMD5sum);
|
||||
PrintLog(" data: %s\n", digest);
|
||||
AsciiDigest(digest, cb->imageMD5sum);
|
||||
PrintLog(" full: %s\n", digest);
|
||||
}
|
||||
AsciiDigest(digest, cb->mediumFP);
|
||||
if(cb->fpValid)
|
||||
PrintLog(" fp sector: %d; %s\n", cb->fpSector, digest);
|
||||
else PrintLog(" fp sector: %d; invalid\n", cb->fpSector);
|
||||
|
||||
for(i=0; i<cb->crcSize; i++)
|
||||
if(!GetBit(cb->valid, i))
|
||||
{ missing++;
|
||||
}
|
||||
PrintLog(" missing crcs: %lld\n", missing);
|
||||
}
|
||||
|
||||
4
curve.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -123,7 +123,7 @@ int CurveLogY(Curve *curve, gdouble y) /* not really a log */
|
||||
hfact = (gdouble)(curve->bottomLY - curve->topLY);
|
||||
|
||||
if(y==1) return curve->bottomLY - ((log(2)/log(curve->logMaxY)) * hfact)/2;
|
||||
return curve->bottomLY - (log(y)/log(curve->logMaxY)) * hfact;
|
||||
else return curve->bottomLY - (log(y)/log(curve->logMaxY)) * hfact;
|
||||
}
|
||||
|
||||
/***
|
||||
|
||||
2
debug.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
BIN
documentation/codec-specs/codecs.pdf
Normal file
@@ -10,6 +10,7 @@
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage{listings}
|
||||
\usepackage{color}
|
||||
\usepackage{comment}
|
||||
|
||||
\marginsize{30mm}{20mm}{20mm}{20mm} % Seitenränder links, rechts, oben, unten
|
||||
\parindent0em % Keine amerikanische Einrückung am Anfang von Paragraphen
|
||||
|
||||
@@ -251,6 +251,9 @@ and the expected size of the parity layers is:
|
||||
|
||||
\smallskip
|
||||
|
||||
% TODO: implement in codec
|
||||
\begin{comment}
|
||||
|
||||
From these values we iteratively compute a $2^p$ which has about 20-40 multiples
|
||||
in the {\em preliminary ecc size} address space. This value will be used
|
||||
for interleaving the ecc header copies with the ecc layers:
|
||||
@@ -263,6 +266,16 @@ p := 5
|
||||
while($\frac{preliminary\;ecc\;size}{2^p} > 40$)
|
||||
|
||||
\quad p := p + 1}
|
||||
\end{comment}
|
||||
|
||||
From these values we compute a $2^p$ which has about 20-40 multiples
|
||||
in the {\em preliminary ecc size} address space. This value will be used
|
||||
for interleaving the ecc header copies with the ecc layers:
|
||||
|
||||
\[ p = \left\lceil log_2\; \frac{preliminary\;ecc\;size}{40} \right\rceil \]
|
||||
|
||||
%\[ p = \left\lceil \frac{log\; \frac{preliminary\;ecc\;size}{40}}{log\; 2} \right\rceil \]
|
||||
|
||||
|
||||
\smallskip
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
\newcommand{\projectversion}{0.79.5}
|
||||
\newcommand{\projectversion}{0.79.6}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.TH DVDISASTER 1 "2015-12-16" "0.79.5" "Schutz f\[:u]r optische Datentr\[:a]ger"
|
||||
.TH DVDISASTER 1 "2010-02-07" "0.80" "Schutz f\[:u]r optische Datentr\[:a]ger"
|
||||
|
||||
.SH NAME
|
||||
DVDISASTER \- Schutz f\[:u]r optische Datentr\[:a]ger gegen Datenverlust durch Alterung
|
||||
@@ -49,6 +49,7 @@ oder Kratzer
|
||||
.RB [\| \-\-internal-rereads
|
||||
.IR n \|]
|
||||
.RB [\| \-\-medium-info \|]
|
||||
.RB [\| \-\-no-progress \|]
|
||||
.RB [\| \-\-old-ds-marker \|]
|
||||
.RB [\| \-\-prefetch-sectors
|
||||
.IR n \|]
|
||||
@@ -59,6 +60,7 @@ oder Kratzer
|
||||
.RB [\| \-\-read-medium
|
||||
.IR n \|]
|
||||
.RB [\| \-\-read-raw \|]
|
||||
.RB [\| \-\-regtest \|]
|
||||
.RB [\| \-\-resource-file
|
||||
.IR n \|]
|
||||
.RB [\| \-\-speed-warning
|
||||
@@ -213,28 +215,31 @@ RS01-Fehlerkorrektur-Dateien unterst\[:u]tzen au\[ss]erdem:
|
||||
.RS
|
||||
RS02-Abbilder:
|
||||
.RS
|
||||
\-n CD\ \ \ erweitert Abbild auf CD-Gr\[:o]\[ss]e.
|
||||
\-n CD\ \ \ \ erweitert Abbild auf CD-Gr\[:o]\[ss]e.
|
||||
.RE
|
||||
.RS
|
||||
\-n DVD\ \ erweitert Abbild auf DVD-Gr\[:o]\[ss]e.
|
||||
\-n DVD\ \ \ erweitert Abbild auf DVD-Gr\[:o]\[ss]e.
|
||||
.RE
|
||||
.RS
|
||||
\-n DVD9 erweitert Abbild auf DVD9-Gr\[:o]\[ss]e.
|
||||
\-n DVD9\ erweitert Abbild auf DVD9-Gr\[:o]\[ss]e.
|
||||
.RE
|
||||
.RS
|
||||
\-n BD\ \ \ erweitert Abbild auf BD-Gr\[:o]\[ss]e.
|
||||
\-n BD\ \ \ \ erweitert Abbild auf BD-Gr\[:o]\[ss]e.
|
||||
.RE
|
||||
.RS
|
||||
\-n BD2\ erweitert Abbild auf zweilagige BD-Gr\[:o]\[ss]e.
|
||||
\-n BD2\ \ erweitert Abbild auf zweilagige BD-Gr\[:o]\[ss]e.
|
||||
.RE
|
||||
.RS
|
||||
\-n x\ \ \ \ erweitert Abbild auf ca. x Sektoren L\[:a]nge.
|
||||
\-n BDXL3 erweitert Abbild auf dreilagige BDXL-Gr\[:o]\[ss]e.
|
||||
.RE
|
||||
.RS
|
||||
\-n x%\ \ \ erweitert Abbild mit ca. x% Redundanz.
|
||||
\-n x\ \ \ \ \ erweitert Abbild auf ca. x Sektoren L\[:a]nge.
|
||||
.RE
|
||||
.RS
|
||||
\-n xr\ \ \ erweitert Abbild mit x Nullstellen Fehlerkorrektur-Daten.
|
||||
\-n x%\ \ \ \ erweitert Abbild mit ca. x% Redundanz.
|
||||
.RE
|
||||
.RS
|
||||
\-n xr\ \ \ \ erweitert Abbild mit x Nullstellen Fehlerkorrektur-Daten.
|
||||
.RE
|
||||
.RE
|
||||
|
||||
@@ -364,6 +369,9 @@ die Standardeinstellungen des Laufwerks zu verwenden.
|
||||
.B \-\-medium-info
|
||||
Gibt Informationen \[:u]ber den Datentr\[:a]ger im ausgew\[:a]hlten Laufwerk aus.
|
||||
.TP
|
||||
.B \-\-no-progress
|
||||
Unterdr\[:u]ckt die Fortschrittsanzeige in Prozent.
|
||||
.TP
|
||||
.B \-\-old-ds-marker
|
||||
Markiert fehlende Sektoren in einer Weise, die mit dvdisaster
|
||||
0.70 oder noch fr\[:u]heren Versionen kompatibel ist.
|
||||
@@ -403,6 +411,9 @@ liest den gesamten Datentr\[:a]ger bis zu n-mal.
|
||||
.B \-\-read-raw
|
||||
liest in der "raw"\-Betriebsart sofern m\[:o]glich.
|
||||
.TP
|
||||
.B \-\-regtest
|
||||
ver\[:a]ndert einige Ausgaben so da\[ss] sie von den Regressionstest-Skripten besser verarbeitet werden k\[:o]nnen.
|
||||
.TP
|
||||
.B \-\-resource-file n
|
||||
Gibt den Pfad zur Konfigurationsdatei an (Voreinstellung: $HOME/.dvdisaster)
|
||||
.TP
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.TH DVDISASTER 1 "2015-12-16" "0.79.5" "protection for optical media"
|
||||
.TH DVDISASTER 1 "2010-02-06" "0.80" "protection for optical media"
|
||||
|
||||
.SH NAME
|
||||
DVDISASTER \- data loss/scratch/aging protection for optical media
|
||||
@@ -48,6 +48,7 @@ DVDISASTER \- data loss/scratch/aging protection for optical media
|
||||
.RB [\| \-\-internal-rereads
|
||||
.IR n \|]
|
||||
.RB [\| \-\-medium-info \|]
|
||||
.RB [\| \-\-no-progress \|]
|
||||
.RB [\| \-\-old-ds-marker \|]
|
||||
.RB [\| \-\-prefetch-sectors
|
||||
.IR n \|]
|
||||
@@ -58,6 +59,7 @@ DVDISASTER \- data loss/scratch/aging protection for optical media
|
||||
.RB [\| \-\-read-medium
|
||||
.IR n \|]
|
||||
.RB [\| \-\-read-raw \|]
|
||||
.RB [\| \-\-regtest \|]
|
||||
.RB [\| \-\-resource-file
|
||||
.IR n \|]
|
||||
.RB [\| \-\-speed-warning
|
||||
@@ -205,28 +207,31 @@ RS01 error correction flles additionally support:
|
||||
.RS
|
||||
RS02 images:
|
||||
.RS
|
||||
\-n CD\ \ \ augments image suitable for CD media.
|
||||
\-n CD\ \ \ \ augments image suitable for CD media.
|
||||
.RE
|
||||
.RS
|
||||
\-n DVD\ \ augments image suitable for DVD media.
|
||||
\-n DVD\ \ \ augments image suitable for DVD media.
|
||||
.RE
|
||||
.RS
|
||||
\-n DVD9 augments image suitable for DVD9 media.
|
||||
\-n DVD9\ augments image suitable for DVD9 media.
|
||||
.RE
|
||||
.RS
|
||||
\-n BD\ \ \ augments image suitable for BD media.
|
||||
\-n BD\ \ \ \ augments image suitable for BD media.
|
||||
.RE
|
||||
.RS
|
||||
\-n BD2\ augments image suitable for two layered BD media.
|
||||
\-n BD2\ \ augments image suitable for two layered BD media.
|
||||
.RE
|
||||
.RS
|
||||
\-n x\ \ \ \ augments image using approx. x sectors in total.
|
||||
\-n BDXL3 augments image suitable for three layered BDXL media.
|
||||
.RE
|
||||
.RS
|
||||
\-n x%\ \ \ augments image with approx. x% redundancy.
|
||||
\-n x\ \ \ \ \ augments image using approx. x sectors in total.
|
||||
.RE
|
||||
.RS
|
||||
\-n xr\ \ \ augments image with x roots error correction data.
|
||||
\-n x%\ \ \ \ augments image with approx. x% redundancy.
|
||||
.RE
|
||||
.RS
|
||||
\-n xr\ \ \ \ augments image with x roots error correction data.
|
||||
.RE
|
||||
.RE
|
||||
|
||||
@@ -347,6 +352,9 @@ this setting anyways. Use \-1 to leave the drive at its default setting.
|
||||
.B \-\-medium-info
|
||||
Prints information about the currently inserted medium.
|
||||
.TP
|
||||
.B \-\-no-progress
|
||||
Suppresses the progress percentage indicator.
|
||||
.TP
|
||||
.B \-\-old-ds-marker
|
||||
Marks missing sectors in a manner which is compatible with
|
||||
dvdisaster 0.70 or older.
|
||||
@@ -384,6 +392,9 @@ read the whole medium up to n times.
|
||||
.B \-\-read-raw
|
||||
performs read in raw mode if possible.
|
||||
.TP
|
||||
.B \-\-regtest
|
||||
modifies some outputs for better processing with the regression test scripts.
|
||||
.TP
|
||||
.B \-\-resource-file n
|
||||
Specifies the path to the configuration file (default: $HOME/.dvdisaster)
|
||||
.TP
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<tr>
|
||||
<td align="left">
|
||||
<span class="fxxl"><b>dvdisaster</b> </span>
|
||||
<i>Version 0.79.5</i>
|
||||
<i>Version 0.79.5 (stable) / 0.79.6 (unstable)</i>
|
||||
</td>
|
||||
<td align="right">
|
||||
<span class="fxxl"> </span>
|
||||
@@ -51,29 +51,14 @@ dvdisaster.org
|
||||
<p>
|
||||
|
||||
Das dvdisaster-Projekt (<a href="impressum.html">Anbieter siehe Impressum</a>)
|
||||
nimmt den Schutz personenbezogener Daten sehr ernst.
|
||||
Die nachfolgende Erklärung gibt Ihnen einen Überblick darüber,
|
||||
welche Daten zu welchem Zweck erhoben werden:
|
||||
ermöglicht Ihnen die Nutzung dieser Internetseiten ohne Registrierung und
|
||||
ohne eine Angabe von personenbezogenen Daten.
|
||||
|
||||
<p>
|
||||
|
||||
<b>Protokoll-Dateien</b> (Datenverarbeitung durch die Server dieser Internetseiten)<p>
|
||||
<b>Server-Protokoll-Dateien</b><p>
|
||||
|
||||
Ihr Besuch auf diesen Seiten wird protokolliert.
|
||||
Die Server dieser Internetseiten speichern die folgenden Daten:
|
||||
|
||||
<ul>
|
||||
<li>den Typ und die Version Ihres Browsers</li>
|
||||
<li>das verwendete Betriebssystem</li>
|
||||
<li>gegebenenfalls die Ausgangsseite, von der aus Sie zu diesen Internetseiten gelangt sind</li>
|
||||
<li>den Namen oder die IP-Adresse des zugreifenden Rechners</li>
|
||||
<li>die Uhrzeit und das Datum Ihres Abrufes dieser Seiten</li>
|
||||
<li>die Dateinamen der angefragten Seiten.</li>
|
||||
</ul>
|
||||
|
||||
Diese Daten werden weder dazu genutzt, den Besucher dieser Internetseiten
|
||||
zu identifizieren, noch findet eine Zusammenführung mit anderen Daten
|
||||
statt. Die Daten werden nach einer statistischen Auswertung gelöscht.
|
||||
Die Server dieser Internetseiten führen kein Protokoll über Ihre Seitenzugriffe.
|
||||
|
||||
<p>
|
||||
|
||||
@@ -106,7 +91,7 @@ diese Datenschutzerklärung von Zeit zu Zeit erneut durch.
|
||||
<tr>
|
||||
<td align="center">
|
||||
<span class="fs">
|
||||
<i> Copyright 2004-2015 Carsten Gnörlich.<br>
|
||||
<i> Copyright 2004-2017 Carsten Gnörlich.<br>
|
||||
Die unveränderte Vervielfältigung und Verteilung dieses gesamten Artikels in beliebiger Form ist gestattet,
|
||||
sofern dieser Hinweis erhalten bleibt.
|
||||
</i>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<tr>
|
||||
<td align="left">
|
||||
<span class="fxxl"><b>dvdisaster</b> </span>
|
||||
<i>Version 0.79.5</i>
|
||||
<i>Version 0.79.5 (stable) / 0.79.6 (unstable)</i>
|
||||
</td>
|
||||
<td align="right">
|
||||
<span class="fxxl"> </span>
|
||||
@@ -74,7 +74,7 @@ Das Impressum gilt für die Internetpräsenz unter den Domänen<br>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<span class="fs">
|
||||
<i> Copyright 2004-2015 Carsten Gnörlich.<br>
|
||||
<i> Copyright 2004-2017 Carsten Gnörlich.<br>
|
||||
Die unveränderte Vervielfältigung und Verteilung dieses gesamten Artikels in beliebiger Form ist gestattet,
|
||||
sofern dieser Hinweis erhalten bleibt.
|
||||
</i>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<tr>
|
||||
<td align="left">
|
||||
<span class="fxxl"><b>dvdisaster</b> </span>
|
||||
<i>Version 0.79.5</i>
|
||||
<i>Version 0.79.5 (stable) / 0.79.6 (unstable)</i>
|
||||
</td>
|
||||
<td align="right">
|
||||
<span class="fxxl"> </span>
|
||||
@@ -84,13 +84,7 @@ zum Beispiel in zahlreichen Foren und (in englischer Sprache) im
|
||||
<td>Aktuelle Version: </td>
|
||||
<td><a href="../downloads/dvdisaster-0.79.5.tar.bz2">dvdisaster-0.79.5.tar.bz2</a></td>
|
||||
<td>(<a href="../downloads/dvdisaster-0.79.5.tar.bz2.gpg">digitale Unterschrift</a>,
|
||||
MD5-Prüfsumme: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Vorherige (ältere) Version:</td>
|
||||
<td><a href="../downloads/dvdisaster-0.72.6.tar.bz2">dvdisaster-0.72.6.tar.bz2</a></td>
|
||||
<td>(<a href="../downloads/dvdisaster-0.72.6.tar.bz2.gpg">digitale Unterschrift</a>,
|
||||
MD5-Prüfsumme: f4213af05fe5c36e93bdf8a1732a66d1)</td>
|
||||
MD5-Prüfsumme: ceef990a2239c43314bc6427c6afb181)</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
@@ -101,105 +95,35 @@ ihren Ursprungszustand überprüft werden. In den Archiven gibt die Datei
|
||||
|
||||
<p>
|
||||
|
||||
Die Unterstützung von <b>Windows</b> and <b>Mac OS</b> wurde eingestellt.
|
||||
Ein anderer Entwickler hat angefangen, eine Version von dvdisaster direkt für Windows zu
|
||||
erstellen, aber es gibt dazu noch nichts anzukündigen. Verwenden Sie
|
||||
bis dahin bitte weiterhin
|
||||
die <a href="verschiedenes.html#windows">letzte veröffentlichte Version 0.72.3 für Windows</a>.
|
||||
Die Unterstützung von OS X und Windows wurde eingestellt.
|
||||
Die <a href="verschiedenes.html#windows">letzte veröffentlichte Version 0.72.3 für Windows</a> ist noch verfügbar.
|
||||
|
||||
<p>
|
||||
<b>Die Entwickler-Versionen sind zurück!</b><p>
|
||||
|
||||
Der ursprüngliche Plan, alle paar Monate eine stabile Version zu veröffentlichen, kann derzeit aus Zeitmangel nicht umgesetzt werden. In der Zwischenzeit werden (unstabile) Entwicklerversionen veröffentlicht, wenn sich die Notwendigkeit für eine kurzfristige Aktualisierung ergibt. Bitte beachten Sie, daß diese Versionen nicht dokumentiert sind. Sie können unvollständige oder fehlerhafte Eigenschaften aufweisen. Sie sollten diese Versionen nur nutzen, wenn Sie eine Funktionalität aus der unten aufgeführten Liste benötigen.<p>
|
||||
|
||||
<a href="../downloads/dvdisaster-0.79.6.tar.bz2">dvdisaster-0.79.6.tar.bz2</a></td>
|
||||
<td>(<a href="../downloads/dvdisaster-0.79.6.tar.bz2.gpg">digitale Unterschrift</a>,
|
||||
MD5-Prüfsumme: ceef990a2239c43314bc6427c6afb181)
|
||||
|
||||
<ul>
|
||||
<li> Das "Datenträger-Info"-Werkzeug zeigt nun die korrekte Leerkapazität an (vorher wurde immer Null ausgegeben).</li>
|
||||
<li> Unterstützung für BDXL-TL-Datenträger (dreilagig, 100GB).</li>
|
||||
<li> Sektoren-Prüfsummen und Abbild-Prüfsummen werden während des Lesens von
|
||||
Datenträgern zwischengespeichert und beim Erstellen von Fehlerkorrektur-Daten
|
||||
wiederverwendet. Das Erstellen von Fehlerkorrektur-Daten wird dadurch beschleunigt
|
||||
und RS03-Fehlerkorrektur-Daten enthalten die optionale Abbild-Prüfsumme,
|
||||
wenn der Datenträger vorher einmal komplett eingelesen wurde.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
|
||||
<p>
|
||||
<b>Was ist mit den alten dvdisaster-Seiten passiert?</b><p>
|
||||
|
||||
Zur Erläuterung eine Übersetzung des Vorwortes aus
|
||||
dem englischen <a href="misc.html#manual">Benutzerhandbuch</a>:<p>
|
||||
|
||||
Seit der Veröffentlichung von dvdisaster 0.79.3 (Version 0.79.4
|
||||
wurde nicht abgeschlossen und veröffentlicht) sind nahezu
|
||||
fünf Jahre vergangen.
|
||||
Dies liegt teilweise an den veränderten Lebensumständen
|
||||
des verantwortlichen Entwicklers, aber auch an vielen
|
||||
Änderungen am Quellkode. Viele interne Strukturen wurden
|
||||
in dvdisaster 0.79.5 im Vergleich zu seinem Vorgänger
|
||||
deutlich verändert.<p>
|
||||
|
||||
Die wichtigste Änderung ist in dvdisaster 0.79.5
|
||||
natürlich der multihreading-fähige RS03-Kodierer.
|
||||
Während es ungefähr 62 Minuten auf einem durchschnittlich
|
||||
leistungsfähigen PC dauert, um ein 36 GiB großes Abbild
|
||||
mit dem RS02-Kodierer zu bearbeiten, so benötigt der
|
||||
neue RS03-Kodierer weniger als 7 Minuten mit sechs
|
||||
Prozessorkernen auf der selben Maschine. Auf einem
|
||||
Hochleistungs-Server mit 16 Prozessorkernen und
|
||||
hohem Ein-/Ausgabe-Durchsatz kann diese Aufgabe in
|
||||
unter einer Minute bearbeitet werden. Das ist
|
||||
ein großer Schritt nach vorne.<p>
|
||||
|
||||
RS03 ist ab dieser Version für den produktiven
|
||||
Einsatz geeignet. Einige nicht grundlegende
|
||||
Funktionen werden noch mit den nächsten Versionen
|
||||
nachgereicht; dies umfaßt unter anderem das
|
||||
adaptive Lesen mit RS03 sowie das schnelle
|
||||
Reparieren von Datenträgern unter Nutzung von
|
||||
Multithreading.<p>
|
||||
|
||||
Andere Teile des Projektes mußten geändert oder
|
||||
eingestellt werden. Ein Softwareprojekt lebt
|
||||
von der Weiterentwicklung und von regelmäßigen
|
||||
Veröffentlichungen; anderenfalls hört das
|
||||
Projekt letztendlich auf zu existieren.
|
||||
dvdisaster lief in den letzten Jahren Gefahr,
|
||||
dieses Schicksal zu erleiden. Um zu verhindern
|
||||
daß dies erneut eintritt, wird sich das
|
||||
Projekt nun auf die Entwicklung des Quellkodes
|
||||
konzentrieren; alle anderen Aktivitäten werden
|
||||
an andere Personen weitergegeben oder
|
||||
eingestellt. Die Quellkode-Entwicklung wird
|
||||
sich nur noch mit der GNU/Linux-Version
|
||||
befassen, die auch die Basis für alle
|
||||
anderen Betriebssysteme liefert. Darin
|
||||
inbegriffen sind die Portierungen für
|
||||
FreeBSD und NetBSD, die sich sehr einfach
|
||||
aus der GNU/Linux-Version ableiten lassen.
|
||||
Dies gilt leider nicht für die Mac OS-
|
||||
und Windows-Versionen, die ab sofort
|
||||
eingestellt werden.<p>
|
||||
|
||||
Ebenso werden die getrennten Versionszweige mit
|
||||
stabilen Versionen und Entwicklerversionen eingestellt.
|
||||
Ab dieser Version werden alle dvdisaster-Veröffentlichungen
|
||||
als bereit für den produktiven Einsatz betrachtet,
|
||||
wodurch sich eine Unterscheidung in verschiedene
|
||||
Zweige erübrigt.<p>
|
||||
|
||||
Die Bereitstellung der mehrsprachlichen Dokumentation,
|
||||
die gleichzeitig auch als Projektseite im Internet diente,
|
||||
hat sich ebenfalls als zu aufwändig erwiesen.
|
||||
Die Projektseite ist nun eine einfache Plattform
|
||||
zum Herunterladen des Quellkodes. Sie wendet sich jetzt
|
||||
an die Paketverwalter, die Binärversionen für
|
||||
GNU/Linux, FreeBSD und NetBSD bereitstellen. <br>
|
||||
|
||||
Das Benutzerhandbuch wird nun im PDF-Format
|
||||
bereitgestellt; dies ist viel einfacher zu
|
||||
erzeugen als die alte HTML-Version. Die
|
||||
einzige verfügbare Sprache ist Englisch.
|
||||
Die meisten Teile des Benutzerhandbuches wurden
|
||||
aus der alten Online-Dokumentation übernommen;
|
||||
daher wirkt sie immer noch mehr wie die
|
||||
Internetseiten als wie ein Buch. Hyperlinks
|
||||
sind in PDF nicht so komfortabel nutzbar
|
||||
wie in HTML, aber sie wurden in dem Handbuch
|
||||
belassen um zu betonen daß es als Online-Referenz
|
||||
gedacht ist. Bitte schonen Sie die Natur und
|
||||
drucken Sie das Benutzerhandbuch nicht aus.
|
||||
Es ist ohnehin nicht dazu gedacht, von
|
||||
vorne nach hinten wie ein Buch gelesen zu werden.<p>
|
||||
|
||||
Nun gut, genug geredet. Möge Ihnen dvdisaster helfen,
|
||||
Ihre Daten zu schützen und wiederherzustellen, und
|
||||
vielen Dank daß Sie es nutzen!<p>
|
||||
|
||||
<i> -- cg, August 2015</i>
|
||||
Bitte schauen Sie in das <i>Vorwort zur Version 0.79.5</i> im
|
||||
englischen <a href="verschiedenes.html#manual">Benutzerhandbuch</a>.
|
||||
|
||||
<!-- Page footer -->
|
||||
|
||||
@@ -209,7 +133,7 @@ vielen Dank daß Sie es nutzen!<p>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<span class="fs">
|
||||
<i> Copyright 2004-2015 Carsten Gnörlich.<br>
|
||||
<i> Copyright 2004-2017 Carsten Gnörlich.<br>
|
||||
Die unveränderte Vervielfältigung und Verteilung dieses gesamten Artikels in beliebiger Form ist gestattet,
|
||||
sofern dieser Hinweis erhalten bleibt.
|
||||
</i>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<tr>
|
||||
<td align="left">
|
||||
<span class="fxxl"><b>dvdisaster</b> </span>
|
||||
<i>Version 0.79.5</i>
|
||||
<i>Version 0.79.5 (stable) / 0.79.6 (unstable)</i>
|
||||
</td>
|
||||
<td align="right">
|
||||
<span class="fxxl"> </span>
|
||||
@@ -56,17 +56,12 @@ uid dvdisaster (pkg signing key #2)
|
||||
sub 4096R/758BCC23 2015-10-05
|
||||
</pre>
|
||||
|
||||
Ältere Versionen (bis zu 0.79.3) wurden mit dem folgenden
|
||||
<a href="../downloadas/pubkey1.asc">1024bit DSA-Schlüssel</a> unterschrieben:
|
||||
|
||||
<pre>
|
||||
pub 1024D/F5F6C46C 2003-08-22
|
||||
Schl.-Fingerabdruck = 12B3 1535 AF90 3ADE 9E73 BA7E 5A59 0EFE F5F6 C46C
|
||||
uid Carsten Gnörlich (pkg signing key #1)
|
||||
sub 1024g/091AD320 2003-08-22
|
||||
</pre>
|
||||
Ältere Versionen (bis zu 0.79.3) wurden mit einem
|
||||
<a href="../downloads/pubkey1.asc">1024bit DSA-Schlüssel</a> unterschrieben,
|
||||
der noch zum Vergleich hier verfügbar ist.
|
||||
|
||||
Sie können den Fingerabdruck des öffentlichen Schlüssels auch direkt von
|
||||
Sie können den Fingerabdruck der öffentlichen Schlüssel auch direkt von
|
||||
den Entwicklern erhalten, indem Sie eine E-Mail
|
||||
an carsten@dvdisaster.org schreiben. Bitte verwenden Sie
|
||||
den Betreff "GPG finger print".
|
||||
@@ -79,7 +74,7 @@ Das Benutzerhandbuch zu dvdisaster gibt es - leider aus Zeitgründen nur
|
||||
in englischer Sprache - als <a href="../downloads/manual.pdf">PDF-Dokument (manual.pdf)</a>.
|
||||
Es erläutert die Benutzung von dvdisaster anhand einiger
|
||||
grundlegender Beispiele und enthält weitere Hintergrundinformationen
|
||||
zu seiner Funktionsweise. <br>
|
||||
zu seiner Funktionsweise.
|
||||
Sie brauchen das Handbuch hier nicht herunterzuladen, wenn Sie bereits
|
||||
das Quellkode-Archiv haben - dort ist ebenfalls ein Exemplar enthalten.
|
||||
<p>
|
||||
@@ -87,7 +82,7 @@ das Quellkode-Archiv haben - dort ist ebenfalls ein Exemplar enthalten.
|
||||
<b>Kodierer-Spezifikation</b><p>
|
||||
|
||||
Die Spezifikation der RS01-, RS02- und RS03-Kodierer
|
||||
ist als <a href="../downloads/codec.pdf">PDF-Dokument (codecs.pdf)</a>
|
||||
ist als <a href="../downloads/codecs.pdf">PDF-Dokument (codecs.pdf)</a>
|
||||
verfügbar.
|
||||
|
||||
Dieses Dokument ist zur Diskussion der Kodierer-Implementierung unter
|
||||
@@ -112,13 +107,13 @@ bis dahin bitte weiterhin die letzte veröffentlichte Version für Windows:
|
||||
<tr>
|
||||
<td>Quellkode: </td>
|
||||
<td><a href="../downloads/dvdisaster-0.72.3.tar.bz2">dvdisaster-0.72.3.tar.bz2</a></td>
|
||||
<td>(<a href="../downloads/dvdisaster-0.79.5.tar.bz2.gpg">Digitale Unterschrift</a>,
|
||||
<td>(<a href="../downloads/dvdisaster-0.72.3.tar.bz2.gpg">Digitale Unterschrift</a>,
|
||||
MD5-Prüfsumme: 4eb09c1aa3cdbc1dafdb075148fb471d)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Installierbare Binärversion: </td>
|
||||
<td><a href="../downloads/dvdisaster-0.72.3-setup.exe">dvdisaster-0.72.3-setup.exe</a></td>
|
||||
<td>(<a href="../downloads/dvdisaster-0.72.3-setup-exe..gpg">Digitale Unterschrift</a>,
|
||||
<td>(<a href="../downloads/dvdisaster-0.72.3-setup.exe.gpg">Digitale Unterschrift</a>,
|
||||
MD5-Prüfsumme: b6861ba1e8de6d91a2da5342a14870e0)</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -131,7 +126,7 @@ bis dahin bitte weiterhin die letzte veröffentlichte Version für Windows:
|
||||
<tr>
|
||||
<td align="center">
|
||||
<span class="fs">
|
||||
<i> Copyright 2004-2015 Carsten Gnörlich.<br>
|
||||
<i> Copyright 2004-2017 Carsten Gnörlich.<br>
|
||||
Die unveränderte Vervielfältigung und Verteilung dieses gesamten Artikels in beliebiger Form ist gestattet,
|
||||
sofern dieser Hinweis erhalten bleibt.
|
||||
</i>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<tr>
|
||||
<td align="left">
|
||||
<span class="fxxl"><b>dvdisaster</b> </span>
|
||||
<i>Version 0.79.5</i>
|
||||
<i>Version 0.79.5 (stable) / 0.79.6 (unstable)</i>
|
||||
</td>
|
||||
<td align="right">
|
||||
<span class="fxxl"> </span>
|
||||
@@ -74,7 +74,7 @@ This notice covers the web sites under the domains<br>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<span class="fs">
|
||||
<i> Copyright 2004-2015 Carsten Gnörlich.<br>
|
||||
<i> Copyright 2004-2017 Carsten Gnörlich.<br>
|
||||
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
|
||||
</i>
|
||||
</span>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<tr>
|
||||
<td align="left">
|
||||
<span class="fxxl"><b>dvdisaster</b> </span>
|
||||
<i>Version 0.79.5</i>
|
||||
<i>Version 0.79.5 (stable) / 0.79.6 (unstable)</i>
|
||||
</td>
|
||||
<td align="right">
|
||||
<span class="fxxl"> </span>
|
||||
@@ -75,16 +75,10 @@
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>Current version: </td>
|
||||
<td>Current stable version: </td>
|
||||
<td><a href="../downloads/dvdisaster-0.79.5.tar.bz2">dvdisaster-0.79.5.tar.bz2</a></td>
|
||||
<td>(<a href="../downloads/dvdisaster-0.79.5.tar.bz2.gpg">digital signature</a>,
|
||||
MD5 checksum: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Previous (older) version:</td>
|
||||
<td><a href="../downloads/dvdisaster-0.72.6.tar.bz2">dvdisaster-0.72.6.tar.bz2</a></td>
|
||||
<td>(<a href="../downloads/dvdisaster-0.72.6.tar.bz2.gpg">digital signature</a>,
|
||||
MD5 checksum: f4213af05fe5c36e93bdf8a1732a66d1)</td>
|
||||
MD5 sum: ceef990a2239c43314bc6427c6afb181)</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
@@ -94,87 +88,35 @@ verification that the packages are in their original state. The archives
|
||||
contain a file <tt>INSTALL</tt> with further instructions for building dvdisaster.
|
||||
|
||||
<p>
|
||||
OS X and Windows are no longer supported.
|
||||
The <a href="misc.html#windows">last published version for Windows (0.72.3)</a> is still available.
|
||||
|
||||
<b>Windows</b> and <b>Mac OS</b> are no longer supported. A native Windows fork
|
||||
of dvdisaster will be started soon by another developer, but there is nothing to announce yet.
|
||||
In the mean time, please continue using
|
||||
the <a href="misc.html#windows">last published version for Windows (0.72.3)</a>.
|
||||
<p>
|
||||
<b>The developer versions are back!</b><p>
|
||||
|
||||
The original plan of publishing stable versions every few months did not work out due to continued lack of time. In the mean time, developer (unstable) versions are published whenever the need arises for a current update. Please be aware that developer versions are undocumented and may contain unfinished or otherwise defective functionality. You should only use them if you need some of the features detailed in the list below.<p>
|
||||
|
||||
|
||||
<a href="../downloads/dvdisaster-0.79.6.tar.bz2">dvdisaster-0.79.6.tar.bz2</a></td>
|
||||
<td>(<a href="../downloads/dvdisaster-0.79.6.tar.bz2.gpg">digital signature</a>,
|
||||
MD5 sum: ceef990a2239c43314bc6427c6afb181)
|
||||
|
||||
<ul>
|
||||
<li> The "medium info" tool will now correctly show the blank capacity (was previously always shown as zero)</li>
|
||||
<li> added support for BDXL-TL (triple layer, 100GB) media</li>
|
||||
<li> Sector CRC sums and the image MD5 sums are collected during
|
||||
reading the medium and can be re-used by the ecc data creation
|
||||
process. Speeds up ecc generation and enables RS03 image
|
||||
checksums when generating ecc data was preceeded by a read.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<b>What happened to the old dvdisaster site?</b><p>
|
||||
To quote from the preface of the <a href="misc.html#manual">user manual</a>:<p>
|
||||
|
||||
Please see the <i>Preface for version 0.79.5</i> in the <a href="misc.html#manual">user manual</a>.
|
||||
|
||||
|
||||
Since the release of dvdisaster 0.79.3 (version 0.79.4 was
|
||||
never finished and released), nearly five years have passed.
|
||||
This was partly due to changed circumstances in its
|
||||
primary developer's life, but there was also a lot of
|
||||
coding going on behind the scenes. In comparison with its
|
||||
predecessor, dvdisaster 0.79.5 comes with lots of its
|
||||
internals being significantly reworked. <p>
|
||||
|
||||
The most visible improvement of dvdisaster 0.79.5 is, of
|
||||
course, its multithreaded RS03 codec. While it takes
|
||||
about 62 minutes for protecting a 36 GiB image with RS02
|
||||
on a mid range PC,
|
||||
the same task is done with RS03 in less than 7 minutes
|
||||
using 6 processor cores on the same machine.
|
||||
On a high end server with at least 16 cores and very good I/O,
|
||||
this can be done in under a minute. That's quite an
|
||||
improvement.<br>
|
||||
|
||||
RS03 is ready for production use in the current release.
|
||||
Some non-essential features, especially reworking the
|
||||
adaptive reading for use with RS03 and multi-threaded
|
||||
RS03 decoding (media fixing) will be delivered with
|
||||
the following dvdisaster releases.<p>
|
||||
|
||||
Other parts of the project had to be changed or even
|
||||
discontinued. A software project lives on development
|
||||
and continuous releases; else the
|
||||
project will eventually die. In this respect, dvdisaster
|
||||
was very endangered in the last few years.
|
||||
To prevent this from happening again, most effort
|
||||
is now directed into source code development;
|
||||
everything else is delegated or discontinued.
|
||||
Source code development basically means making
|
||||
the GNU/Linux version, which provides the code base
|
||||
for all other versions, and the FreeBSD and NetBSD ports,
|
||||
which are very easily derived from the GNU/Linux code.
|
||||
This is not the case for the Mac OS and Windows ports,
|
||||
which are, unfortunately, discontinued as of now.<br>
|
||||
|
||||
Another feature which has to go are the separate
|
||||
stable and development releases.
|
||||
Starting with this version, all dvdisaster releases
|
||||
are considered production quality, so there is no
|
||||
need for different branches anymore.<p>
|
||||
|
||||
Maintaining the multi-lingual online documentation, which
|
||||
also served as the project home page, did also prove to
|
||||
be too time consuming. The project home page has
|
||||
been changed into a simple download platform for
|
||||
the project sources. It is now directed at package
|
||||
maintainers who will create and pass on binaries
|
||||
for the GNU/Linux, FreeBSD and NetBSD distributions.<br>
|
||||
|
||||
The program documentation, which you are reading
|
||||
right now, is provided in PDF format which is much
|
||||
easier to author than the HTML version. The only
|
||||
language available is English. Most parts of this
|
||||
manual have been adapted from the old online
|
||||
documentation, so it still feels more like a website
|
||||
than a book. While hyperlinks are not as usable in PDF
|
||||
as in HTML, they have been kept in this document to
|
||||
stress that it is intended to be used as an online reference.
|
||||
So please do our environment a favour and do not print
|
||||
this manual. It is not meant to be read
|
||||
from front cover to back cover, anyways.<p>
|
||||
|
||||
Okay, enough ranting already. May dvdisaster be helpful
|
||||
in protecting and recovering your valuable data,
|
||||
and thanks for using it!<p>
|
||||
|
||||
<i> -- cg, August 2015</i>
|
||||
|
||||
<!-- Page footer -->
|
||||
|
||||
@@ -184,7 +126,7 @@ and thanks for using it!<p>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<span class="fs">
|
||||
<i> Copyright 2004-2015 Carsten Gnörlich.<br>
|
||||
<i> Copyright 2004-2017 Carsten Gnörlich.<br>
|
||||
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
|
||||
</i>
|
||||
</span>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<tr>
|
||||
<td align="left">
|
||||
<span class="fxxl"><b>dvdisaster</b> </span>
|
||||
<i>Version 0.79.5</i>
|
||||
<i>Version 0.79.5 (stable) / 0.79.6 (unstable)</i>
|
||||
</td>
|
||||
<td align="right">
|
||||
<span class="fxxl"> </span>
|
||||
@@ -58,17 +58,11 @@ sub 4096R/758BCC23 2015-10-05
|
||||
|
||||
</pre>
|
||||
|
||||
Older releases up to version 0.79.3 have been signed with this <a href="../downloads/pubkey1.asc">1024bit DSA key</a>:
|
||||
|
||||
<pre>
|
||||
pub 1024D/F5F6C46C 2003-08-22
|
||||
Key fingerprint = 12B3 1535 AF90 3ADE 9E73 BA7E 5A59 0EFE F5F6 C46C
|
||||
uid Carsten Gnörlich (pkg signing key #1)
|
||||
sub 1024g/091AD320 2003-08-22
|
||||
</pre>
|
||||
|
||||
The <a href="../downloads/pubkey1.asc">1024bit DSA key</a> used to sign releases up to version 0.79.3 is
|
||||
still available for reference.
|
||||
Feel free to send an email to carsten@dvdisaster.org to obtain
|
||||
the fingerprint directly from the developers.
|
||||
any of these fingerprints directly from the developers.
|
||||
Please include "GPG finger print" in the subject line.
|
||||
|
||||
<p>
|
||||
@@ -79,7 +73,7 @@ Please include "GPG finger print" in the subject line.
|
||||
|
||||
The user manual is provided as a <a href="../downloads/manual.pdf">PDF document (manual.pdf)</a>.
|
||||
It contains several basic examples of using dvdisaster and some background
|
||||
information on its way of working. <br>
|
||||
information on its way of working.
|
||||
You do not need to download the manual if you already have the
|
||||
source code archive - a copy of the manual is contained there.
|
||||
<p>
|
||||
@@ -87,7 +81,7 @@ source code archive - a copy of the manual is contained there.
|
||||
<b>Codec specification</b><p>
|
||||
|
||||
The specification of the RS01, RS02 and RS03 codec
|
||||
is available as a <a href="../downloads/codec.pdf">PDF document (codecs.pdf)</a>.
|
||||
is available as a <a href="../downloads/codecs.pdf">PDF document (codecs.pdf)</a>.
|
||||
|
||||
This document is meant to discuss the codec implementation among developers.
|
||||
It requires knowledge in the area of coding theory and is not meant as end
|
||||
@@ -112,13 +106,13 @@ In the mean time, please continue using the last published version for Windows (
|
||||
<tr>
|
||||
<td>Source code: </td>
|
||||
<td><a href="../downloads/dvdisaster-0.72.3.tar.bz2">dvdisaster-0.72.3.tar.bz2</a></td>
|
||||
<td>(<a href="../downloads/dvdisaster-0.79.5.tar.bz2.gpg">digital signature</a>,
|
||||
<td>(<a href="../downloads/dvdisaster-0.72.3.tar.bz2.gpg">digital signature</a>,
|
||||
MD5 checksum: 4eb09c1aa3cdbc1dafdb075148fb471d)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Binary installer: </td>
|
||||
<td><a href="../downloads/dvdisaster-0.72.3-setup.exe">dvdisaster-0.72.3-setup.exe</a></td>
|
||||
<td>(<a href="../downloads/dvdisaster-0.72.3-setup-exe..gpg">digital signature</a>,
|
||||
<td>(<a href="../downloads/dvdisaster-0.72.3-setup.exe.gpg">digital signature</a>,
|
||||
MD5 checksum: b6861ba1e8de6d91a2da5342a14870e0)</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -131,7 +125,7 @@ In the mean time, please continue using the last published version for Windows (
|
||||
<tr>
|
||||
<td align="center">
|
||||
<span class="fs">
|
||||
<i> Copyright 2004-2015 Carsten Gnörlich.<br>
|
||||
<i> Copyright 2004-2017 Carsten Gnörlich.<br>
|
||||
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
|
||||
</i>
|
||||
</span>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<tr>
|
||||
<td align="left">
|
||||
<span class="fxxl"><b>dvdisaster</b> </span>
|
||||
<i>Version 0.79.5</i>
|
||||
<i>Version 0.79.5 (stable) / 0.79.6 (unstable)</i>
|
||||
</td>
|
||||
<td align="right">
|
||||
<span class="fxxl"> </span>
|
||||
@@ -51,29 +51,14 @@ dvdisaster.org
|
||||
<p>
|
||||
|
||||
The dvdisaster project (<a href="imprint.html">see the contact page for representatives</a>)
|
||||
is taking your privacy seriously. The following statement gives you an overview
|
||||
about the kind and purpose of the data we are collecting:
|
||||
provides its internet sites to you without requiring a registration or entering personal data.
|
||||
|
||||
<p>
|
||||
|
||||
<b>Log files</b> (data processed by our internet servers)<p>
|
||||
|
||||
Your visit of our internet sites is being logged.
|
||||
Our servers collect the following data:
|
||||
|
||||
<ul>
|
||||
<li>the type and version of your web browser</li>
|
||||
<li>the operating system being used</li>
|
||||
<li>the web site from which you were directed to our internet site (if applicable)</li>
|
||||
<li>the host name or IP address of the computer which made the access</li>
|
||||
<li>the time and date of the server query</li>
|
||||
<li>the file names of the visited pages.</li>
|
||||
</ul>
|
||||
|
||||
This data is not used to identify the visitors of our web sites.
|
||||
It will not be combined with other data sources. The data will be
|
||||
deleted after a statistical analysis.
|
||||
<b>Server log files</b><p>
|
||||
|
||||
The servers of this internet site create no logs about your visit.
|
||||
|
||||
<p>
|
||||
|
||||
<b>Cookies</b><p>
|
||||
@@ -104,7 +89,7 @@ change notices.
|
||||
<tr>
|
||||
<td align="center">
|
||||
<span class="fs">
|
||||
<i> Copyright 2004-2015 Carsten Gnörlich.<br>
|
||||
<i> Copyright 2004-2017 Carsten Gnörlich.<br>
|
||||
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
|
||||
</i>
|
||||
</span>
|
||||
|
||||
@@ -98,7 +98,7 @@ containing a formal specification of the error correction data format.
|
||||
\vfill
|
||||
\begin{center}
|
||||
{\em
|
||||
Copyright 2008-2015 Carsten Gnörlich.
|
||||
Copyright 2008-2017 Carsten Gnörlich.
|
||||
Verbatim copying and distribution of this entire article is permitted in any medium,
|
||||
provided this notice is preserved.}
|
||||
\end{center}
|
||||
|
||||
@@ -101,8 +101,8 @@ please see the \tlnk{reporting-defects}{reporting defects} section.
|
||||
|
||||
\paragraph{Recovery of aged media.}
|
||||
The medium processed here has become discolored and partly unreadable in its outer region.
|
||||
A reading attempt yields about 23.000 unreadable sectors of 342.000 sectors total;
|
||||
resulting in about 7,2\% defective sectors. Figure \ref{recover-linear} shows the
|
||||
A reading attempt yields about 23.600 unreadable sectors of 360056 sectors total;
|
||||
resulting in about 6,6\% defective sectors. Figure \ref{recover-linear} shows the
|
||||
dvdisaster window after the reading attempt. The distribution of reading speed and
|
||||
read errors over the medium is graphically shown.
|
||||
The still readable sectors are stored in an ISO image called {\em medium.iso}.
|
||||
@@ -114,7 +114,7 @@ The still readable sectors are stored in an ISO image called {\em medium.iso}.
|
||||
\end{figure}
|
||||
|
||||
\paragraph{Repairing the defective image.}
|
||||
The image which has been just read is incomplete since about 23.000 sectors could
|
||||
The image which has been just read is incomplete since about 23.600 sectors could
|
||||
not be read. These sectors are now reconstructed using the error correction data
|
||||
created with dvdisaster. During the recovery a maximum of 20 errors per error
|
||||
correction block is encountered (see figure \ref{fix-image}).
|
||||
@@ -129,7 +129,7 @@ than a normal backup, though). Like an ordinary backup, the ecc data needs
|
||||
to be created before the medium goes defective.
|
||||
|
||||
So if you have a defective medium but never created ecc data for it, you will
|
||||
not be able to recover the defective sectors (23.000 in the above example).
|
||||
not be able to recover the defective sectors (23.600 in the above example).
|
||||
The data located at the end of the medium will be lost, while you will probably
|
||||
be able to extract some files which are located at the beginning of the medium.
|
||||
\newpage
|
||||
|
||||
@@ -257,11 +257,19 @@ Usable media by type:
|
||||
|
||||
\medskip
|
||||
|
||||
{\bf BD-R, BD-RW}
|
||||
{\bf BD-R, BD-RW} \quad (one or two layers)
|
||||
|
||||
\begin{itemize}
|
||||
\item No limitations are known so far, but very few results on the
|
||||
two-layered type (the 50GiB variety) have been reported yet.
|
||||
\item No limitations are known.
|
||||
\end{itemize}
|
||||
|
||||
\medskip
|
||||
|
||||
{\bf BDXL-R}
|
||||
|
||||
\begin{itemize}
|
||||
\item Currently only the three-layered (100GB) version is tested and supported.
|
||||
\item Note: BDXL is not backwards compatible with standard BD drives.
|
||||
\end{itemize}
|
||||
|
||||
\medskip
|
||||
@@ -351,7 +359,7 @@ Usable media by type:
|
||||
You are welcome, of course, to provide an unoffical translation of the
|
||||
project documentation on your own webspace and at your own discretion. }
|
||||
|
||||
\newpage
|
||||
%\newpage
|
||||
|
||||
\subsection{Error messages}
|
||||
\label{qa-error}
|
||||
|
||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 64 KiB |
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
16
dvdisaster.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -73,6 +73,7 @@ typedef enum
|
||||
MODIFIER_IGNORE_FATAL_SENSE,
|
||||
MODIFIER_IGNORE_ISO_SIZE,
|
||||
MODIFIER_INTERNAL_REREADS,
|
||||
MODIFIER_NO_PROGRESS,
|
||||
MODIFIER_OLD_DS_MARKER,
|
||||
MODIFIER_PREFETCH_SECTORS,
|
||||
MODIFIER_RANDOM_SEED,
|
||||
@@ -80,6 +81,7 @@ typedef enum
|
||||
MODIFIER_READ_ATTEMPTS,
|
||||
MODIFIER_READ_MEDIUM,
|
||||
MODIFIER_READ_RAW,
|
||||
MODIFIER_REGTEST,
|
||||
MODIFIER_RESOURCE_FILE,
|
||||
MODIFIER_SCREEN_SHOT,
|
||||
MODIFIER_SET_VERSION,
|
||||
@@ -229,6 +231,7 @@ int main(int argc, char *argv[])
|
||||
{"medium-info", 0, 0, MODE_MEDIUM_INFO },
|
||||
{"merge-images", 1, 0, MODE_MERGE_IMAGES },
|
||||
{"method", 2, 0, 'm' },
|
||||
{"no-progress", 0, 0, MODIFIER_NO_PROGRESS },
|
||||
{"old-ds-marker", 0, 0, MODIFIER_OLD_DS_MARKER },
|
||||
{"prefetch-sectors", 1, 0, MODIFIER_PREFETCH_SECTORS },
|
||||
{"prefix", 1, 0, 'p'},
|
||||
@@ -242,6 +245,7 @@ int main(int argc, char *argv[])
|
||||
{"read-medium", 1, 0, MODIFIER_READ_MEDIUM },
|
||||
{"read-sector", 1, 0, MODE_READ_SECTOR},
|
||||
{"read-raw", 0, 0, MODIFIER_READ_RAW},
|
||||
{"regtest", 0, 0, MODIFIER_REGTEST},
|
||||
{"redundancy", 1, 0, 'n'},
|
||||
{"resource-file", 1, 0, MODIFIER_RESOURCE_FILE},
|
||||
{"scan", 2, 0,'s'},
|
||||
@@ -318,6 +322,8 @@ int main(int argc, char *argv[])
|
||||
Closure->mediumSize = BD_SL_SIZE;
|
||||
else if(!strcmp(optarg, "BD2") || !strcmp(optarg, "bd2"))
|
||||
Closure->mediumSize = BD_DL_SIZE;
|
||||
else if(!strcmp(optarg, "BDXL3") || !strcmp(optarg, "bdxl3"))
|
||||
Closure->mediumSize = BDXL_TL_SIZE;
|
||||
else
|
||||
{ int len = strlen(optarg);
|
||||
if(strchr("0123456789", optarg[len-1]))
|
||||
@@ -479,6 +485,9 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MODIFIER_NO_PROGRESS:
|
||||
Closure->noProgress = 1;
|
||||
break;
|
||||
case MODIFIER_OLD_DS_MARKER:
|
||||
Closure->dsmVersion = 0;
|
||||
break;
|
||||
@@ -525,6 +534,9 @@ int main(int argc, char *argv[])
|
||||
case MODIFIER_READ_RAW:
|
||||
Closure->readRaw = TRUE;
|
||||
break;
|
||||
case MODIFIER_REGTEST:
|
||||
Closure->regtestMode = TRUE;
|
||||
break;
|
||||
case MODIFIER_RESOURCE_FILE:
|
||||
if(Closure->dotFile)
|
||||
g_free(Closure->dotFile);
|
||||
@@ -914,12 +926,14 @@ int main(int argc, char *argv[])
|
||||
PrintCLI(_(" --ignore-iso-size - ignore image size from ISO/UDF data (dangerous - see man page!)\n"));
|
||||
PrintCLI(_(" --internal-rereads n - drive may attempt n rereads before reporting an error\n"));
|
||||
PrintCLI(_(" --medium-info - print info about medium in drive\n"));
|
||||
PrintCLI(_(" --no-progress - do not print progress information\n"));
|
||||
PrintCLI(_(" --old-ds-marker - mark missing sectors compatible with dvdisaster <= 0.70\n"));
|
||||
PrintCLI(_(" --prefetch-sectors n - prefetch n sectors for RS03 encoding (uses ~nMiB)\n"));
|
||||
PrintCLI(_(" --raw-mode n - mode for raw reading CD media (20 or 21)\n"));
|
||||
PrintCLI(_(" --read-attempts n-m - attempts n upto m reads of a defective sector\n"));
|
||||
PrintCLI(_(" --read-medium n - read the whole medium up to n times\n"));
|
||||
PrintCLI(_(" --read-raw - performs read in raw mode if possible\n"));
|
||||
PrintCLI(_(" --regtest - tweaks output for compatibility with regtests\n"));
|
||||
PrintCLI(_(" --resource-file p - get resource file from given path\n"));
|
||||
PrintCLI(_(" --speed-warning n - print warning if speed changes by more than n percent\n"));
|
||||
PrintCLI(_(" --spinup-delay n - wait n seconds for drive to spin up\n"));
|
||||
|
||||
84
dvdisaster.h
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -85,11 +85,22 @@
|
||||
|
||||
/* Some standard media sizes */
|
||||
|
||||
/* WARNING: These values affect RS03 in non-obvious ways.
|
||||
* If you create RS03 data with changed values, you MUST
|
||||
* keep a dvdisaster version with the changed values for
|
||||
* recovering images with that RS03 data.
|
||||
* dvdisaster compiled with default values may appear to
|
||||
* scan and verify such images correctly as long as they
|
||||
* are not damaged. But recovery WILL BREAK when
|
||||
* processing a damaged image. YOU HAVE BEEN WARNED.
|
||||
*/
|
||||
|
||||
#define CDR_SIZE (351*1024)
|
||||
#define DVD_SL_SIZE 2295104 /* DVD+R/RW size used at least common denominator */
|
||||
#define DVD_SL_SIZE 2295104 /* DVD+R/RW size used as least common denominator */
|
||||
#define DVD_DL_SIZE 4171712 /* also seen: 4148992 4173824 */
|
||||
#define BD_SL_SIZE 11826176
|
||||
#define BD_DL_SIZE 23652352
|
||||
#define BDXL_TL_SIZE 47305728
|
||||
|
||||
/* Maximum accepted media sizes (in 2K sectors) */
|
||||
|
||||
@@ -131,6 +142,7 @@
|
||||
typedef struct _GlobalClosure
|
||||
{ int version; /* Integer number representing current program version */
|
||||
char *cookedVersion; /* version string formatted for GUI use */
|
||||
gint8 releaseFlags; /* flags marking release status */
|
||||
char *versionString; /* more detailed version string */
|
||||
char *device; /* currently selected device to read from */
|
||||
GPtrArray *deviceNames; /* List of drive names */
|
||||
@@ -144,13 +156,15 @@ typedef struct _GlobalClosure
|
||||
gint64 cdSize; /* Maximum cd size (for RS02 type images) */
|
||||
gint64 dvdSize1; /* Maximum 1-layer dvd size (for augmented images) */
|
||||
gint64 dvdSize2; /* Maximum 2-layer dvd size (for augmented images) */
|
||||
gint64 bdSize1; /* Maximum 1-layer dvd size (for augmented images) */
|
||||
gint64 bdSize2; /* Maximum 2-layer dvd size (for augmented images) */
|
||||
gint64 bdSize1; /* Maximum 1-layer bd size (for augmented images) */
|
||||
gint64 bdSize2; /* Maximum 2-layer bd size (for augmented images) */
|
||||
gint64 bdSize3; /* Maximum 3-layer bdxl size (for augmented images) */
|
||||
gint64 savedCDSize; /* Undo values for above */
|
||||
gint64 savedDVDSize1;
|
||||
gint64 savedDVDSize2;
|
||||
gint64 savedBDSize1;
|
||||
gint64 savedBDSize2;
|
||||
gint64 savedBDSize3;
|
||||
gint64 mediumSize; /* Maximum medium size (for augmented images) */
|
||||
int cacheMiB; /* Cache setting for the parity codec, in megabytes */
|
||||
int prefetchSectors; /* Prefetch setting per encoder thread */
|
||||
@@ -171,11 +185,13 @@ typedef struct _GlobalClosure
|
||||
int spinupDelay; /* Seconds to wait for drive to spin up */
|
||||
int truncate; /* confirms truncation of large images */
|
||||
int noTruncate; /* do not truncate image at the end */
|
||||
int noProgress; /* do not print the percentage progress indicator */
|
||||
int dsmVersion; /* 1 means new style dead sector marker */
|
||||
int unlinkImage; /* delete image after ecc file creation */
|
||||
int confirmDeletion; /* do not ask whether files should be deleted */
|
||||
int driveSpeed; /* currently unused */
|
||||
int debugMode; /* may activate additional features */
|
||||
int regtestMode; /* tweaks output for compatibility with regtests */
|
||||
int debugCDump; /* dump as #include file instead of hexdump */
|
||||
int verbose; /* may activate additional messages */
|
||||
int quickVerify; /* do only non time-consuming verify actions */
|
||||
@@ -226,11 +242,8 @@ typedef struct _GlobalClosure
|
||||
char *errorTitle; /* Title to show in error dialogs */
|
||||
gint32 randomSeed; /* for the random number generator */
|
||||
|
||||
guint32 *crcCache; /* sectorwise CRC32 for last image read */
|
||||
char *crcImageName; /* file name of cached image */
|
||||
unsigned char md5Cache[16]; /* md5sum of last image read */
|
||||
struct _CrcBuf *crcBuf; /* crcBuf of last image read */
|
||||
|
||||
|
||||
/*** GUI-related things */
|
||||
|
||||
int guiMode; /* TRUE if GUI is active */
|
||||
@@ -318,7 +331,6 @@ typedef struct _GlobalClosure
|
||||
GtkWidget *readLinearFootline;
|
||||
GtkWidget *readLinearFootlineBox;
|
||||
gint64 crcErrors, readErrors; /* these are passed between threads and must therefore be global */
|
||||
int crcAvailable; /* true when CRC data is available while reading/scanning */
|
||||
|
||||
/*** Widgets for the adaptive reading action */
|
||||
|
||||
@@ -428,6 +440,7 @@ typedef struct _CrcBlock
|
||||
struct _RawBuffer *rawbuffer_forward;
|
||||
struct _DefectiveSectorHeader *dsh_forward;
|
||||
struct _DeviceHandle *dh_forward;
|
||||
struct _Image *dh_image;
|
||||
|
||||
/***
|
||||
*** bitmap.c
|
||||
@@ -443,7 +456,7 @@ Bitmap* CreateBitmap0(int);
|
||||
#define GetBit(bm,bit) (bm->bitmap[(bit)>>5] & (1<<((bit)&31)))
|
||||
#define SetBit(bm,bit) bm->bitmap[(bit)>>5] |= (1<<((bit)&31))
|
||||
#define ClearBit(bm,bit) bm->bitmap[(bit)>>5] &= ~(1<<((bit)&31))
|
||||
int CountBits(Bitmap*);
|
||||
gint32 CountBits(Bitmap*);
|
||||
void FreeBitmap(Bitmap*);
|
||||
|
||||
/***
|
||||
@@ -466,7 +479,6 @@ void InitClosure(void);
|
||||
void LocalizedFileDefaults(void);
|
||||
void UpdateMarkup(char**, GdkColor*);
|
||||
void DefaultColors(void);
|
||||
void ClearCrcCache(void);
|
||||
void FreeClosure(void);
|
||||
void ReadDotfile(void);
|
||||
void WriteSignature(void);
|
||||
@@ -483,10 +495,36 @@ guint32 EDCCrc32(unsigned char*, int);
|
||||
*** crcbuf.c
|
||||
***/
|
||||
|
||||
/* Flags for CrcBuf->md5State */
|
||||
|
||||
#define MD5_INVALID 0
|
||||
#define MD5_BUILDING 1<<0
|
||||
#define MD5_DATA_COMPLETE 1<<1
|
||||
#define MD5_IMAGE_COMPLETE 1<<2
|
||||
#define MD5_COMPLETE (MD5_DATA_COMPLETE | MD5_IMAGE_COMPLETE)
|
||||
|
||||
typedef struct _CrcBuf
|
||||
{ guint32 *crcbuf;
|
||||
guint64 size;
|
||||
{ /* CRC32 of image sectors */
|
||||
guint32 *crcbuf;
|
||||
guint64 crcSize;
|
||||
Bitmap *valid;
|
||||
gint32 crcCached; /* CRC has been retrieved from ECC or previous run */
|
||||
|
||||
/* MD5 sum of image sectors */
|
||||
struct MD5Context *md5Ctxt; /* context for building the image MD5 sum */
|
||||
int md5State; /* state of md5 sum */
|
||||
guint64 lastSector; /* tracking of sector sequence */
|
||||
unsigned char dataMD5sum[16]; /* md5sum of data portion from last image read */
|
||||
unsigned char imageMD5sum[16]; /* md5sum of last image read */
|
||||
|
||||
/* Characteristics of image */
|
||||
char *imageName; /* file name of cached image */
|
||||
guint64 dataSectors; /* number of data sectors (minus ecc sectors) */
|
||||
guint64 coveredSectors; /* sectors covered by crc (EH, padding, ...) */
|
||||
guint64 allSectors; /* number of all image sectors */
|
||||
guint8 mediumFP[16]; /* fingerprint of image */
|
||||
gint32 fpSector; /* sector which was fingerprinted */
|
||||
gint32 fpValid;
|
||||
} CrcBuf;
|
||||
|
||||
enum
|
||||
@@ -496,10 +534,21 @@ enum
|
||||
CRC_OUTSIDE_BOUND
|
||||
};
|
||||
|
||||
CrcBuf *CreateCrcBuf(guint64);
|
||||
/* Modes for AddSectorToCrcBuffer */
|
||||
|
||||
#define CRCBUF_UPDATE_CRC 1<<0
|
||||
#define CRCBUF_UPDATE_MD5 1<<1
|
||||
#define CRCBUF_UPDATE_ALL 3
|
||||
#define CRCBUF_UPDATE_CRC_AFTER_DATA 1<<2
|
||||
|
||||
CrcBuf *CreateCrcBuf(struct _Image*);
|
||||
void FreeCrcBuf(CrcBuf*);
|
||||
|
||||
int CheckAgainstCrcBuffer(CrcBuf*, gint64, unsigned char*);
|
||||
int AddSectorToCrcBuffer(CrcBuf*, int, guint64, unsigned char*, int);
|
||||
int CrcBufValid(CrcBuf*, struct _Image*, EccHeader*);
|
||||
|
||||
void PrintCrcBuf(CrcBuf*);
|
||||
|
||||
/***
|
||||
*** curve.c
|
||||
@@ -734,7 +783,7 @@ void CreateIconFactory();
|
||||
|
||||
enum {IMAGE_NONE, IMAGE_FILE, IMAGE_MEDIUM};
|
||||
enum {FP_UNKNOWN, FP_UNREADABLE, FP_PRESENT};
|
||||
enum {ECCFILE_PRESENT, ECCFILE_MISSING, ECCFILE_INVALID, ECCFILE_DEFECTIVE_HEADER, ECCFILE_WRONG_CODEC};
|
||||
enum {ECCFILE_PRESENT, ECCFILE_NOPERM, ECCFILE_MISSING, ECCFILE_INVALID, ECCFILE_DEFECTIVE_HEADER, ECCFILE_WRONG_CODEC};
|
||||
|
||||
typedef struct _Image
|
||||
{ int type; /* file or medium */
|
||||
@@ -768,11 +817,12 @@ typedef struct _Image
|
||||
int fpState; /* 0=unknown; 1=unreadable; 2=present */
|
||||
|
||||
/*
|
||||
* layout caching
|
||||
* layout and checksum caching
|
||||
*/
|
||||
|
||||
void *cachedLayout; /* Layout of different codecs */
|
||||
|
||||
CrcBuf *crcCache; /* cached crc and md5 sums */
|
||||
|
||||
/*
|
||||
* optionally attached ecc file
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
2
endian.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
158
fingerprints.md5
@@ -1,83 +1,83 @@
|
||||
56ccfe794d3d2dbec59ffa59d6edff8e *dvdisaster.h
|
||||
11279e50580a66ce496b20e2847474b1 *galois-inlines.h
|
||||
b064d001e5e4ed8221eb9f10d784cf45 *dvdisaster.h
|
||||
79abb986b900ec06a73256876ba0d65c *galois-inlines.h
|
||||
14eb94f981903fcffe2ccb33aa2cb9db *md5.h
|
||||
ca18c4c23f757d059324660a57b81333 *read-linear.h
|
||||
0fb9fbace5949e1195c3ef76883654b2 *rs01-includes.h
|
||||
7f619909206bc32a6d2c74d8de67693f *rs02-includes.h
|
||||
f4575624be69e91cb955498a9fa2349f *rs03-includes.h
|
||||
1658869f384554bed067668d09bbac5c *scsi-layer.h
|
||||
b97fb4e0296a19edd688075b51fcceab *udf.h
|
||||
93b037657a397bd4153dd68f89871d34 *bitmap.c
|
||||
adec4a144110d8fa5cb68e7615c9e451 *build.c
|
||||
be495469b9e3f080202e284b7f9e3a4a *cacheprobe.c
|
||||
f69aeebb1ba6feca5f1342992a8abc43 *closure.c
|
||||
be413daa24e03dd054c5aa03ff25ffba *crc32.c
|
||||
84f641b09f319dcbd9ee0491b8570f31 *crcbuf.c
|
||||
fec5f60a87d29fea5d5b5486a1c77902 *curve.c
|
||||
8815260ba81e79a0cd6c31d5087c4dbe *debug.c
|
||||
ec4b15efa4458f777237a3e27950ca3b *ds-marker.c
|
||||
01941fd931030dc408807f21d68dd346 *dvdisaster.c
|
||||
5ad21ab84135db1cb4e49d126d1bec54 *ecc-rs01.c
|
||||
8771601ac38f18eeae29442d79699043 *ecc-rs02.c
|
||||
96bd51aa8da1240dea457132a4f80bdb *ecc-rs03.c
|
||||
d2265d322c4e8bd9e361198f55ed96cc *endian.c
|
||||
fc5502b63e4c8e6056969ce0271f8e4a *galois.c
|
||||
c5cc7050c057ba36d2d16c5c52a4f04b *help-dialogs.c
|
||||
f0300958f1141ff6e0af4a3b197f8083 *heuristic-lec.c
|
||||
eb3596cdbc81325f1d03ee49aec410c0 *icon-factory.c
|
||||
f7e4ef1993ecde342b3075d4beca42b8 *image.c
|
||||
8fac0f1fc3208b49e2768b45a82e7fc3 *large-io.c
|
||||
7e25aa5eca2a9ac7ee5bfb735a07f849 *l-ec.c
|
||||
8947fd8a72aa29c37b5385cdfaa46426 *logfile.c
|
||||
2c2ff63d4804b312d7046483b7ce9050 *maintenance.c
|
||||
1e2e5c73226c57e9cdd2b49b1ffb3306 *main-window.c
|
||||
f2d723717ca5f450ee8cc0b556f5506a *read-linear.h
|
||||
100127beaecc24b28b2b80d76bbf68c8 *rs01-includes.h
|
||||
5b39a23de01c988d562d70ed68682ab7 *rs02-includes.h
|
||||
4407ce43eae55b19409be9980432c94f *rs03-includes.h
|
||||
2a5980c706c67bec479e4532ab9a7093 *scsi-layer.h
|
||||
c779a2908542c6a519ed7cdfc4e5e073 *udf.h
|
||||
8f86a75f83a3bc9b6ce54cce037b3c75 *bitmap.c
|
||||
5230bd572fc8ef1857063c885c00463a *build.c
|
||||
7b59033ebffd6d8230efaf6834b2f942 *cacheprobe.c
|
||||
bfb6d7ed2a921ce18dc0339774f72f41 *closure.c
|
||||
e5bd212395758ae0b7e97d70c7a2df55 *crc32.c
|
||||
7f5951182421a0366782b191a0b4ba82 *crcbuf.c
|
||||
abb7c9decfd43935c943bc0dd1bab0d5 *curve.c
|
||||
f96a3e006fc5d1c5d181e5056377c9ce *debug.c
|
||||
6f8843d1cccc55506771ab02168b2df3 *ds-marker.c
|
||||
19d0f85d035115f3bd8d4472e6379058 *dvdisaster.c
|
||||
1c8136affed485adaf60e7904d9930a4 *ecc-rs01.c
|
||||
7b301352a60c18c25f84c8cc7a36fd48 *ecc-rs02.c
|
||||
91aa71f03dc9dade2e97dc59d7ec38f0 *ecc-rs03.c
|
||||
39900d26ddcbb7c7e2a9198de14bace1 *endian.c
|
||||
3f6e9dffb9de733dcccc916ca38292ca *galois.c
|
||||
abc8a8d55248eab5416c45104a033171 *help-dialogs.c
|
||||
547bf9a9d005419a0ed601317aeb4e14 *heuristic-lec.c
|
||||
746666ade12c2db41ce9af6f55e4c13c *icon-factory.c
|
||||
b3db603f77fd2735a6e8b1c568f7bdac *image.c
|
||||
fe9de426f96e6d206d1482a24f589253 *large-io.c
|
||||
abed1a50b9751387dc1e3cbc84a61fba *l-ec.c
|
||||
6960647dc7fc5ce8a2727326946aaff1 *logfile.c
|
||||
92e81646ef4e8618ded5d82db6a6163a *maintenance.c
|
||||
3c3eebc43fc7aff3865022207e06153b *main-window.c
|
||||
913554f7e994e212f6a52b769eef24bb *md5.c
|
||||
9b469b33c074ca00eeede8e7070c6e6e *medium-info.c
|
||||
6d118900b888e6928d235848d29c281f *memtrack.c
|
||||
48790d6b19e854505c561f1b2d4d5747 *menubar.c
|
||||
7a1925508ecc735a1651cb7ee9f95353 *method.c
|
||||
8f0acf2f7d98a55d05a4721d97741c7c *medium-info.c
|
||||
ce145372a25e0fb96070d460da7bdbb4 *memtrack.c
|
||||
66cdf82b59fd973e3060d163b6887a20 *menubar.c
|
||||
5006b2db93b210be3fb630e8d9463239 *method.c
|
||||
17183bad35db217e2c352178844ceda3 *method-link.c
|
||||
a615c90256180c45de7826bda73aa12c *misc.c
|
||||
74a6bd2f64795790609244692902d1f7 *preferences.c
|
||||
5286b61649c12241979dddc429af905c *print-sense.c
|
||||
2af6685017c247de7458e9c4d39b6ed5 *misc.c
|
||||
6523662e8e5aa2daf38a7e8c07ce1180 *preferences.c
|
||||
5e7b077020e063951cc72ea57f5f046a *print-sense.c
|
||||
cdde449dd2a8f64b560ff18a36f86234 *random.c
|
||||
bc91a925f4b483ed8b1fa416ec96ae07 *raw-editor.c
|
||||
542ec8681c6568c95841a6220f431ff7 *raw-sector-cache.c
|
||||
8e3ca05dc954af1551c282474dd8b975 *read-adaptive.c
|
||||
66114f4805ed108e6fec587350a500a3 *read-adaptive-window.c
|
||||
04c4ae8846e25a33f9b8f4bf45fc1390 *read-linear.c
|
||||
b6a4c16ab9dcfd876d333992486970ac *read-linear-window.c
|
||||
b259fdb82b13daa0362357cdbf0361f5 *recover-raw.c
|
||||
d3e2d73c572dc97c44cc5e59be65b003 *rs01-common.c
|
||||
f865275e2866ca7f8575e9651642ffdb *rs01-create.c
|
||||
f01b19a7372dc79ee01dbc468f69e1f4 *rs01-fix.c
|
||||
1e40aecd9b8ff60f36966ad0acd88a6f *rs01-verify.c
|
||||
279705c4ff8107b8baebedd62df117e2 *rs01-window.c
|
||||
1a36679647e642f6a0b69136d6b45612 *rs02-common.c
|
||||
ea28d99b2c021fc1c2dbb1cf37358c52 *rs02-create.c
|
||||
93fc31920c37001ad76fa4dc8173f98c *rs02-fix.c
|
||||
89f566f5623d60a954f116cb50273f46 *rs02-recognize.c
|
||||
499c7583c8145af00d6af1e7c18c11e5 *rs02-verify.c
|
||||
8053dafa7f01f8651e1b08602a322520 *rs02-window.c
|
||||
317727f40df74e13be63365113298725 *rs03-common.c
|
||||
b6eab678c8c8651a763bfd647247a65c *rs03-create.c
|
||||
45c565d530d35bb0696f80fd5dbde2fc *rs03-fix.c
|
||||
50fe3c9e7b399453367cefb98116e993 *rs03-preferences.c
|
||||
729531e942f4a72ab91904e9e779f2c2 *rs03-recognize.c
|
||||
51902bc5c25b398cbe5c32169f3ce873 *rs03-verify.c
|
||||
731215c654a159376f76e0ca4712a5ed *rs03-window.c
|
||||
53bf14fc0e1e5aae2468f98596c71eab *rs-decoder.c
|
||||
3d2b4aed577d2d1dec0366b3e706328d *rs-encoder-altivec.c
|
||||
c678e9bb63b14b07210bcd65f9f578a8 *rs-encoder.c
|
||||
9b21a86f3d407b52e842072755824b2d *rs-encoder-sse2.c
|
||||
d434fd89aaa838eacdf56aad63c3cbd8 *scsi-freebsd.c
|
||||
d248b1f3ffc6db3a27f06a612a2da17b *scsi-layer.c
|
||||
59972a6e2a9360e5d1480edc3bd62ee4 *scsi-linux.c
|
||||
6095aab923d3dbff9fff64782ee9ba54 *scsi-netbsd.c
|
||||
a27df955f3592ac2d577d679398afae4 *scsi-simulated.c
|
||||
b6f3d02be48366e8f055bf880640a054 *scsi-unknown.c
|
||||
7c2fd552dc90ac1a0e872867c9727218 *show-manual.c
|
||||
054be9d45e056c96bf1b71dc8fb01e46 *smart-lec.c
|
||||
7d853ee1150c79830f6ff100767f2496 *spiral.c
|
||||
059d0883a80a70c59ca72ea0b2f161c7 *udf.c
|
||||
f50d84725408b318f7d2645e21df4d04 *welcome-window.c
|
||||
28f42d264cd18bb2e0ccdd8e15a0172e *raw-editor.c
|
||||
1d416f611a175ba15be27f7f5686dd98 *raw-sector-cache.c
|
||||
7f281312b3a65666f7eebaadb62e7f6e *read-adaptive.c
|
||||
ccdc572bb24d20ae6fb53f360318b492 *read-adaptive-window.c
|
||||
af7a757cad586d3766a3eaad382c6737 *read-linear.c
|
||||
47dc58effd96f2b23182a4595ca36171 *read-linear-window.c
|
||||
edc0e564573d595c1196c4dc0e70e659 *recover-raw.c
|
||||
ea4d6894e717d4957cde686f88d7bdfd *rs01-common.c
|
||||
aa9d409ee4eeaa7ba92d731cf32ee727 *rs01-create.c
|
||||
ab15d7470a2fe950ebb33134018f044f *rs01-fix.c
|
||||
cb3722894665baf9c4ff4c26ff79737b *rs01-verify.c
|
||||
5cdecc33da1579733f0545944c4069ab *rs01-window.c
|
||||
b33a0982df485b4e52e56fc1c61285ae *rs02-common.c
|
||||
a1025fcc9455219937bae5bfadf0abf5 *rs02-create.c
|
||||
f466c8296a37ea88b64aec9c870d6d75 *rs02-fix.c
|
||||
369ec37d67674ffd2627f0373a566f0c *rs02-recognize.c
|
||||
8cc283e60a73493ac6ba60a2f4af1754 *rs02-verify.c
|
||||
eccac3ed74b32508b27de0e0d363c6b1 *rs02-window.c
|
||||
9a9b966171f1b375cf3381b545a1c6d4 *rs03-common.c
|
||||
2502514702687a2a252feace096d20f4 *rs03-create.c
|
||||
19676ef95e635206c19dfe12b957e4b2 *rs03-fix.c
|
||||
b012df78d2c546c87f6dd75769515409 *rs03-preferences.c
|
||||
7d6101e6a95aeb45d6cd03ffe8891b96 *rs03-recognize.c
|
||||
b7a6a6c64b4034380c581a5499940db4 *rs03-verify.c
|
||||
1d2b071943c121bf0c47a2e047317262 *rs03-window.c
|
||||
a2e1e28a609af85d9b83f01339b33a62 *rs-decoder.c
|
||||
3882a92849cd23e64c81262be6e52650 *rs-encoder-altivec.c
|
||||
1fc6cad3af2461e7974bf49e8f1bf5e9 *rs-encoder.c
|
||||
f7f3e2708f0c389ed53c0f1083567a55 *rs-encoder-sse2.c
|
||||
2e099a3d88f25f81420b96fe9bd62f44 *scsi-freebsd.c
|
||||
cd58a45387267fe0728f439d7bb2045d *scsi-layer.c
|
||||
b1b6bd57433eedab3a4f35389a182d14 *scsi-linux.c
|
||||
7064327dc15a2d88e5375176d4c64132 *scsi-netbsd.c
|
||||
3c0e100cdd499b1c23ac5e12b1fd6694 *scsi-simulated.c
|
||||
be42d574e6340845d984c21dc902af1a *scsi-unknown.c
|
||||
85aa8093f41c36ce791363e94f488dec *show-manual.c
|
||||
6099911dd508701b0b8b5d09105faf95 *smart-lec.c
|
||||
10f3e2b054fe3c1ac69c738b97f1beaa *spiral.c
|
||||
dec5fbde631058d48866cc1d77446d37 *udf.c
|
||||
6741fc5457e9c2026451403f2d45096c *welcome-window.c
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
2
galois.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* The Reed-Solomon error correction draws a lot of inspiration - and even code -
|
||||
* from Phil Karn's excellent Reed-Solomon library: http://www.ka9q.net/code/fec/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -724,11 +724,11 @@ void AboutDialog()
|
||||
|
||||
#ifdef MODIFIED_SOURCE
|
||||
AboutTextWithLink(vbox,
|
||||
_("Modified version Copyright 2015 (please fill in - [directions])\n"
|
||||
"Copyright 2004-2015 Carsten Gnoerlich"),
|
||||
_("Modified version Copyright 2017 (please fill in - [directions])\n"
|
||||
"Copyright 2004-2017 Carsten Gnoerlich"),
|
||||
"MODIFYING");
|
||||
#else
|
||||
AboutText(vbox, _("Copyright 2004-2015 Carsten Gnoerlich"));
|
||||
AboutText(vbox, _("Copyright 2004-2017 Carsten Gnoerlich"));
|
||||
#endif
|
||||
|
||||
sep = gtk_hseparator_new();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
* Copyright (C) 2006 Andrei Grecu
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -29,9 +29,25 @@
|
||||
***/
|
||||
|
||||
static GdkPixbuf* create_icon(GtkIconFactory *ifact, char *name, const guint8 *inline_data)
|
||||
{ GdkPixbuf *pb = gdk_pixbuf_new_from_inline(-1, inline_data, FALSE, NULL);
|
||||
GtkIconSet *iset = gtk_icon_set_new_from_pixbuf(pb);
|
||||
{ GdkPixbuf *pb;
|
||||
GtkIconSet *iset;
|
||||
int width, height, rowstride;
|
||||
|
||||
/* gdk_pixbuf_new_from_inline() deprecated; recommended to replace with GResource XML crap.
|
||||
One day I'll get rid of GTK+. I swear.
|
||||
|
||||
pb = gdk_pixbuf_new_from_inline(-1, inline_data, FALSE, NULL);
|
||||
*/
|
||||
|
||||
rowstride = (inline_data[12] << 24) + (inline_data[13] << 16) + (inline_data[14] << 8) + inline_data[15];
|
||||
width = (inline_data[16] << 24) + (inline_data[17] << 16) + (inline_data[18] << 8) + inline_data[19];
|
||||
height = (inline_data[20] << 24) + (inline_data[21] << 16) + (inline_data[22] << 8) + inline_data[23];
|
||||
|
||||
pb = gdk_pixbuf_new_from_data(inline_data+24, GDK_COLORSPACE_RGB, TRUE, 8,
|
||||
width, height, rowstride, NULL, NULL);
|
||||
|
||||
iset = gtk_icon_set_new_from_pixbuf(pb);
|
||||
|
||||
gtk_icon_factory_add(ifact, name, iset);
|
||||
return pb;
|
||||
}
|
||||
|
||||
626
icons/source/medium.svg
Normal file
@@ -0,0 +1,626 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="210mm"
|
||||
height="297mm"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="medium.svg">
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5823">
|
||||
<stop
|
||||
style="stop-color:#c6e9af;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5825" />
|
||||
<stop
|
||||
style="stop-color:#dee3db;stop-opacity:0"
|
||||
offset="1"
|
||||
id="stop5827" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5815">
|
||||
<stop
|
||||
style="stop-color:#c6e9af;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5817" />
|
||||
<stop
|
||||
style="stop-color:#e3f4d7;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5819" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5807">
|
||||
<stop
|
||||
style="stop-color:#ffeeaa;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5809" />
|
||||
<stop
|
||||
style="stop-color:#e3f4d7;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5811" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5799">
|
||||
<stop
|
||||
style="stop-color:#ffeeaa;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5801" />
|
||||
<stop
|
||||
style="stop-color:#ffaaaa;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5803" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5791">
|
||||
<stop
|
||||
style="stop-color:#ff8080;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5793" />
|
||||
<stop
|
||||
style="stop-color:#f4d7d7;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5795" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5773">
|
||||
<stop
|
||||
style="stop-color:#ffccaa;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5775" />
|
||||
<stop
|
||||
id="stop5787"
|
||||
offset="0.5"
|
||||
style="stop-color:#e9afaf;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#f4d7d7;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5777" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5761">
|
||||
<stop
|
||||
style="stop-color:#ffeeaa;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5763" />
|
||||
<stop
|
||||
id="stop5785"
|
||||
offset="0.05215516"
|
||||
style="stop-color:#ffe9aa;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5783"
|
||||
offset="0.10431032"
|
||||
style="stop-color:#ffe5aa;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5781"
|
||||
offset="0.20862064"
|
||||
style="stop-color:#ffddaa;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5771"
|
||||
offset="0.41724128"
|
||||
style="stop-color:#ffccaa;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop5769"
|
||||
offset="0.65517235"
|
||||
style="stop-color:#ffeeaa;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#f5f5f5;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5765" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5745">
|
||||
<stop
|
||||
id="stop5747"
|
||||
offset="0"
|
||||
style="stop-color:#f5f5f5;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#faf1cf;stop-opacity:1;"
|
||||
offset="0.5"
|
||||
id="stop5751" />
|
||||
<stop
|
||||
id="stop5749"
|
||||
offset="1"
|
||||
style="stop-color:#ffeeaa;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5737"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop5739"
|
||||
offset="0"
|
||||
style="stop-color:#f5f5f5;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5741"
|
||||
offset="1"
|
||||
style="stop-color:#ccffaa;stop-opacity:0" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5729">
|
||||
<stop
|
||||
id="stop5731"
|
||||
offset="0"
|
||||
style="stop-color:#f5f5f5;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5733"
|
||||
offset="1"
|
||||
style="stop-color:#ff9955;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5703"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop5705"
|
||||
offset="0"
|
||||
style="stop-color:#f5f5f5;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5707"
|
||||
offset="1"
|
||||
style="stop-color:#ccffaa;stop-opacity:0" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5693">
|
||||
<stop
|
||||
style="stop-color:#f5f5f5;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5695" />
|
||||
<stop
|
||||
style="stop-color:#ccffaa;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5697" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5679">
|
||||
<stop
|
||||
style="stop-color:#f5f5f5;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5681" />
|
||||
<stop
|
||||
style="stop-color:#b3ff80;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5683" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5671">
|
||||
<stop
|
||||
style="stop-color:#f5f5f5;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5673" />
|
||||
<stop
|
||||
style="stop-color:#aaeeff;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5675" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5663">
|
||||
<stop
|
||||
style="stop-color:#f5f5f5;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5665" />
|
||||
<stop
|
||||
style="stop-color:#aaeeff;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5667" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5655">
|
||||
<stop
|
||||
style="stop-color:#f5f5f5;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5657" />
|
||||
<stop
|
||||
style="stop-color:#ffaaaa;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5659" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5643">
|
||||
<stop
|
||||
style="stop-color:#f5f5f5;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5645" />
|
||||
<stop
|
||||
style="stop-color:#ffaaaa;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5647" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5361"
|
||||
osb:paint="solid">
|
||||
<stop
|
||||
style="stop-color:#f5f5f5;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5363" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3897">
|
||||
<stop
|
||||
id="stop3923"
|
||||
offset="0"
|
||||
style="stop-color:#f5f5f5;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#ff5555;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3901" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5643"
|
||||
id="linearGradient5641"
|
||||
x1="193.54839"
|
||||
y1="407.20087"
|
||||
x2="282.25806"
|
||||
y2="287.84604"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5655"
|
||||
id="linearGradient5661"
|
||||
x1="358.06451"
|
||||
y1="273.32993"
|
||||
x2="230.64516"
|
||||
y2="328.16864"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5663"
|
||||
id="linearGradient5669"
|
||||
x1="424.19354"
|
||||
y1="250.74927"
|
||||
x2="575.80646"
|
||||
y2="347.52347"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5671"
|
||||
id="linearGradient5677"
|
||||
x1="580.64514"
|
||||
y1="362.03961"
|
||||
x2="511.29031"
|
||||
y2="292.68475"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5679"
|
||||
id="linearGradient5685"
|
||||
x1="590.32257"
|
||||
y1="353.9751"
|
||||
x2="643.5484"
|
||||
y2="460.4267"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5693"
|
||||
id="linearGradient5699"
|
||||
x1="638.70966"
|
||||
y1="515.26538"
|
||||
x2="620.96771"
|
||||
y2="410.4267"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5703"
|
||||
id="linearGradient5701"
|
||||
x1="661.29034"
|
||||
y1="471.71701"
|
||||
x2="601.61292"
|
||||
y2="603.9751"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5737"
|
||||
id="linearGradient5735"
|
||||
x1="662.9032"
|
||||
y1="476.55573"
|
||||
x2="622.58063"
|
||||
y2="592.68475"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5761"
|
||||
id="linearGradient5767"
|
||||
x1="630.64514"
|
||||
y1="624.94287"
|
||||
x2="666.12903"
|
||||
y2="471.71701"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5773"
|
||||
id="linearGradient5779"
|
||||
x1="627.41943"
|
||||
y1="574.94281"
|
||||
x2="596.77417"
|
||||
y2="633.00732"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5791"
|
||||
id="linearGradient5797"
|
||||
x1="433.87097"
|
||||
y1="760.4267"
|
||||
x2="609.67743"
|
||||
y2="612.03955"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5799"
|
||||
id="linearGradient5805"
|
||||
x1="448.38708"
|
||||
y1="712.03961"
|
||||
x2="512.90326"
|
||||
y2="670.10413"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5807"
|
||||
id="linearGradient5813"
|
||||
x1="462.90326"
|
||||
y1="737.84607"
|
||||
x2="408.06451"
|
||||
y2="749.13641"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5815"
|
||||
id="linearGradient5821"
|
||||
x1="285.48386"
|
||||
y1="726.55573"
|
||||
x2="424.19354"
|
||||
y2="745.91058"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5823"
|
||||
id="linearGradient5829"
|
||||
x1="340.32257"
|
||||
y1="671.71704"
|
||||
x2="214.51613"
|
||||
y2="586.23315"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.62"
|
||||
inkscape:cx="372.04724"
|
||||
inkscape:cy="514.28571"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1037"
|
||||
inkscape:window-height="877"
|
||||
inkscape:window-x="716"
|
||||
inkscape:window-y="229"
|
||||
inkscape:window-maximized="0" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#f5f5f5;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
id="path2991"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="m 732.25806,499.13638 a 332.25806,332.25806 0 1 1 -664.516117,0 332.25806,332.25806 0 1 1 664.516117,0 z"
|
||||
transform="translate(-35.483871,16.129032)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5641);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="M 107.66738,341.22168 A 332.25806,332.25806 0 0 1 202.66289,231.82855 L 400,499.13638 z"
|
||||
transform="translate(-35.483871,16.129036)"
|
||||
sodipodi:start="3.6368718"
|
||||
sodipodi:end="4.0764574" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5661);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7-7"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="M 200.72631,233.2691 A 332.25806,332.25806 0 0 1 316.54347,177.53037 L 400,499.13638 z"
|
||||
transform="translate(-35.483871,16.129038)"
|
||||
sodipodi:start="4.0691931"
|
||||
sodipodi:end="4.45849" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5669);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7-7-7"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="m 470.71562,174.49086 a 332.25806,332.25806 0 0 1 125.84556,56.7666 L 400,499.13638 z"
|
||||
transform="translate(-35.483867,16.129038)"
|
||||
sodipodi:start="4.9268629"
|
||||
sodipodi:end="5.3454209" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5685);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7-7-7-4"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="m 674.1297,311.39102 a 332.25806,332.25806 0 0 1 40.84343,81.97511 L 400,499.13638 z"
|
||||
transform="translate(-35.48387,16.129035)"
|
||||
sodipodi:start="5.6826807"
|
||||
sodipodi:end="5.9592099" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5677);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7-7-7-6"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="m 594.3381,229.64034 a 332.25806,332.25806 0 0 1 51.61224,46.10435 L 400,499.13638 z"
|
||||
transform="translate(-35.48387,16.129035)"
|
||||
sodipodi:start="5.3371471"
|
||||
sodipodi:end="5.5458146" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5699);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7-7-7-4-7"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="m 714.73363,392.6556 a 332.25806,332.25806 0 0 1 17.52388,107.08247 L 400,499.13638 z"
|
||||
transform="translate(-35.48387,16.129032)"
|
||||
sodipodi:start="5.9569532"
|
||||
sodipodi:end="6.2849962" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5779);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7-7-7-4-7-8-2"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="M 717.49385,597.08062 A 332.25806,332.25806 0 0 1 674.966,685.65479 L 400,499.13638 z"
|
||||
transform="translate(-35.48387,16.12903)"
|
||||
sodipodi:start="0.29922907"
|
||||
sodipodi:end="0.59603562" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5797);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7-7-7-4-7-8-2-6"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="m 678.98875,679.5822 a 332.25806,332.25806 0 0 1 -86.27104,90.21135 L 400,499.13638 z"
|
||||
transform="translate(-35.48387,16.12903)"
|
||||
sodipodi:start="0.57411199"
|
||||
sodipodi:end="0.95203795" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5805);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7-7-7-4-7-8-2-6-2"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="M 592.79974,769.73512 A 332.25806,332.25806 0 0 1 482.78848,820.91501 L 400,499.13638 z"
|
||||
transform="translate(-35.48387,16.12903)"
|
||||
sodipodi:start="0.95173485"
|
||||
sodipodi:end="1.318974" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5813);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7-7-7-4-7-8-2-6-2-0"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="M 484.50864,820.46753 A 332.25806,332.25806 0 0 1 419.61229,830.8151 L 400,499.13638 z"
|
||||
transform="translate(-35.48387,16.12903)"
|
||||
sodipodi:start="1.3136245"
|
||||
sodipodi:end="1.5117347" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5821);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7-7-7-4-7-8-2-6-2-0-9"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="M 419.21619,830.83829 A 332.25806,332.25806 0 0 1 260.85593,800.85536 L 400,499.13638 z"
|
||||
transform="translate(-35.48387,16.12903)"
|
||||
sodipodi:start="1.5129289"
|
||||
sodipodi:end="2.0029012" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5829);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7-7-7-4-7-8-2-6-2-0-9-5"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="M 262.0576,801.40664 A 332.25806,332.25806 0 0 1 139.41706,705.27213 L 400,499.13638 z"
|
||||
transform="translate(-35.483869,16.12903)"
|
||||
sodipodi:start="1.9989221"
|
||||
sodipodi:end="2.4723291" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#linearGradient5767);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path2991-7-7-7-4-7-8-2-8"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="m 732.25618,500.25304 a 332.25806,332.25806 0 0 1 -14.8554,97.12876 L 400,499.13638 z"
|
||||
transform="translate(-35.48387,16.12903)"
|
||||
sodipodi:start="0.0033608276"
|
||||
sodipodi:end="0.30017785" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="path2991-0"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="332.25806"
|
||||
sodipodi:ry="332.25806"
|
||||
d="m 732.25806,499.13638 a 332.25806,332.25806 0 1 1 -664.516117,0 332.25806,332.25806 0 1 1 664.516117,0 z"
|
||||
transform="translate(-35.483871,16.129036)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
|
||||
id="path2991-0-9"
|
||||
sodipodi:cx="400"
|
||||
sodipodi:cy="499.13638"
|
||||
sodipodi:rx="99.999992"
|
||||
sodipodi:ry="99.999992"
|
||||
d="m 499.99999,499.13638 a 99.999992,99.999992 0 1 1 -199.99998,0 99.999992,99.999992 0 1 1 199.99998,0 z"
|
||||
transform="translate(-35.483871,16.129036)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 21 KiB |
23
image.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -99,13 +99,15 @@ Image* OpenEccFileForImage(Image *image, char *filename, int flags, mode_t mode)
|
||||
}
|
||||
|
||||
image->eccFile = LargeOpen(filename, flags, mode);
|
||||
if(errno == EACCES)
|
||||
image->eccFileState = ECCFILE_NOPERM;
|
||||
else image->eccFileState = ECCFILE_MISSING;
|
||||
|
||||
if(!image->eccFile)
|
||||
{ if(new_image)
|
||||
{ g_free(image);
|
||||
return NULL;
|
||||
return NULL;
|
||||
}
|
||||
image->eccFileState = ECCFILE_MISSING;
|
||||
return image;
|
||||
}
|
||||
|
||||
@@ -167,6 +169,21 @@ int ReportImageEccInconsistencies(Image *image)
|
||||
{ Stop(_("\nError correction file type unknown.\n"));
|
||||
}
|
||||
}
|
||||
|
||||
/* Permission denied for ecc file */
|
||||
|
||||
if(!image->eccFile && image->eccFileState == ECCFILE_NOPERM)
|
||||
{ CloseImage(image);
|
||||
if(Closure->guiMode)
|
||||
{ CreateMessage(_("\nPermission denied on ecc file (perhaps not writeable?).\n"),
|
||||
GTK_MESSAGE_ERROR);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{ Stop(_("\nPermission denied on ecc file (perhaps not writeable?).\n"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Augmented image but unknown ecc method */
|
||||
|
||||
|
||||
2
l-ec.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
1031
locale/cs.po
1068
locale/de.po
1024
locale/it.po
1028
locale/pt_BR.po
1028
locale/ru.po
1102
locale/sv.po
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -78,9 +78,6 @@ static void action_cb(GtkWidget *widget, gpointer data)
|
||||
gtk_entry_set_text(GTK_ENTRY(Closure->imageEntry), Closure->imageName);
|
||||
}
|
||||
|
||||
if(Closure->crcImageName && strcmp(Closure->imageName, Closure->crcImageName))
|
||||
ClearCrcCache();
|
||||
|
||||
g_free(Closure->eccName);
|
||||
Closure->eccName = g_strdup(gtk_entry_get_text(GTK_ENTRY(Closure->eccEntry)));
|
||||
if(Closure->autoSuffix)
|
||||
@@ -130,7 +127,6 @@ static void action_cb(GtkWidget *widget, gpointer data)
|
||||
break;
|
||||
|
||||
case ACTION_READ:
|
||||
ClearCrcCache();
|
||||
AllowActions(FALSE);
|
||||
|
||||
if(Closure->adaptiveRead)
|
||||
@@ -166,8 +162,6 @@ static void action_cb(GtkWidget *widget, gpointer data)
|
||||
case ACTION_FIX:
|
||||
{ Image *image;
|
||||
|
||||
ClearCrcCache();
|
||||
|
||||
image = OpenImageFromFile(Closure->imageName, O_RDWR, IMG_PERMS);
|
||||
image = OpenEccFileForImage(image, Closure->eccName, O_RDWR, IMG_PERMS);
|
||||
if(ReportImageEccInconsistencies(image)) /* abort if no method found */
|
||||
@@ -189,7 +183,6 @@ static void action_cb(GtkWidget *widget, gpointer data)
|
||||
break;
|
||||
|
||||
case ACTION_SCAN:
|
||||
ClearCrcCache();
|
||||
gtk_notebook_set_current_page(GTK_NOTEBOOK(Closure->notebook), 1);
|
||||
Closure->additionalSpiralColor = -1;
|
||||
ResetLinearReadWindow();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -99,7 +99,8 @@ void PrintMediumInfo(void *mi_ptr)
|
||||
image = OpenImageFromDevice(Closure->device);
|
||||
if(!image) return;
|
||||
dh = image->dh;
|
||||
|
||||
QueryBlankCapacity(dh);
|
||||
|
||||
/* Medium properties */
|
||||
|
||||
PrintCLI(_("Physical medium info"));
|
||||
@@ -182,9 +183,8 @@ void PrintMediumInfo(void *mi_ptr)
|
||||
{ EccHeader *eh = image->eccHeader;
|
||||
int major = eh->creatorVersion/10000;
|
||||
int minor = (eh->creatorVersion%10000)/100;
|
||||
int pl = eh->creatorVersion%100;
|
||||
int micro = eh->creatorVersion%100;
|
||||
char method[5];
|
||||
char *format = "%d.%d";
|
||||
|
||||
tab_width=GetLongestTranslation("Error correction data:",
|
||||
"Augmented image size:",
|
||||
@@ -204,17 +204,11 @@ void PrintMediumInfo(void *mi_ptr)
|
||||
PrintCLIorLabel(mi->eccSize, _("%lld sectors (%lld MiB)\n"),
|
||||
image->expectedSectors, image->expectedSectors>>9);
|
||||
|
||||
print_tab("dvdisaster version:", tab_width);
|
||||
|
||||
if(eh->creatorVersion%100)
|
||||
{
|
||||
if(eh->methodFlags[3] & MFLAG_DEVEL)
|
||||
format = "%d.%d (devel-%d)\n";
|
||||
else if(eh->methodFlags[3] & MFLAG_RC)
|
||||
format = "%d.%d (rc-%d)\n";
|
||||
else format = "%d.%d (pl%d)\n";
|
||||
}
|
||||
print_tab("dvdisaster version:",tab_width);
|
||||
PrintCLIorLabel(mi->eccVersion, format, major, minor, pl);
|
||||
if(micro)
|
||||
PrintCLIorLabel(mi->eccVersion, "%d.%d.%d", major, minor, micro);
|
||||
else PrintCLIorLabel(mi->eccVersion, "%d.%d", major, minor);
|
||||
}
|
||||
|
||||
/* Clean up */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
2
method.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
68
misc.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -202,7 +202,7 @@ static void print_greetings(FILE *where)
|
||||
if(greetings_shown) return;
|
||||
|
||||
greetings_shown = 1;
|
||||
g_fprintf(where, "%s\n%s.\n", Closure->versionString, _("Copyright 2004-2015 Carsten Gnoerlich"));
|
||||
g_fprintf(where, "%s\n%s.\n", Closure->versionString, _("Copyright 2004-2017 Carsten Gnoerlich"));
|
||||
/* TRANSLATORS: Excluding all kinds of warranty might be harmful under your
|
||||
legislature. If in doubt, just translate the following like "This is free
|
||||
software; please refer to the conditions of the GNU GENERAL PUBLIC LICENSE
|
||||
@@ -238,14 +238,14 @@ void PrintCLI(char *format, ...)
|
||||
}
|
||||
|
||||
va_start(argp, format);
|
||||
g_vfprintf(stdout, format, argp);
|
||||
g_vprintf(format, argp);
|
||||
va_end(argp);
|
||||
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
/*
|
||||
* Print progress to stderr.
|
||||
* Print progress.
|
||||
* Returns cursor to first character in the line
|
||||
* if the message contains no newlines.
|
||||
* Does nothing in GUI mode.
|
||||
@@ -259,8 +259,11 @@ void PrintProgress(char *format, ...)
|
||||
if(Closure->guiMode)
|
||||
return;
|
||||
|
||||
print_greetings(stderr);
|
||||
print_greetings(stdout);
|
||||
|
||||
if(Closure->noProgress)
|
||||
return;
|
||||
|
||||
va_start(argp, format);
|
||||
g_vsnprintf(msg, 256, format, argp);
|
||||
n = g_utf8_strlen(msg,-1);
|
||||
@@ -273,16 +276,16 @@ void PrintProgress(char *format, ...)
|
||||
Closure->progressLength = n;
|
||||
|
||||
if(strchr(msg, '\n'))
|
||||
g_fprintf(stderr, "%s", msg);
|
||||
g_printf("%s", msg);
|
||||
else
|
||||
{ g_mutex_lock(&Closure->progressLock);
|
||||
Closure->bs[n] = 0;
|
||||
g_fprintf(stderr, "%s%s", msg, Closure->bs);
|
||||
g_printf("%s%s", msg, Closure->bs);
|
||||
Closure->bs[n] = '\b';
|
||||
g_mutex_unlock(&Closure->progressLock);
|
||||
}
|
||||
|
||||
fflush(stderr);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -292,16 +295,19 @@ void PrintProgress(char *format, ...)
|
||||
void ClearProgress(void)
|
||||
{ int n = Closure->progressLength;
|
||||
|
||||
if(Closure->noProgress)
|
||||
return;
|
||||
|
||||
g_mutex_lock(&Closure->progressLock);
|
||||
Closure->bs[n] = Closure->sp[n] = 0;
|
||||
g_fprintf(stderr, "%s%s", Closure->sp, Closure->bs);
|
||||
g_printf("%s%s", Closure->sp, Closure->bs);
|
||||
Closure->bs[n] = '\b';
|
||||
Closure->sp[n] = ' ';
|
||||
g_mutex_unlock(&Closure->progressLock);
|
||||
}
|
||||
|
||||
/*
|
||||
* Print a message to both stderr and the log window
|
||||
* Print a message to both stdout and the log window
|
||||
*/
|
||||
|
||||
void PrintLog(char *format, ...)
|
||||
@@ -319,17 +325,17 @@ void PrintLog(char *format, ...)
|
||||
log_window_vprintf(format, argp);
|
||||
else
|
||||
{
|
||||
print_greetings(stderr);
|
||||
g_vfprintf(stderr, format, argp);
|
||||
print_greetings(stdout);
|
||||
g_vprintf(format, argp);
|
||||
|
||||
fflush(stderr);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
va_end(argp);
|
||||
}
|
||||
|
||||
/*
|
||||
* Print a message to both stderr and the log window,
|
||||
* Print a message to both stdout and the log window,
|
||||
* prepending each line with an asterisk and space.
|
||||
*/
|
||||
|
||||
@@ -368,10 +374,10 @@ void PrintLogWithAsterisks(char *format, ...)
|
||||
log_window_vprintf(new_format, argp);
|
||||
else
|
||||
{
|
||||
print_greetings(stderr);
|
||||
g_vfprintf(stderr, new_format, argp);
|
||||
print_greetings(stdout);
|
||||
g_vprintf(new_format, argp);
|
||||
|
||||
fflush(stderr);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
va_end(argp);
|
||||
@@ -400,10 +406,10 @@ void Verbose(char *format, ...)
|
||||
log_window_vprintf(format, argp);
|
||||
else
|
||||
{
|
||||
print_greetings(stderr);
|
||||
g_vfprintf(stderr, format, argp);
|
||||
print_greetings(stdout);
|
||||
g_vprintf(format, argp);
|
||||
|
||||
fflush(stderr);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
va_end(argp);
|
||||
@@ -422,7 +428,7 @@ void PrintTimeToLog(GTimer *timer, char *format, ...)
|
||||
int hours = (int)(elapsed / 3600.0);
|
||||
char *tmp1,*tmp2;
|
||||
|
||||
if(!Closure->verbose)
|
||||
if(!Closure->verbose || Closure->fixedSpeedValues)
|
||||
return;
|
||||
|
||||
va_start(argp, format);
|
||||
@@ -435,9 +441,9 @@ void PrintTimeToLog(GTimer *timer, char *format, ...)
|
||||
log_window_append(tmp2);
|
||||
}
|
||||
else
|
||||
{ g_fprintf(stderr, "%s", tmp2);
|
||||
{ g_printf("%s", tmp2);
|
||||
|
||||
fflush(stderr);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
g_free(tmp1);
|
||||
@@ -506,7 +512,7 @@ int GetLongestTranslation(char *first, ...)
|
||||
}
|
||||
|
||||
/*
|
||||
* Issue a warning message to stderr and the log
|
||||
* Issue a warning message to stdout and the log
|
||||
*/
|
||||
|
||||
static void vlog_warning(char *format, va_list argp)
|
||||
@@ -545,9 +551,9 @@ static void vlog_warning(char *format, va_list argp)
|
||||
{ log_window_append(str->str);
|
||||
}
|
||||
else
|
||||
{ print_greetings(stderr);
|
||||
g_fprintf(stderr, "%s", str->str);
|
||||
fflush(stderr);
|
||||
{ print_greetings(stdout);
|
||||
g_printf("%s", str->str);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
g_string_free(str, TRUE);
|
||||
@@ -593,12 +599,12 @@ void Stop(char *format, ...)
|
||||
/*** CLI mode */
|
||||
|
||||
if(!Closure->guiMode)
|
||||
{ g_fprintf(stderr, "%s", _("\n*\n* dvdisaster - can not continue:\n*\n"));
|
||||
{ g_printf("%s", _("\n*\n* dvdisaster - can not continue:\n*\n"));
|
||||
va_start(argp, format);
|
||||
g_vfprintf(stderr, format, argp);
|
||||
g_vprintf(format, argp);
|
||||
va_end(argp);
|
||||
g_fprintf(stderr, "\n\n");
|
||||
fflush(stderr);
|
||||
g_printf("\n\n");
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
/*** GUI mode */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -142,7 +142,7 @@ CrcBuf *GetCRCFromRS01_obsolete(EccInfo *ei) /* FIXME: obsolete */
|
||||
gint64 i,j,sec_idx;
|
||||
|
||||
cb->crcbuf = g_malloc(ei->sectors * sizeof(guint32));
|
||||
cb->size = ei->sectors;
|
||||
cb->crcSize = ei->sectors;
|
||||
cb->valid = CreateBitmap0(ei->sectors);
|
||||
buf = cb->crcbuf;
|
||||
|
||||
@@ -197,7 +197,7 @@ CrcBuf *GetCRCFromRS02_obsolete(void *layv, void *dhv, LargeFile *image)
|
||||
image_sectors = lay->eccSectors+lay->dataSectors;
|
||||
|
||||
cb->crcbuf = g_malloc(image_sectors * sizeof(guint32));
|
||||
cb->size = image_sectors;
|
||||
cb->crcSize = image_sectors;
|
||||
cb->valid = CreateBitmap0(image_sectors);
|
||||
|
||||
/* Initialize ecc block index pointers.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -281,7 +281,7 @@ static void update_geometry(void)
|
||||
Closure->readLinearSpiral->mx = a->width - 15 - Closure->readLinearSpiral->diameter / 2;
|
||||
Closure->readLinearSpiral->my = a->height / 2;
|
||||
|
||||
if(Closure->crcAvailable || Closure->crcErrors)
|
||||
if(Closure->crcBuf && Closure->crcBuf->crcCached)
|
||||
{ int w,h;
|
||||
|
||||
SetText(Closure->readLinearCurve->layout, _("Sectors with CRC errors"), &w, &h);
|
||||
@@ -324,7 +324,7 @@ static void redraw_curve(void)
|
||||
DrawSpiralLabel(Closure->readLinearSpiral, Closure->readLinearCurve->layout,
|
||||
_("Successfully read"), Closure->greenSector, x, pos++);
|
||||
|
||||
if(Closure->crcAvailable || Closure->crcErrors)
|
||||
if(Closure->crcBuf && Closure->crcBuf->crcCached)
|
||||
DrawSpiralLabel(Closure->readLinearSpiral, Closure->readLinearCurve->layout,
|
||||
_("Sectors with CRC errors"), Closure->yellowSector, x, pos++);
|
||||
|
||||
|
||||
115
read-linear.c
@@ -1,5 +1,5 @@
|
||||
/* dvdisaster: Additional error correction for optical media.
|
||||
* Copyright (C) 2004-2015 Carsten Gnoerlich.
|
||||
* Copyright (C) 2004-2017 Carsten Gnoerlich.
|
||||
*
|
||||
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
|
||||
* Project homepage: http://www.dvdisaster.org
|
||||
@@ -149,7 +149,6 @@ static void cleanup(gpointer data)
|
||||
if(rc->speedTimer) g_timer_destroy(rc->speedTimer);
|
||||
if(rc->readTimer) g_timer_destroy(rc->readTimer);
|
||||
if(rc->readMap) FreeBitmap(rc->readMap);
|
||||
if(rc->crcBuf) FreeCrcBuf(rc->crcBuf);
|
||||
if(rc->volumeLabel) g_free(rc->volumeLabel);
|
||||
|
||||
if(rc->rendererMutex)
|
||||
@@ -161,9 +160,8 @@ static void cleanup(gpointer data)
|
||||
memset(rc, sizeof(read_closure), 0xff);
|
||||
g_free(rc);
|
||||
|
||||
ClearCrcCache(); /* cache handling is currently broken. Discard the cache! */
|
||||
|
||||
/* Continue with ecc file creation after read */
|
||||
/* Continue with ecc file creation after read.
|
||||
NOTE: Images are NOT automatically augmented after a read. */
|
||||
|
||||
if(Closure->readAndCreate && Closure->guiMode && !scan_mode && !aborted) /* General prerequisites */
|
||||
{ if( !strncmp(Closure->methodName, "RS01", 4) /* codec prerequisites */
|
||||
@@ -182,12 +180,6 @@ static void cleanup(gpointer data)
|
||||
if(Closure->guiMode)
|
||||
AllowActions(TRUE);
|
||||
|
||||
if(!full_read && Closure->crcCache)
|
||||
ClearCrcCache();
|
||||
|
||||
if(scan_mode) /* we haven't created an image, so throw away the crc sums */
|
||||
ClearCrcCache();
|
||||
|
||||
/* In GUI mode both the reader and worker are spawned sub threads;
|
||||
however in CLI mode the reader is the main thread and must not be terminated. */
|
||||
|
||||
@@ -417,31 +409,9 @@ static void fill_gap(read_closure *rc)
|
||||
|
||||
static void prepare_crc_cache(read_closure *rc)
|
||||
{
|
||||
Closure->crcAvailable = FALSE;
|
||||
/*** Memory for the CRC32 sums is needed in two cases: */
|
||||
|
||||
/*** Memory for the CRC32 sums is needed in two cases
|
||||
and comes in two flavors: */
|
||||
|
||||
/* a) A full image read is attempted.
|
||||
The image CRC32 and md5sum are calculated on the fly,
|
||||
as they may be used for ecc creation later.
|
||||
In that case we use the old Closure->crcCache storage. */
|
||||
|
||||
if( !rc->scanMode && !rc->rereading
|
||||
&& rc->firstSector == 0 && rc->lastSector == rc->image->dh->sectors-1)
|
||||
{ if(Closure->crcCache)
|
||||
g_printf("Internal problem: crcCache not clean\n");
|
||||
Closure->crcCache = g_try_malloc(sizeof(guint32) * rc->image->dh->sectors);
|
||||
|
||||
if(Closure->crcCache)
|
||||
Closure->crcImageName = g_strdup(Closure->imageName);
|
||||
|
||||
if(rc->eccMethod && rc->eccMethod->updateCksums && rc->eccMethod->finalizeCksums)
|
||||
rc->doMD5sums = TRUE; /* not all codecs support these actions! */
|
||||
MD5Init(&rc->md5ctxt);
|
||||
}
|
||||
|
||||
/* b) We have suitable ecc data and want to compare CRC32sums
|
||||
/* a) We have suitable ecc data and want to compare CRC32sums
|
||||
against it while reading. Note that for augmented images
|
||||
the checksums may be incomplete due to unreadable CRC sectors,
|
||||
so we keep them in the CrcBuf struct which deals with lost
|
||||
@@ -454,6 +424,9 @@ static void prepare_crc_cache(read_closure *rc)
|
||||
method_name[4] = 0;
|
||||
PrintCLI("%s (%s) ... ",_("Reading CRC information from ecc data"),
|
||||
method_name);
|
||||
|
||||
// FIXME: reuse CrcBuf and write respective message
|
||||
|
||||
if(Closure->guiMode)
|
||||
SetLabelText(GTK_LABEL(Closure->readLinearHeadline),
|
||||
"<big>%s</big>\n<i>%s</i>",
|
||||
@@ -461,16 +434,22 @@ static void prepare_crc_cache(read_closure *rc)
|
||||
rc->image->dh->mediumDescr);
|
||||
|
||||
if(rc->eccMethod->getCrcBuf)
|
||||
{ rc->crcBuf = rc->eccMethod->getCrcBuf(rc->image);
|
||||
Closure->crcAvailable = TRUE;
|
||||
{ Closure->crcBuf = rc->eccMethod->getCrcBuf(rc->image);
|
||||
Closure->crcBuf->crcCached = TRUE;
|
||||
if(Closure->guiMode)
|
||||
RedrawReadLinearWindow();
|
||||
|
||||
/* Augmented image codecs provide the CRCs and md5sums for
|
||||
the data portion, but not for the full image.
|
||||
Request calculation of them from the image. */
|
||||
|
||||
if(Closure->crcBuf->md5State & MD5_BUILDING)
|
||||
rc->doChecksumsFromImage = CRCBUF_UPDATE_MD5 | CRCBUF_UPDATE_CRC_AFTER_DATA;
|
||||
}
|
||||
|
||||
else rc->crcBuf = NULL;
|
||||
else Closure->crcBuf = NULL;
|
||||
|
||||
if(rc->eccMethod->resetCksums)
|
||||
{ rc->doMD5sums = TRUE;
|
||||
{ rc->doChecksumsFromCodec = TRUE; // FIXME - remove?
|
||||
rc->eccMethod->resetCksums(rc->image);
|
||||
}
|
||||
|
||||
@@ -478,7 +457,15 @@ static void prepare_crc_cache(read_closure *rc)
|
||||
SetLabelText(GTK_LABEL(Closure->readLinearHeadline),
|
||||
"<big>%s</big>\n<i>%s</i>", rc->msg, rc->image->dh->mediumDescr);
|
||||
PrintCLI(_("done.\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
/* b) No ecc is available, and a full image read is attempted.
|
||||
The image CRC32 and md5sum are calculated on the fly,
|
||||
as they may be used for ecc creation later. */
|
||||
|
||||
Closure->crcBuf = CreateCrcBuf(rc->image); // FIXME: reuse, delete, ...
|
||||
rc->doChecksumsFromImage = CRCBUF_UPDATE_ALL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -649,7 +636,7 @@ static gpointer worker_thread(read_closure *rc)
|
||||
nsectors = rc->nSectors[rc->writePtr];
|
||||
g_mutex_unlock(rc->mutex);
|
||||
|
||||
/* Write out buffer, update checksums if not in scan mode */
|
||||
/* Write out buffer */
|
||||
|
||||
if(!rc->scanMode)
|
||||
{ int n;
|
||||
@@ -666,33 +653,34 @@ static gpointer worker_thread(read_closure *rc)
|
||||
s, "store", strerror(errno));
|
||||
goto update_mutex;
|
||||
}
|
||||
|
||||
/* On-the-fly CRC calculation */
|
||||
|
||||
if(Closure->crcCache)
|
||||
{ for(i=0; i<nsectors; i++)
|
||||
Closure->crcCache[s+i] = Crc32(rc->alignedBuf[rc->writePtr]->buf+2048*i, 2048);
|
||||
}
|
||||
}
|
||||
|
||||
/* Do on-the-fly CRC / md5sum testing. This is the only action carried out
|
||||
in scan mode, but also done while reading. */
|
||||
|
||||
if(rc->eccMethod && rc->bufState[rc->writePtr] != BUF_DEAD)
|
||||
if(rc->bufState[rc->writePtr] != BUF_DEAD)
|
||||
{
|
||||
for(i=0; i<nsectors; i++)
|
||||
{ unsigned char *buf = rc->alignedBuf[rc->writePtr]->buf+2048*i;
|
||||
gint64 sector = s+i;
|
||||
|
||||
/* Update the global checksum buffer */
|
||||
|
||||
if(rc->doChecksumsFromImage)
|
||||
AddSectorToCrcBuffer(Closure->crcBuf, rc->doChecksumsFromImage, sector, buf, 2048);
|
||||
|
||||
if(!rc->eccMethod) /* Nothing to do when no ecc data available */
|
||||
continue;
|
||||
|
||||
/* Have the codec update its internal checksums */
|
||||
|
||||
if(rc->doMD5sums)
|
||||
if(rc->doChecksumsFromCodec)
|
||||
rc->eccMethod->updateCksums(rc->image, sector, buf);
|
||||
|
||||
/* Check against CRCs in the ecc data */
|
||||
|
||||
if(rc->crcBuf && sector < rc->crcBuf->size)
|
||||
{ switch(CheckAgainstCrcBuffer(rc->crcBuf, sector, buf))
|
||||
if(Closure->crcBuf && sector < Closure->crcBuf->coveredSectors)
|
||||
{ switch(CheckAgainstCrcBuffer(Closure->crcBuf, sector, buf))
|
||||
{ case CRC_BAD:
|
||||
ClearProgress();
|
||||
PrintCLI(_("* CRC error, sector: %lld\n"), (long long int)s+i);
|
||||
@@ -781,7 +769,7 @@ void ReadMediumLinear(gpointer data)
|
||||
|
||||
/*** Open Device and query medium properties:
|
||||
rc->image will point to the optical medium,
|
||||
and possibly the repsective ecc file.
|
||||
and possibly the respective ecc file.
|
||||
The on disk image is maintained in rc->reader|writerImage. */
|
||||
|
||||
rc->image = OpenImageFromDevice(Closure->device);
|
||||
@@ -1017,8 +1005,8 @@ reread:
|
||||
if(err != SECTOR_PRESENT)
|
||||
ExplainMissingSector(sector_buf, rc->readPos+i, err, SOURCE_IMAGE, &unrecoverable_sectors);
|
||||
else
|
||||
{ if(!rc->crcBuf
|
||||
|| CheckAgainstCrcBuffer(rc->crcBuf, rc->readPos+i, sector_buf) != CRC_BAD)
|
||||
{ if(!Closure->crcBuf
|
||||
|| CheckAgainstCrcBuffer(Closure->crcBuf, rc->readPos+i, sector_buf) != CRC_BAD)
|
||||
{ ok++; /* CRC unavailable or good */
|
||||
if(rc->readMap)
|
||||
SetBit(rc->readMap, rc->readPos+i);
|
||||
@@ -1159,9 +1147,11 @@ reread:
|
||||
Do NOT free the CRC cache here to avoid race condition
|
||||
with the worker thread! */
|
||||
|
||||
if(Closure->crcCache)
|
||||
rc->doMD5sums = FALSE;
|
||||
|
||||
if(Closure->crcBuf)
|
||||
{ rc->doChecksumsFromCodec = FALSE;
|
||||
Closure->crcBuf->md5State = MD5_INVALID;
|
||||
}
|
||||
|
||||
/* Determine number of sectors to skip forward.
|
||||
Make sure not to skip past the media end
|
||||
and to land at a multiple of dh->clusterSize. */
|
||||
@@ -1314,11 +1304,8 @@ step_counter:
|
||||
|
||||
/*** Finalize on-the-fly checksum calculation */
|
||||
|
||||
if(rc->doMD5sums && rc->eccMethod)
|
||||
if(rc->doChecksumsFromCodec && rc->eccMethod)
|
||||
md5_failure = rc->eccMethod->finalizeCksums(rc->image);
|
||||
else ClearCrcCache(); /* deferred until here to avoid race condition */
|
||||
|
||||
Verbose("CRC %s.\n", Closure->crcCache ? "cached" : "NOT created");
|
||||
|
||||
/*** Print summary */
|
||||
|
||||
@@ -1414,9 +1401,13 @@ step_counter:
|
||||
|
||||
/*** Close and clean up */
|
||||
|
||||
if(Closure->readErrors || Closure->crcErrors)
|
||||
Closure->crcBuf->md5State = MD5_INVALID;
|
||||
|
||||
rc->unreportedError = FALSE;
|
||||
rc->earlyTermination = FALSE;
|
||||
|
||||
terminate:
|
||||
PrintCrcBuf(Closure->crcBuf);
|
||||
cleanup((gpointer)rc);
|
||||
}
|
||||
|
||||