Compare commits

...

9 Commits

Author SHA1 Message Date
Stéphane Lesimple
1577a7c18d chore: fix github actions for release, again 2023-09-17 19:47:49 +02:00
Stéphane Lesimple
36ef8517fd chore: fix github actions for release 2023-09-17 19:37:42 +02:00
Stéphane Lesimple
64c0361179 release v0.79.10-pl2 2023-09-17 19:22:32 +02:00
Stéphane Lesimple
eeb9f0705d feat: re-introduced MacOS support (#71)
* preparatory changes to make dvdisaster compilable under MacOS
* Implemented workaround to macOS Test Unit Ready bug
* fixed manual.pdf not opening on macOS
* Added case for binary being in app bundle
* updated locale files due to change in closure.c
* added back mac app bundle specific files
* reverted make-dist.sh to windows/linux only version and created separate mac script which uses dylibbundler
* altered release.yml accordingly
* chore: fix build under MacOS

---------

Co-authored-by: Stéphane Lesimple <speed47_github@speed47.net>
Co-authored-by: jlnbxn <julianboxan@gmail.com>
Co-authored-by: wojas <github@m.wojas.nl>
2023-09-17 19:13:47 +02:00
Stéphane Lesimple
f38969c7c8 chore: update github actions to use windows-latest 2023-06-01 10:00:29 +02:00
Stéphane Lesimple
be6970f5df chore: add codeql 2023-06-01 10:00:29 +02:00
Stéphane Lesimple
cb3d628f12 chore: fix regtests under github actions 2022-07-23 15:48:06 +02:00
Stéphane Lesimple
62ec64d18f fix: appimage: issue with glib #60 2022-07-23 15:48:06 +02:00
Stéphane Lesimple
981226eec2 chore: fix bad utf8 encoding 2021-10-10 00:58:30 +02:00
34 changed files with 1224 additions and 801 deletions

62
.github/workflows/codeql.yml vendored Normal file
View File

@@ -0,0 +1,62 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on: [push,pull_request]
jobs:
analyze:
name: Analyze
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'cpp' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Use only 'java' to analyze code written in Java, Kotlin or both
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
- name: Build app
run: |
sudo apt-get update && sudo apt-get install -y libglib2.0-dev ghostscript man jq libgtk2.0-dev
./configure --with-werror
nproc && make -j$(nproc)
env:
DEBIAN_FRONTEND: noninteractive
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:${{matrix.language}}"

View File

@@ -48,4 +48,4 @@ if command -v zip >/dev/null; then
zip -9r $archive ${archive/.zip/}
mv ${archive/.zip/} dist
fi
echo "dist done ($archive)"
echo "dist done ($archive)"

45
.github/workflows/make-mac-app.sh vendored Executable file
View File

@@ -0,0 +1,45 @@
#!/bin/bash
set -e
set -x
github_ref="$1"
archive="dvdisaster-$(echo "$github_ref" | grep -Eo '[^/]+$').dmg"
echo "Archive name is $archive"
echo "::set-output name=archive::$archive"
mkdir dist
# Create directory structure for the macOS application bundle
mkdir -p dvdisaster.app/Contents/{MacOS,Resources}
# Copy the main executable to the appropriate location
cp dvdisaster dvdisaster.app/Contents/MacOS
# Use dylibbundler to bundle dynamic libraries into the application bundle
dylibbundler -od -cd -b -x dvdisaster.app/Contents/MacOS/dvdisaster -d 'dvdisaster.app/Contents/libs/'
# Copy the Info.plist file to define application metadata
cp macinst/Info.plist dvdisaster.app/Contents/
# Create a directory for documentation resources
mkdir dvdisaster.app/Contents/Resources/documentation
# Copy documentation files to the documentation directory
cp CHANGELOG TODO COPYING CREDITS.* documentation/dvdisaster.*.1 documentation/user-manual/manual.pdf dvdisaster.app/Contents/Resources/documentation
# Copy localization files to the locale directory
find locale/* -maxdepth 0 -type d -exec cp -r {} dvdisaster.app/Contents/Resources/locale/ \;
# Copy the application icon to the resources directory
cp macinst/dvdisaster.icns dvdisaster.app/Contents/Resources/
# Make the main executable executable
chmod +x dvdisaster.app/Contents/MacOS/dvdisaster
# Move the application bundle to the 'dist' directory
mv dvdisaster.app dist
create-dmg "$archive" dist
echo "dist done ($archive)"

View File

@@ -5,8 +5,59 @@ on:
types: [published]
jobs:
mac:
runs-on: macos-11
strategy:
matrix:
ui: [cli, gui]
include:
- ui: cli
clionly: --with-gui=no
steps:
- uses: actions/checkout@v2
- name: install prerequisites
env:
HOMEBREW_NO_INSTALL_CLEANUP: 1
run: brew install ghostscript glib gdk-pixbuf dylibbundler create-dmg
- name: install prerequisites (GUI)
if: matrix.ui == 'gui'
env:
HOMEBREW_NO_INSTALL_CLEANUP: 1
run: brew install gtk+
- name: configure
run: |
set +x
./configure ${{ matrix.clionly }} --with-werror
- name: make
run: make -j$(sysctl -n hw.ncpu || 2)
- name: check executability
run: ./dvdisaster --version
- name: check executable (GUI)
if: matrix.ui == 'gui'
run: |
./dvdisaster --version
if ./dvdisaster --version | grep NOGUI; then exit 1; fi
- name: check executable (CLI)
if: matrix.ui == 'cli'
run: |
./dvdisaster --version
./dvdisaster --version | grep NOGUI
- name: build dist
run: ./.github/workflows/make-mac-app.sh ${{ github.ref }}
id: dist
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./${{ steps.dist.outputs.archive }}
asset_name: ${{ steps.dist.outputs.archive }}
asset_content_type: application/zip
win:
runs-on: windows-2016
runs-on: windows-latest
strategy:
matrix:
arch: [x86_64, i686]
@@ -24,119 +75,132 @@ jobs:
run:
shell: msys2 {0}
steps:
- uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msystem }}
update: false
install: git diffutils make pkg-config mingw-w64-${{ matrix.arch }}-glib2 mingw-w64-${{ matrix.arch }}-gcc mingw-w64-${{ matrix.arch }}-ghostscript mingw-w64-${{ matrix.arch }}-ntldd-git man zip
- name: install GUI prereqs
if: matrix.ui == 'gui'
run: pacman -S --noconfirm mingw-w64-${{ matrix.arch }}-gtk2
- name: git config
run: git config --global core.autocrlf input
shell: bash
- uses: actions/checkout@v2
- name: configure
run: ./configure ${{ matrix.clionly }}
- name: make
run: nproc && make -j$(nproc)
- name: check executable
run: |
- uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msystem }}
update: false
install: git diffutils make pkg-config mingw-w64-${{ matrix.arch }}-glib2 mingw-w64-${{ matrix.arch }}-gcc mingw-w64-${{ matrix.arch }}-ghostscript mingw-w64-${{ matrix.arch }}-ntldd-git man zip
- name: install GUI prereqs
if: matrix.ui == 'gui'
run: pacman -S --noconfirm mingw-w64-${{ matrix.arch }}-gtk2
- name: git config
run: git config --global core.autocrlf input
shell: bash
- uses: actions/checkout@v2
- name: configure
run: ./configure ${{ matrix.clionly }}
- name: make
run: nproc && make -j$(nproc)
- name: check executable
run: |
./dvdisaster.exe --version
file dvdisaster.exe
if ./dvdisaster.exe --version | grep dirty; then exit 1; fi
file dvdisaster.exe | grep -q '${{ matrix.grep }}, for MS Windows'
- name: check executable (GUI)
if: matrix.ui == 'gui'
run: if ./dvdisaster.exe --version | grep NOGUI; then exit 1; fi
- name: check executable (CLI)
if: matrix.ui == 'cli'
run: ./dvdisaster.exe --version | grep NOGUI
- name: prepare dist
run: ./.github/workflows/make-dist.sh ${{ github.ref }}
id: dist
- name: check executability of dist from cmd.exe
shell: cmd
run: |
- name: check executable (GUI)
if: matrix.ui == 'gui'
run: if ./dvdisaster.exe --version | grep NOGUI; then exit 1; fi
- name: check executable (CLI)
if: matrix.ui == 'cli'
run: ./dvdisaster.exe --version | grep NOGUI
- name: prepare dist
run: ./.github/workflows/make-dist.sh ${{ github.ref }}
id: dist
- name: check executability of dist from cmd.exe
shell: cmd
run: |
cd dist
dvdisaster.exe --version
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./${{ steps.dist.outputs.archive }}
asset_name: ${{ steps.dist.outputs.archive }}
asset_content_type: application/zip
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./${{ steps.dist.outputs.archive }}
asset_name: ${{ steps.dist.outputs.archive }}
asset_content_type: application/zip
linux64-cli:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install prerequisites
run: sudo apt update && sudo apt install -y libglib2.0-dev ghostscript man
- name: configure
run: ./configure --with-gui=no
- name: make
run: nproc && make -j$(nproc) && make static && mv -f dvdisaster-static dvdisaster
- name: check executable
run: |
./dvdisaster --version && ./dvdisaster --version | grep -q dirty || true
file dvdisaster && file dvdisaster | grep -q 'ELF 64' && file dvdisaster | grep -q 'statically linked'
- uses: actions/checkout@v2
- name: install prerequisites
run: sudo apt update && sudo apt install -y libglib2.0-dev ghostscript man
- name: configure
run: ./configure --with-gui=no
- name: make
run: nproc && make -j$(nproc) && make static && mv -f dvdisaster-static dvdisaster
- name: check executable
run: |
./dvdisaster --version && ./dvdisaster --version | grep -q dirty || true
file dvdisaster && file dvdisaster | grep -q 'ELF 64' && file dvdisaster | grep -q 'statically linked'
- name: build dist
run: ./.github/workflows/make-dist.sh ${{ github.ref }}
id: dist
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./${{ steps.dist.outputs.archive }}
asset_name: ${{ steps.dist.outputs.archive }}
asset_content_type: application/zip
- name: build dist
run: ./.github/workflows/make-dist.sh ${{ github.ref }}
id: dist
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./${{ steps.dist.outputs.archive }}
asset_name: ${{ steps.dist.outputs.archive }}
asset_content_type: application/zip
linux64-appimage:
runs-on: ubuntu-18.04
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: install prerequisites
run: sudo apt update && sudo apt install -y libglib2.0-dev ghostscript man wget libgtk2.0-dev gtk2-engines-pixbuf gtk2-engines pkg-config gnome-themes-standard
- name: configure
run: ./configure --prefix=/usr
- name: make
run: nproc && make -j$(nproc) && make
- name: make install
run: touch documentation/user-manual/manual.pdf && mkdir /tmp/dist && make install DESTDIR=/tmp/dist
- name: copy things to dist
run: |
install -d /tmp/dist/usr/lib/gtk-2.0
cp -va $(pkg-config --variable=libdir gtk+-2.0)/gtk-2.0/$(pkg-config --variable=gtk_binary_version gtk+-2.0)/* /tmp/dist/usr/lib/gtk-2.0
- name: get linuxdeploy
run: wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage && chmod 755 linuxdeploy-x86_64.AppImage
- name: build appimage
run: |
export VERSION=$(echo "${{ github.ref }}" | grep -Eo '[^/]+$')
./linuxdeploy-x86_64.AppImage -d contrib/dvdisaster.desktop -i contrib/dvdisaster64.png -i contrib/dvdisaster48.png -i contrib/dvdisaster32.png -i contrib/dvdisaster16.png --icon-filename dvdisaster --custom-apprun=contrib/AppRun.sh --appdir /tmp/dist/ --output appimage
- name: test appimage
id: dist
run: |
chmod 755 dvdisaster*.AppImage && ./dvdisaster*.AppImage --version
archive=$(ls -1 dvdisaster*.AppImage)
echo "::set-output name=archive::$archive"
echo "appimage is <$archive>"
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./${{ steps.dist.outputs.archive }}
asset_name: ${{ steps.dist.outputs.archive }}
asset_content_type: application/zip
- uses: actions/checkout@v2
- name: docker
run: |
sudo apt-get update && sudo apt-get install fuse
mkdir /tmp/dist
docker run --device /dev/fuse --privileged --name uu -d -v $PWD:/code -v /tmp/dist:/dist ubuntu:14.04 sleep 1800
- name: install prerequisites
run: docker exec uu sh -c 'sudo apt update && sudo apt install -y libglib2.0-dev ghostscript man wget libgtk2.0-dev gtk2-engines-pixbuf gtk2-engines pkg-config gnome-themes-standard'
- name: configure
run: docker exec uu sh -c 'cd /code && ./configure --prefix=/usr'
- name: make
run: docker exec uu sh -c 'make -C /code -j$(nproc) && make -C /code'
- name: make install
run: docker exec uu sh -c 'cd /code && touch documentation/user-manual/manual.pdf && make install DESTDIR=/dist'
- name: copy things to dist
run: docker exec uu sh -c 'install -d /dist/usr/lib/gtk-2.0 && cp -va $(pkg-config --variable=libdir gtk+-2.0)/gtk-2.0/$(pkg-config --variable=gtk_binary_version gtk+-2.0)/* /dist/usr/lib/gtk-2.0'
- name: build appimage
run: |
wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
chmod 755 linuxdeploy-x86_64.AppImage
export VERSION=$(echo "${{ github.ref }}" | grep -Eo '[^/]+$')
./linuxdeploy-x86_64.AppImage -d contrib/dvdisaster.desktop -i contrib/dvdisaster64.png -i contrib/dvdisaster48.png -i contrib/dvdisaster32.png -i contrib/dvdisaster16.png --icon-filename dvdisaster --custom-apprun=contrib/AppRun.sh --appdir /tmp/dist/ --output appimage
- name: apply glib workaround
run: |
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
chmod 755 appimagetool-x86_64.AppImage
exe=$(ls -1 dvdisaster*.AppImage)
chmod 755 $exe
./$exe --appimage-extract
rm -vf $exe
./appimagetool-x86_64.AppImage -v squashfs-root
mv -v dvdisaster*AppImage $exe
chmod 755 $exe
- name: test appimage
id: dist
run: |
chmod 755 dvdisaster*.AppImage && ./dvdisaster*.AppImage --version
archive=$(ls -1 dvdisaster*.AppImage)
echo "::set-output name=archive::$archive"
echo "appimage is <$archive>"
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./${{ steps.dist.outputs.archive }}
asset_name: ${{ steps.dist.outputs.archive }}
asset_content_type: application/zip

View File

@@ -3,8 +3,55 @@ name: non-regression tests
on: [pull_request]
jobs:
mac:
runs-on: macos-latest
strategy:
matrix:
ui: [cli, gui]
printf: [fmtdbg, normal]
include:
- ui: cli
clionly: --with-gui=no
- printf: fmtdbg
debugprintf: --with-debug-printf-format
steps:
- uses: actions/checkout@v2
- name: install prerequisites
env:
HOMEBREW_NO_INSTALL_CLEANUP: 1
run: brew install ghostscript
- name: install prerequisites (GUI)
if: matrix.ui == 'gui'
env:
HOMEBREW_NO_INSTALL_CLEANUP: 1
run: brew install gtk+
- name: configure
run: |
set +x
./configure ${{ matrix.clionly }} ${{ matrix.debugprintf }} --with-werror
- name: make
run: make -j$(sysctl -n hw.ncpu || 2)
- name: check executability
run: ./dvdisaster --version
- name: check executable (GUI)
if: matrix.ui == 'gui'
run: |
./dvdisaster --version
if ./dvdisaster --version | grep NOGUI; then exit 1; fi
- name: check executable (CLI)
if: matrix.ui == 'cli'
run: |
./dvdisaster --version
./dvdisaster --version | grep NOGUI
- name: prepare dist
run: ./.github/workflows/make-dist.sh ${{ github.ref }}
- name: regression tests
if: matrix.printf == 'normal'
env:
REGTEST_NO_UTF8: 1
run: mkdir /var/tmp/regtest && ./regtest/runtests.sh
win:
runs-on: windows-2016
runs-on: windows-latest
strategy:
matrix:
arch: [x86_64, i686]

View File

@@ -20,6 +20,9 @@
# You should have received a copy of the GNU General Public License
# along with dvdisaster. If not, see <http://www.gnu.org/licenses/>.
0.79.10.patchlevel-2 17-09-2023 *UNOFFICIAL*
- re-introduced MacOS build. No other functional change since v0.79.10-pl1.
0.79.10.patchlevel-1 09-10-2021 *UNOFFICIAL*
- sync: integrated changes from latest upstream,
please refer to the entries below for details.

2
TODO
View File

@@ -8,7 +8,7 @@ Versions 0.79.x: development releases
work in progress (this release):
- split GUI code from core source to allow for command-line only build (done)
- merge patches from St<EFBFBD>phane Lesimple (done) and Debian (done)
- merge patches from Stéphane Lesimple (done) and Debian (done)
upcoming (next stable release):

14
configure vendored
View File

@@ -40,14 +40,19 @@ fi
# Set the package name and version
PACKAGE dvdisaster 0.79.10
DEFINE_INT PATCHLEVEL 1
DEFINE_INT PATCHLEVEL 2
DEFINE_STRING HAVE_UNSTABLE_RELEASE 1
DEFINE_STRING HOMEPAGE "https://dvdisaster.jcea.es"
# Check for some essential tools.
REQUIRE_GMAKE
REQUIRE_GCC
if [[ $(uname) =~ Darwin ]]; then
REQUIRE_CLANG
else
REQUIRE_GCC
fi
# Find out and verify the basedir of the source installation,
# and where to install the binary.
@@ -122,6 +127,11 @@ CFG_CFLAGS="$CFG_CFLAGS -D_LARGEFILE64_SOURCE"
CHECK_SYMBOL fcntl.h O_LARGEFILE
CFG_CFLAGS=$SAVE_CFLAGS
if [[ $(uname) =~ Darwin ]]; then
CFG_CFLAGS="$CFG_CFLAGS -Wno-void-pointer-to-int-cast"
CFG_LDFLAGS="$CFG_LDFLAGS -framework CoreFoundation -framework IOKit"
fi
# Machine specific
echo

Binary file not shown.

View File

@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dvdisaster 0.79\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-10-09 17:07+0200\n"
"POT-Creation-Date: 2023-09-17 19:21+0200\n"
"PO-Revision-Date: 2011-07-24 21:12+0100\n"
"Last-Translator: Jindřich Šesták <khagaroth@users.sourceforge.net>\n"
"Language-Team: none (individual translator)\n"
@@ -22,7 +22,7 @@ msgstr ""
"X-Poedit-Basepath: d:\\Preklady\\dvdisaster\\cvs\n"
"X-Poedit-SearchPath-0: dvdisaster\n"
#: src/closure.c:296
#: src/closure.c:343
#, c-format
msgid ""
"# dvdisaster-%s configuration file\n"
@@ -35,15 +35,15 @@ msgstr ""
"# každém spuštění programu.\n"
"\n"
#: src/closure.c:564
#: src/closure.c:648
msgid "medium.iso"
msgstr "disc.iso"
#: src/closure.c:565
#: src/closure.c:649
msgid "medium.ecc"
msgstr "disc.ecc"
#: src/closure.c:566
#: src/closure.c:650
msgid "sector-"
msgstr "sektor-"
@@ -890,7 +890,7 @@ msgstr ""
"<big>GNU General Public License</big>\n"
"<i>Licenční podmínky aplikace dvdisaster.</i>"
#: src/help-dialogs.c:515
#: src/help-dialogs.c:503
#, c-format
msgid ""
"File\n"
@@ -901,7 +901,7 @@ msgstr ""
"%s\n"
"neexistuje"
#: src/help-dialogs.c:525
#: src/help-dialogs.c:513
#, c-format
msgid ""
"File\n"
@@ -912,7 +912,7 @@ msgstr ""
"%s\n"
"není dostupný"
#: src/help-dialogs.c:537
#: src/help-dialogs.c:525
msgid ""
"\n"
"<- Error: Text file truncated here"
@@ -920,17 +920,17 @@ msgstr ""
"\n"
"<- Chyba: Textový soubor byl zkrácen"
#: src/help-dialogs.c:736
#: src/help-dialogs.c:724
msgid "windowtitle|About dvdisaster"
msgstr "O aplikaci dvdisaster"
#: src/help-dialogs.c:755 src/misc.c:219
#: src/help-dialogs.c:743 src/misc.c:219
msgid ""
"Copyright 2004-2017 Carsten Gnoerlich.\n"
"Copyright 2019-2021 The dvdisaster development team."
msgstr ""
#: src/help-dialogs.c:763
#: src/help-dialogs.c:751
msgid ""
"dvdisaster provides a margin of safety against data loss\n"
"on optical media caused by aging or scratches.\n"
@@ -942,7 +942,7 @@ msgstr ""
"Vytvoří data pro opravu chyb, která je možné použít k obnovení\n"
"nečitelných sektorů, pokud později dojde k poškození disku.\n"
#: src/help-dialogs.c:768
#: src/help-dialogs.c:756
msgid ""
"This software comes with <b>absolutely no warranty</b>.\n"
"This is free software and you are welcome to redistribute it\n"
@@ -952,13 +952,13 @@ msgstr ""
"Jde o svobodný software a můžete jej šířit za dodržení\n"
"podmínek [GNU General Public License].\n"
#: src/help-dialogs.c:773
#: src/help-dialogs.c:761
msgid ""
"\n"
"e-mail: support@dvdisaster.org"
msgstr ""
#: src/help-dialogs.c:779
#: src/help-dialogs.c:767
msgid ""
"\n"
"This version is <b>not the original</b>. It has been patched\n"
@@ -969,7 +969,7 @@ msgid ""
"but submit bugreports against [GitHub] instead.\n"
msgstr ""
#: src/help-dialogs.c:787
#: src/help-dialogs.c:775
msgid ""
"\n"
"NetBSD port: Sergey Svishchev &lt;svs@ropnet.ru&gt;"
@@ -2854,9 +2854,9 @@ msgid "button|Smart L-EC"
msgstr "Chytré L-EC"
#: src/raw-sector-cache.c:37 src/raw-sector-cache.c:204
#: src/raw-sector-cache.c:338 src/scsi-freebsd.c:133 src/scsi-freebsd.c:143
#: src/scsi-linux.c:117 src/scsi-linux.c:126 src/scsi-netbsd.c:128
#: src/scsi-netbsd.c:138 src/scsi-win32.c:256
#: src/raw-sector-cache.c:338 src/scsi-darwin.c:218 src/scsi-freebsd.c:133
#: src/scsi-freebsd.c:143 src/scsi-linux.c:117 src/scsi-linux.c:126
#: src/scsi-netbsd.c:128 src/scsi-netbsd.c:138 src/scsi-win32.c:256
#, c-format
msgid "Could not open %s: %s"
msgstr "Nepodařilo se otevřít %s: %s"
@@ -5812,6 +5812,15 @@ msgstr "<b>Výkon:</b>"
msgid "<b>State:</b>"
msgstr "<b>Stav:</b>"
#: src/scsi-darwin.c:183
msgid "No CD/DVD drives found."
msgstr "Nebyly nalezeny žádné CD/DVD mechaniky."
#: src/scsi-darwin.c:229
#, c-format
msgid "Could not open %s (%s)."
msgstr ""
#: src/scsi-freebsd.c:49 src/scsi-linux.c:53
msgid ""
"Can not access /dev for devices\n"
@@ -6236,15 +6245,19 @@ msgid ""
"not found.\n"
msgstr ""
#: src/show-manual.c:114
#: src/show-manual.c:118
msgid "Could not create pipe before fork"
msgstr ""
#: src/show-manual.c:122
#: src/show-manual.c:123 src/show-manual.c:128
msgid "Could not set pipe flags before fork"
msgstr ""
#: src/show-manual.c:136
msgid "Could not fork to start xdg-open"
msgstr ""
#: src/show-manual.c:145
#: src/show-manual.c:159
#, c-format
msgid ""
"execvp could not execute \"xdg-open\":\n"
@@ -6262,8 +6275,8 @@ msgstr "Vzorový disk"
#: src/welcome-window.c:84
msgid ""
"This is <b>v0.79.10-pl1</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, a Windows build, an option to produce bigger BD-R RS03,\n"
"This is <b>v0.79.10-pl2</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, Windows and MacOS builds, an option to produce bigger BD-R RS03,\n"
"images, support for stripping ECC from ISOs, re-enabled adaptive reading (except for RS03), and more.\n"
"\n"
"Please refer to the <i>Help &gt; Change log</i> menu for all the details."
@@ -7379,9 +7392,6 @@ msgstr "<i>Novinky v této verzi:</i>"
#~ "\n"
#~ "Port pro Darwin (Mac OS X): Julian Einwag &lt;julian@einwag.de&gt;"
#~ msgid "No CD/DVD drives found."
#~ msgstr "Nebyly nalezeny žádné CD/DVD mechaniky."
#~ msgid "dvdisaster-%s log\n"
#~ msgstr "záznam programu dvdisaster-%s\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dvdisaster 0.52.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-10-09 17:07+0200\n"
"POT-Creation-Date: 2023-09-17 19:21+0200\n"
"PO-Revision-Date: 2004-11-30 19:48+0100\n"
"Last-Translator: Carsten Gnörlich <carsten@dvdisaster.de>\n"
"Language-Team: German <de@li.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/closure.c:296
#: src/closure.c:343
#, c-format
msgid ""
"# dvdisaster-%s configuration file\n"
@@ -31,15 +31,15 @@ msgstr ""
"# Sie wird bei jedem Aufruf von dvdisaster neu überschrieben.\n"
"\n"
#: src/closure.c:564
#: src/closure.c:648
msgid "medium.iso"
msgstr "abbild.iso"
#: src/closure.c:565
#: src/closure.c:649
msgid "medium.ecc"
msgstr "abbild.ecc"
#: src/closure.c:566
#: src/closure.c:650
msgid "sector-"
msgstr "sektor_"
@@ -933,7 +933,7 @@ msgstr ""
"<big>GNU General Public License</big>\n"
"<i>Die Lizenzbedingungen von dvdisaster.</i>"
#: src/help-dialogs.c:515
#: src/help-dialogs.c:503
#, c-format
msgid ""
"File\n"
@@ -944,7 +944,7 @@ msgstr ""
"%s\n"
"nicht vorhanden"
#: src/help-dialogs.c:525
#: src/help-dialogs.c:513
#, c-format
msgid ""
"File\n"
@@ -955,7 +955,7 @@ msgstr ""
"%s\n"
"kann nicht zugegriffen werden"
#: src/help-dialogs.c:537
#: src/help-dialogs.c:525
msgid ""
"\n"
"<- Error: Text file truncated here"
@@ -963,17 +963,17 @@ msgstr ""
"\n"
"<- Fehler: Textdatei wurde hier abgeschnitten"
#: src/help-dialogs.c:736
#: src/help-dialogs.c:724
msgid "windowtitle|About dvdisaster"
msgstr "Kurzinformation"
#: src/help-dialogs.c:755 src/misc.c:219
#: src/help-dialogs.c:743 src/misc.c:219
msgid ""
"Copyright 2004-2017 Carsten Gnoerlich.\n"
"Copyright 2019-2021 The dvdisaster development team."
msgstr ""
#: src/help-dialogs.c:763
#: src/help-dialogs.c:751
msgid ""
"dvdisaster provides a margin of safety against data loss\n"
"on optical media caused by aging or scratches.\n"
@@ -985,7 +985,7 @@ msgstr ""
"Es erzeugt Fehlerkorrektur-Daten, um bei nachfolgenden Datenträger-\n"
"Problemen unlesbare Sektoren zu rekonstruieren.\n"
#: src/help-dialogs.c:768
#: src/help-dialogs.c:756
msgid ""
"This software comes with <b>absolutely no warranty</b>.\n"
"This is free software and you are welcome to redistribute it\n"
@@ -994,13 +994,13 @@ msgstr ""
"dvdisaster ist <b>freie Software</b>; es gelten die Bedingungen\n"
"der [GNU General Public License] .\n"
#: src/help-dialogs.c:773
#: src/help-dialogs.c:761
msgid ""
"\n"
"e-mail: support@dvdisaster.org"
msgstr ""
#: src/help-dialogs.c:779
#: src/help-dialogs.c:767
msgid ""
"\n"
"This version is <b>not the original</b>. It has been patched\n"
@@ -1011,7 +1011,7 @@ msgid ""
"but submit bugreports against [GitHub] instead.\n"
msgstr ""
#: src/help-dialogs.c:787
#: src/help-dialogs.c:775
msgid ""
"\n"
"NetBSD port: Sergey Svishchev &lt;svs@ropnet.ru&gt;"
@@ -2915,9 +2915,9 @@ msgid "button|Smart L-EC"
msgstr "Smart L-EC"
#: src/raw-sector-cache.c:37 src/raw-sector-cache.c:204
#: src/raw-sector-cache.c:338 src/scsi-freebsd.c:133 src/scsi-freebsd.c:143
#: src/scsi-linux.c:117 src/scsi-linux.c:126 src/scsi-netbsd.c:128
#: src/scsi-netbsd.c:138 src/scsi-win32.c:256
#: src/raw-sector-cache.c:338 src/scsi-darwin.c:218 src/scsi-freebsd.c:133
#: src/scsi-freebsd.c:143 src/scsi-linux.c:117 src/scsi-linux.c:126
#: src/scsi-netbsd.c:128 src/scsi-netbsd.c:138 src/scsi-win32.c:256
#, c-format
msgid "Could not open %s: %s"
msgstr "Konnte %s nicht öffnen: %s"
@@ -5927,6 +5927,15 @@ msgstr "<b>Leistung:</b>"
msgid "<b>State:</b>"
msgstr "<b>Zustand:</b>"
#: src/scsi-darwin.c:183
msgid "No CD/DVD drives found."
msgstr ""
#: src/scsi-darwin.c:229
#, c-format
msgid "Could not open %s (%s)."
msgstr ""
#: src/scsi-freebsd.c:49 src/scsi-linux.c:53
msgid ""
"Can not access /dev for devices\n"
@@ -6361,15 +6370,19 @@ msgid ""
"not found.\n"
msgstr ""
#: src/show-manual.c:114
#: src/show-manual.c:118
msgid "Could not create pipe before fork"
msgstr ""
#: src/show-manual.c:122
#: src/show-manual.c:123 src/show-manual.c:128
msgid "Could not set pipe flags before fork"
msgstr ""
#: src/show-manual.c:136
msgid "Could not fork to start xdg-open"
msgstr ""
#: src/show-manual.c:145
#: src/show-manual.c:159
#, c-format
msgid ""
"execvp could not execute \"xdg-open\":\n"
@@ -6387,8 +6400,8 @@ msgstr "Beispiel-Datenträger"
#: src/welcome-window.c:84
msgid ""
"This is <b>v0.79.10-pl1</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, a Windows build, an option to produce bigger BD-R RS03,\n"
"This is <b>v0.79.10-pl2</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, Windows and MacOS builds, an option to produce bigger BD-R RS03,\n"
"images, support for stripping ECC from ISOs, re-enabled adaptive reading (except for RS03), and more.\n"
"\n"
"Please refer to the <i>Help &gt; Change log</i> menu for all the details."

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dvdisaster 0.52.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-10-09 17:07+0200\n"
"POT-Creation-Date: 2023-09-17 19:21+0200\n"
"PO-Revision-Date: 2005-01-01 14:24+0100\n"
"Last-Translator: Andrea Polverini <polve@polve.com>\n"
"Language-Team: Italian <>\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/closure.c:296
#: src/closure.c:343
#, c-format
msgid ""
"# dvdisaster-%s configuration file\n"
@@ -31,15 +31,15 @@ msgstr ""
"# e sarà sovrascritto ogni volta che verrà eseguito dvdisaster\n"
"\n"
#: src/closure.c:564
#: src/closure.c:648
msgid "medium.iso"
msgstr ""
#: src/closure.c:565
#: src/closure.c:649
msgid "medium.ecc"
msgstr ""
#: src/closure.c:566
#: src/closure.c:650
msgid "sector-"
msgstr ""
@@ -855,7 +855,7 @@ msgstr ""
"<big>Licenza pubblica GNU</big>\n"
"<i>Termini di Licenza di dvdisaster.</i>"
#: src/help-dialogs.c:515
#: src/help-dialogs.c:503
#, c-format
msgid ""
"File\n"
@@ -866,7 +866,7 @@ msgstr ""
"%s\n"
"non presente"
#: src/help-dialogs.c:525
#: src/help-dialogs.c:513
#, c-format
msgid ""
"File\n"
@@ -874,23 +874,23 @@ msgid ""
"not accessible"
msgstr ""
#: src/help-dialogs.c:537
#: src/help-dialogs.c:525
msgid ""
"\n"
"<- Error: Text file truncated here"
msgstr ""
#: src/help-dialogs.c:736
#: src/help-dialogs.c:724
msgid "windowtitle|About dvdisaster"
msgstr "Info su dvdisaster"
#: src/help-dialogs.c:755 src/misc.c:219
#: src/help-dialogs.c:743 src/misc.c:219
msgid ""
"Copyright 2004-2017 Carsten Gnoerlich.\n"
"Copyright 2019-2021 The dvdisaster development team."
msgstr ""
#: src/help-dialogs.c:763
#: src/help-dialogs.c:751
msgid ""
"dvdisaster provides a margin of safety against data loss\n"
"on optical media caused by aging or scratches.\n"
@@ -902,7 +902,7 @@ msgstr ""
"Crea dei dati di correzione degli errori che saranno poi utilizzati per recuperare\n"
"i settori illeggibili se il supporto dovesse danneggiarsi col tempo.\n"
#: src/help-dialogs.c:768
#: src/help-dialogs.c:756
msgid ""
"This software comes with <b>absolutely no warranty</b>.\n"
"This is free software and you are welcome to redistribute it\n"
@@ -914,13 +914,13 @@ msgstr ""
"\n"
"Traduzione italiana di Andrea Polverini (info@polve.com).\n"
#: src/help-dialogs.c:773
#: src/help-dialogs.c:761
msgid ""
"\n"
"e-mail: support@dvdisaster.org"
msgstr ""
#: src/help-dialogs.c:779
#: src/help-dialogs.c:767
msgid ""
"\n"
"This version is <b>not the original</b>. It has been patched\n"
@@ -931,7 +931,7 @@ msgid ""
"but submit bugreports against [GitHub] instead.\n"
msgstr ""
#: src/help-dialogs.c:787
#: src/help-dialogs.c:775
msgid ""
"\n"
"NetBSD port: Sergey Svishchev &lt;svs@ropnet.ru&gt;"
@@ -2600,9 +2600,9 @@ msgid "button|Smart L-EC"
msgstr ""
#: src/raw-sector-cache.c:37 src/raw-sector-cache.c:204
#: src/raw-sector-cache.c:338 src/scsi-freebsd.c:133 src/scsi-freebsd.c:143
#: src/scsi-linux.c:117 src/scsi-linux.c:126 src/scsi-netbsd.c:128
#: src/scsi-netbsd.c:138 src/scsi-win32.c:256
#: src/raw-sector-cache.c:338 src/scsi-darwin.c:218 src/scsi-freebsd.c:133
#: src/scsi-freebsd.c:143 src/scsi-linux.c:117 src/scsi-linux.c:126
#: src/scsi-netbsd.c:128 src/scsi-netbsd.c:138 src/scsi-win32.c:256
#, c-format
msgid "Could not open %s: %s"
msgstr "Non posso aprire %s: %s"
@@ -5397,6 +5397,15 @@ msgstr ""
msgid "<b>State:</b>"
msgstr ""
#: src/scsi-darwin.c:183
msgid "No CD/DVD drives found."
msgstr "Nessun CD/DVD drive trovato."
#: src/scsi-darwin.c:229
#, c-format
msgid "Could not open %s (%s)."
msgstr ""
#: src/scsi-freebsd.c:49 src/scsi-linux.c:53
msgid ""
"Can not access /dev for devices\n"
@@ -5812,15 +5821,19 @@ msgid ""
"not found.\n"
msgstr ""
#: src/show-manual.c:114
#: src/show-manual.c:118
msgid "Could not create pipe before fork"
msgstr ""
#: src/show-manual.c:122
#: src/show-manual.c:123 src/show-manual.c:128
msgid "Could not set pipe flags before fork"
msgstr ""
#: src/show-manual.c:136
msgid "Could not fork to start xdg-open"
msgstr ""
#: src/show-manual.c:145
#: src/show-manual.c:159
#, c-format
msgid ""
"execvp could not execute \"xdg-open\":\n"
@@ -5838,8 +5851,8 @@ msgstr ""
#: src/welcome-window.c:84
msgid ""
"This is <b>v0.79.10-pl1</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, a Windows build, an option to produce bigger BD-R RS03,\n"
"This is <b>v0.79.10-pl2</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, Windows and MacOS builds, an option to produce bigger BD-R RS03,\n"
"images, support for stripping ECC from ISOs, re-enabled adaptive reading (except for RS03), and more.\n"
"\n"
"Please refer to the <i>Help &gt; Change log</i> menu for all the details."
@@ -6330,9 +6343,6 @@ msgstr ""
#~ "Nessun CD/DVD drive trovato in /dev.\n"
#~ "Nessun drive sarà preselezionato.\n"
#~ msgid "No CD/DVD drives found."
#~ msgstr "Nessun CD/DVD drive trovato."
#~ msgid "dvdisaster-%s log\n"
#~ msgstr "dvdisaster-%s protocollo\n"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dvdisaster 0.72.rc2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-10-09 17:07+0200\n"
"POT-Creation-Date: 2023-09-17 19:21+0200\n"
"PO-Revision-Date: 2010-06-09 11:13+0200\n"
"Last-Translator: cg <cg@dvdisaster.org>\n"
"Language-Team: Portuguese\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/closure.c:296
#: src/closure.c:343
#, c-format
msgid ""
"# dvdisaster-%s configuration file\n"
@@ -30,15 +30,15 @@ msgstr ""
"# que será sobreescrevido toda vez que o dvdisaster rodar.\n"
"\n"
#: src/closure.c:564
#: src/closure.c:648
msgid "medium.iso"
msgstr "midia.iso"
#: src/closure.c:565
#: src/closure.c:649
msgid "medium.ecc"
msgstr "midia.ecc"
#: src/closure.c:566
#: src/closure.c:650
msgid "sector-"
msgstr "setor-"
@@ -871,7 +871,7 @@ msgstr ""
"<big>Licença Pública Geral GNU</big>\n"
"<i>Os termos de licença do dvdisaster.</i>"
#: src/help-dialogs.c:515
#: src/help-dialogs.c:503
#, c-format
msgid ""
"File\n"
@@ -882,7 +882,7 @@ msgstr ""
"%s\n"
"não presente"
#: src/help-dialogs.c:525
#: src/help-dialogs.c:513
#, c-format
msgid ""
"File\n"
@@ -890,23 +890,23 @@ msgid ""
"not accessible"
msgstr ""
#: src/help-dialogs.c:537
#: src/help-dialogs.c:525
msgid ""
"\n"
"<- Error: Text file truncated here"
msgstr ""
#: src/help-dialogs.c:736
#: src/help-dialogs.c:724
msgid "windowtitle|About dvdisaster"
msgstr "windowtitle|Sobre o dvdisaster"
#: src/help-dialogs.c:755 src/misc.c:219
#: src/help-dialogs.c:743 src/misc.c:219
msgid ""
"Copyright 2004-2017 Carsten Gnoerlich.\n"
"Copyright 2019-2021 The dvdisaster development team."
msgstr ""
#: src/help-dialogs.c:763
#: src/help-dialogs.c:751
msgid ""
"dvdisaster provides a margin of safety against data loss\n"
"on optical media caused by aging or scratches.\n"
@@ -918,7 +918,7 @@ msgstr ""
"Ele cria dados de correção de erros que são usados para recuperar\n"
"setores ilegíveis se o disco ficar danificado posteriormente.\n"
#: src/help-dialogs.c:768
#: src/help-dialogs.c:756
msgid ""
"This software comes with <b>absolutely no warranty</b>.\n"
"This is free software and you are welcome to redistribute it\n"
@@ -930,13 +930,13 @@ msgstr ""
"\n"
"Tradução para português por Pablo Almeida (pabloalmeidaff9@gmail.com)\n"
#: src/help-dialogs.c:773
#: src/help-dialogs.c:761
msgid ""
"\n"
"e-mail: support@dvdisaster.org"
msgstr ""
#: src/help-dialogs.c:779
#: src/help-dialogs.c:767
msgid ""
"\n"
"This version is <b>not the original</b>. It has been patched\n"
@@ -947,7 +947,7 @@ msgid ""
"but submit bugreports against [GitHub] instead.\n"
msgstr ""
#: src/help-dialogs.c:787
#: src/help-dialogs.c:775
msgid ""
"\n"
"NetBSD port: Sergey Svishchev &lt;svs@ropnet.ru&gt;"
@@ -2780,9 +2780,9 @@ msgid "button|Smart L-EC"
msgstr "Smart L-EC"
#: src/raw-sector-cache.c:37 src/raw-sector-cache.c:204
#: src/raw-sector-cache.c:338 src/scsi-freebsd.c:133 src/scsi-freebsd.c:143
#: src/scsi-linux.c:117 src/scsi-linux.c:126 src/scsi-netbsd.c:128
#: src/scsi-netbsd.c:138 src/scsi-win32.c:256
#: src/raw-sector-cache.c:338 src/scsi-darwin.c:218 src/scsi-freebsd.c:133
#: src/scsi-freebsd.c:143 src/scsi-linux.c:117 src/scsi-linux.c:126
#: src/scsi-netbsd.c:128 src/scsi-netbsd.c:138 src/scsi-win32.c:256
#, c-format
msgid "Could not open %s: %s"
msgstr "Impossível abrir %s: %s"
@@ -5695,6 +5695,15 @@ msgstr ""
msgid "<b>State:</b>"
msgstr ""
#: src/scsi-darwin.c:183
msgid "No CD/DVD drives found."
msgstr "Nenhum drive de CD/DVD encontrado."
#: src/scsi-darwin.c:229
#, c-format
msgid "Could not open %s (%s)."
msgstr ""
#: src/scsi-freebsd.c:49 src/scsi-linux.c:53
msgid ""
"Can not access /dev for devices\n"
@@ -6116,15 +6125,19 @@ msgid ""
"not found.\n"
msgstr ""
#: src/show-manual.c:114
#: src/show-manual.c:118
msgid "Could not create pipe before fork"
msgstr ""
#: src/show-manual.c:122
#: src/show-manual.c:123 src/show-manual.c:128
msgid "Could not set pipe flags before fork"
msgstr ""
#: src/show-manual.c:136
msgid "Could not fork to start xdg-open"
msgstr ""
#: src/show-manual.c:145
#: src/show-manual.c:159
#, c-format
msgid ""
"execvp could not execute \"xdg-open\":\n"
@@ -6142,8 +6155,8 @@ msgstr "Disco de exemplo"
#: src/welcome-window.c:84
msgid ""
"This is <b>v0.79.10-pl1</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, a Windows build, an option to produce bigger BD-R RS03,\n"
"This is <b>v0.79.10-pl2</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, Windows and MacOS builds, an option to produce bigger BD-R RS03,\n"
"images, support for stripping ECC from ISOs, re-enabled adaptive reading (except for RS03), and more.\n"
"\n"
"Please refer to the <i>Help &gt; Change log</i> menu for all the details."
@@ -6987,9 +7000,6 @@ msgstr "<i>Novidades dessa versão:</i>"
#~ "\n"
#~ "Darwin port (Mac OS X) por: Julian Einwag &lt;julian@einwag.de&gt;"
#~ msgid "No CD/DVD drives found."
#~ msgstr "Nenhum drive de CD/DVD encontrado."
#~ msgid "dvdisaster-%s log\n"
#~ msgstr "dvdisaster-%s log\n"

View File

@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dvdisaster 0.70.4\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-10-09 17:07+0200\n"
"POT-Creation-Date: 2023-09-17 19:21+0200\n"
"PO-Revision-Date: 2009-07-23 08:11+0300\n"
"Last-Translator: Igor Gorbounov <igor.gorbounov@gmail.com>\n"
"Language-Team: Russian\n"
@@ -19,7 +19,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: src/closure.c:296
#: src/closure.c:343
#, c-format
msgid ""
"# dvdisaster-%s configuration file\n"
@@ -32,15 +32,15 @@ msgstr ""
"# он автоматически перезаписывается при каждом запуске программы.\n"
"\n"
#: src/closure.c:564
#: src/closure.c:648
msgid "medium.iso"
msgstr "medium.iso"
#: src/closure.c:565
#: src/closure.c:649
msgid "medium.ecc"
msgstr "medium.ecc"
#: src/closure.c:566
#: src/closure.c:650
msgid "sector-"
msgstr "сектор-"
@@ -872,7 +872,7 @@ msgstr ""
"<big>GNU General Public License</big>\n"
"<i>Лицензионные условия dvdisaster'а.</i>"
#: src/help-dialogs.c:515
#: src/help-dialogs.c:503
#, c-format
msgid ""
"File\n"
@@ -883,7 +883,7 @@ msgstr ""
"%s\n"
"отсутствует"
#: src/help-dialogs.c:525
#: src/help-dialogs.c:513
#, c-format
msgid ""
"File\n"
@@ -891,23 +891,23 @@ msgid ""
"not accessible"
msgstr ""
#: src/help-dialogs.c:537
#: src/help-dialogs.c:525
msgid ""
"\n"
"<- Error: Text file truncated here"
msgstr ""
#: src/help-dialogs.c:736
#: src/help-dialogs.c:724
msgid "windowtitle|About dvdisaster"
msgstr "О программе dvdisaster"
#: src/help-dialogs.c:755 src/misc.c:219
#: src/help-dialogs.c:743 src/misc.c:219
msgid ""
"Copyright 2004-2017 Carsten Gnoerlich.\n"
"Copyright 2019-2021 The dvdisaster development team."
msgstr ""
#: src/help-dialogs.c:763
#: src/help-dialogs.c:751
msgid ""
"dvdisaster provides a margin of safety against data loss\n"
"on optical media caused by aging or scratches.\n"
@@ -919,7 +919,7 @@ msgstr ""
"Он создает данные для исправления ошибок, которые используются\n"
"для восстановления нечитаемых секторов, если диск впоследствии повреждается.\n"
#: src/help-dialogs.c:768
#: src/help-dialogs.c:756
msgid ""
"This software comes with <b>absolutely no warranty</b>.\n"
"This is free software and you are welcome to redistribute it\n"
@@ -931,13 +931,13 @@ msgstr ""
"\n"
"Русский перевод Игоря Горбунова &lt;igor.gorbounov@gmail.com&gt;\n"
#: src/help-dialogs.c:773
#: src/help-dialogs.c:761
msgid ""
"\n"
"e-mail: support@dvdisaster.org"
msgstr ""
#: src/help-dialogs.c:779
#: src/help-dialogs.c:767
msgid ""
"\n"
"This version is <b>not the original</b>. It has been patched\n"
@@ -948,7 +948,7 @@ msgid ""
"but submit bugreports against [GitHub] instead.\n"
msgstr ""
#: src/help-dialogs.c:787
#: src/help-dialogs.c:775
msgid ""
"\n"
"NetBSD port: Sergey Svishchev &lt;svs@ropnet.ru&gt;"
@@ -2784,9 +2784,9 @@ msgid "button|Smart L-EC"
msgstr "Интеллектуальный L-EC"
#: src/raw-sector-cache.c:37 src/raw-sector-cache.c:204
#: src/raw-sector-cache.c:338 src/scsi-freebsd.c:133 src/scsi-freebsd.c:143
#: src/scsi-linux.c:117 src/scsi-linux.c:126 src/scsi-netbsd.c:128
#: src/scsi-netbsd.c:138 src/scsi-win32.c:256
#: src/raw-sector-cache.c:338 src/scsi-darwin.c:218 src/scsi-freebsd.c:133
#: src/scsi-freebsd.c:143 src/scsi-linux.c:117 src/scsi-linux.c:126
#: src/scsi-netbsd.c:128 src/scsi-netbsd.c:138 src/scsi-win32.c:256
#, c-format
msgid "Could not open %s: %s"
msgstr "Не удалось открыть %s: %s"
@@ -5703,6 +5703,15 @@ msgstr ""
msgid "<b>State:</b>"
msgstr ""
#: src/scsi-darwin.c:183
msgid "No CD/DVD drives found."
msgstr "CD/DVD приводов не найдено."
#: src/scsi-darwin.c:229
#, c-format
msgid "Could not open %s (%s)."
msgstr ""
#: src/scsi-freebsd.c:49 src/scsi-linux.c:53
msgid ""
"Can not access /dev for devices\n"
@@ -6127,15 +6136,19 @@ msgid ""
"not found.\n"
msgstr ""
#: src/show-manual.c:114
#: src/show-manual.c:118
msgid "Could not create pipe before fork"
msgstr ""
#: src/show-manual.c:122
#: src/show-manual.c:123 src/show-manual.c:128
msgid "Could not set pipe flags before fork"
msgstr ""
#: src/show-manual.c:136
msgid "Could not fork to start xdg-open"
msgstr ""
#: src/show-manual.c:145
#: src/show-manual.c:159
#, c-format
msgid ""
"execvp could not execute \"xdg-open\":\n"
@@ -6153,8 +6166,8 @@ msgstr "Пример диска"
#: src/welcome-window.c:84
msgid ""
"This is <b>v0.79.10-pl1</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, a Windows build, an option to produce bigger BD-R RS03,\n"
"This is <b>v0.79.10-pl2</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, Windows and MacOS builds, an option to produce bigger BD-R RS03,\n"
"images, support for stripping ECC from ISOs, re-enabled adaptive reading (except for RS03), and more.\n"
"\n"
"Please refer to the <i>Help &gt; Change log</i> menu for all the details."
@@ -7009,9 +7022,6 @@ msgstr "<i>Новое в этой версии:</i>"
#~ "\n"
#~ "Порт для Darwin (Mac OS X): Julian Einwag &lt;julian@einwag.de&gt;"
#~ msgid "No CD/DVD drives found."
#~ msgstr "CD/DVD приводов не найдено."
#~ msgid "dvdisaster-%s log\n"
#~ msgstr "Журнал dvdisaster-%s\n"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dvdisaster\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-10-09 17:07+0200\n"
"POT-Creation-Date: 2023-09-17 19:21+0200\n"
"PO-Revision-Date: 2006-06-14 23:48+0100\n"
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/closure.c:296
#: src/closure.c:343
#, c-format
msgid ""
"# dvdisaster-%s configuration file\n"
@@ -30,15 +30,15 @@ msgstr ""
"# som kommer att skrivas över varje gång dvdisaster körs.\n"
"\n"
#: src/closure.c:564
#: src/closure.c:648
msgid "medium.iso"
msgstr ""
#: src/closure.c:565
#: src/closure.c:649
msgid "medium.ecc"
msgstr ""
#: src/closure.c:566
#: src/closure.c:650
msgid "sector-"
msgstr ""
@@ -856,7 +856,7 @@ msgstr ""
"<big>GNU General Public License</big>\n"
"<i>Licensvillkoren för dvdisaster.</i>"
#: src/help-dialogs.c:515
#: src/help-dialogs.c:503
#, c-format
msgid ""
"File\n"
@@ -867,7 +867,7 @@ msgstr ""
"%s\n"
"inte tillgänglig"
#: src/help-dialogs.c:525
#: src/help-dialogs.c:513
#, c-format
msgid ""
"File\n"
@@ -875,23 +875,23 @@ msgid ""
"not accessible"
msgstr ""
#: src/help-dialogs.c:537
#: src/help-dialogs.c:525
msgid ""
"\n"
"<- Error: Text file truncated here"
msgstr ""
#: src/help-dialogs.c:736
#: src/help-dialogs.c:724
msgid "windowtitle|About dvdisaster"
msgstr "Om dvdisaster"
#: src/help-dialogs.c:755 src/misc.c:219
#: src/help-dialogs.c:743 src/misc.c:219
msgid ""
"Copyright 2004-2017 Carsten Gnoerlich.\n"
"Copyright 2019-2021 The dvdisaster development team."
msgstr ""
#: src/help-dialogs.c:763
#: src/help-dialogs.c:751
msgid ""
"dvdisaster provides a margin of safety against data loss\n"
"on optical media caused by aging or scratches.\n"
@@ -903,7 +903,7 @@ msgstr ""
"Det skapar felkorrigeringsdata som kan användas för att\n"
"återskapa oläsliga sektorer om skivan senare blir skadad.\n"
#: src/help-dialogs.c:768
#: src/help-dialogs.c:756
msgid ""
"This software comes with <b>absolutely no warranty</b>.\n"
"This is free software and you are welcome to redistribute it\n"
@@ -915,13 +915,13 @@ msgstr ""
"\n"
"Svensk översättning av Daniel Nylander (info@danielnylander.se)\n"
#: src/help-dialogs.c:773
#: src/help-dialogs.c:761
msgid ""
"\n"
"e-mail: support@dvdisaster.org"
msgstr ""
#: src/help-dialogs.c:779
#: src/help-dialogs.c:767
msgid ""
"\n"
"This version is <b>not the original</b>. It has been patched\n"
@@ -932,7 +932,7 @@ msgid ""
"but submit bugreports against [GitHub] instead.\n"
msgstr ""
#: src/help-dialogs.c:787
#: src/help-dialogs.c:775
msgid ""
"\n"
"NetBSD port: Sergey Svishchev &lt;svs@ropnet.ru&gt;"
@@ -2607,9 +2607,9 @@ msgid "button|Smart L-EC"
msgstr ""
#: src/raw-sector-cache.c:37 src/raw-sector-cache.c:204
#: src/raw-sector-cache.c:338 src/scsi-freebsd.c:133 src/scsi-freebsd.c:143
#: src/scsi-linux.c:117 src/scsi-linux.c:126 src/scsi-netbsd.c:128
#: src/scsi-netbsd.c:138 src/scsi-win32.c:256
#: src/raw-sector-cache.c:338 src/scsi-darwin.c:218 src/scsi-freebsd.c:133
#: src/scsi-freebsd.c:143 src/scsi-linux.c:117 src/scsi-linux.c:126
#: src/scsi-netbsd.c:128 src/scsi-netbsd.c:138 src/scsi-win32.c:256
#, c-format
msgid "Could not open %s: %s"
msgstr "Kunde inte öppna %s: %s"
@@ -5414,6 +5414,15 @@ msgstr ""
msgid "<b>State:</b>"
msgstr ""
#: src/scsi-darwin.c:183
msgid "No CD/DVD drives found."
msgstr "Inga cd/dvd-enheter hittades."
#: src/scsi-darwin.c:229
#, c-format
msgid "Could not open %s (%s)."
msgstr ""
#: src/scsi-freebsd.c:49 src/scsi-linux.c:53
msgid ""
"Can not access /dev for devices\n"
@@ -5823,15 +5832,19 @@ msgid ""
"not found.\n"
msgstr ""
#: src/show-manual.c:114
#: src/show-manual.c:118
msgid "Could not create pipe before fork"
msgstr ""
#: src/show-manual.c:122
#: src/show-manual.c:123 src/show-manual.c:128
msgid "Could not set pipe flags before fork"
msgstr ""
#: src/show-manual.c:136
msgid "Could not fork to start xdg-open"
msgstr ""
#: src/show-manual.c:145
#: src/show-manual.c:159
#, c-format
msgid ""
"execvp could not execute \"xdg-open\":\n"
@@ -5849,8 +5862,8 @@ msgstr ""
#: src/welcome-window.c:84
msgid ""
"This is <b>v0.79.10-pl1</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, a Windows build, an option to produce bigger BD-R RS03,\n"
"This is <b>v0.79.10-pl2</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, Windows and MacOS builds, an option to produce bigger BD-R RS03,\n"
"images, support for stripping ECC from ISOs, re-enabled adaptive reading (except for RS03), and more.\n"
"\n"
"Please refer to the <i>Help &gt; Change log</i> menu for all the details."
@@ -6425,9 +6438,6 @@ msgstr ""
#~ "Inga cd/dvd-enheter hittades i /dev.\n"
#~ "Inga enheter kommer att vara förvalda.\n"
#~ msgid "No CD/DVD drives found."
#~ msgstr "Inga cd/dvd-enheter hittades."
#~ msgid "dvdisaster-%s log\n"
#~ msgstr "dvdisaster-%s logg\n"

26
macinst/Info.plist Normal file
View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key></key>
<string></string>
<key>CFBundleExecutable</key>
<string>dvdisaster</string>
<key>CFBundleIconFile</key>
<string>dvdisaster</string>
<key>CFBundleIdentifier</key>
<string>com.dvdisaster.dvdisaster</string>
<key>CFBundleName</key>
<string>dvdisaster</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.79.10</string>
<key>CFBundleSignature</key>
<string>CGCG</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSHumanReadableCopyright</key>
<string>© 2004-2009 Carsten Gnörlich et al</string>
</dict>
</plist>

BIN
macinst/dvdisaster.icns Normal file

Binary file not shown.

View File

@@ -19,9 +19,7 @@ fi
# directory for temporary files; e.g. to keep them away from SSDs
TMPDIR=/dev/shm
if ! test -d $TMPDIR; then
echo "$TMPDIR does not exist."
echo "Please create it manually, or edit common.bash"
exit 0
TMPDIR=/var/tmp
fi
LOGDIR="/dev/shm"
@@ -33,7 +31,14 @@ DIFFLOG="$LOGDIR/difflog.txt"
NEWLOG="$LOGDIR/newlog.txt"
TMPLOG="$LOGDIR/tmplog.txt"
MD5SUM=md5sum
UNAME="$(uname -s)"
if [ "$UNAME" = Darwin ]; then
MD5SUM="md5 -r"
else
MD5SUM=md5sum
fi
if ! $MD5SUM $RNDSEQ >/dev/null 2>&1; then
MD5SUM=../simple-md5sum
fi
@@ -115,7 +120,7 @@ function file_exists()
function try()
{ local doit=$(grep "${CODEC_PREFIX}_$2 " $CONFIGFILE)
if echo "$OS" | grep -q Windows && test -e "$CONFIGFILE_WIN" && grep -q "${CODEC_PREFIX}_$2 " "$CONFIGFILE_WIN"; then
if [[ $OS =~ Windows ]] && test -e "$CONFIGFILE_WIN" && grep -q "${CODEC_PREFIX}_$2 " "$CONFIGFILE_WIN"; then
doit=$(grep "${CODEC_PREFIX}_$2 " "$CONFIGFILE_WIN")
fi
@@ -221,7 +226,12 @@ function run_regtest()
testeccopt="-e ${testecc}"
fi
REFLOG=${DATABASE}/${CODEC_PREFIX}_${testsymbol}
REFLOG="${DATABASE}/${CODEC_PREFIX}_${testsymbol}"
if [ "$UNAME" = "Darwin" ] && [ -f "$REFLOG.darwin" ]; then
REFLOG="$REFLOG.darwin"
elif [[ $OS =~ Windows ]] && [ -f "$REFLOG.win" ]; then
REFLOG="$REFLOG.win"
fi
if test "$gui_mode" == "false"; then
rm -f $NEWLOG
@@ -253,16 +263,14 @@ function run_regtest()
filter=cat
echo "$options" | grep -qw SORTED && filter=sort
# for Windows
if [[ $testsymbol =~ _no_device$ ]]; then
sed -i -re "s=device $NON_EXISTENT_DEVICE\.=/dev/sdz: No such file or directory=" $NEWLOG
fi
# for Windows, just remove any path we find:
sed -i -re "s=[A-Z]:/[A-Za-z0-9_/-]+/==g" $NEWLOG
# remove all paths to get reproducible output:
sed -i -re "s=$TMPDIR/*==g;s=$ISODIR/*==g" $NEWLOG
sed -i -re "s=$TMPDIR/*==g;s=$ISODIR/*==g;s=regtest/==g" $NEWLOG
# remote tmp path of github actions
sed -i -re "s=[-A-Za-z0-9_~]+/AppData/Local/Temp/==g" $NEWLOG
if ! diff <(tail -n +3 $REFLOG | $filter) <(cat $NEWLOG | $filter) >${DIFFLOG}; then
if [ "$REGTEST_NO_UTF8" = 1 ]; then

View File

@@ -0,0 +1,12 @@
ignore
ignore
This software comes with ABSOLUTELY NO WARRANTY. This
is free software and you are welcome to redistribute it
under the conditions of the GNU GENERAL PUBLIC LICENSE.
See the file "COPYING" for further information.
*
* dvdisaster - can not continue:
*
Could not open /dev/sdz ().

View File

@@ -0,0 +1,12 @@
ignore
ignore
This software comes with ABSOLUTELY NO WARRANTY. This
is free software and you are welcome to redistribute it
under the conditions of the GNU GENERAL PUBLIC LICENSE.
See the file "COPYING" for further information.
*
* dvdisaster - can not continue:
*
Could not open device V:.

View File

@@ -0,0 +1,12 @@
ignore
ignore
This software comes with ABSOLUTELY NO WARRANTY. This
is free software and you are welcome to redistribute it
under the conditions of the GNU GENERAL PUBLIC LICENSE.
See the file "COPYING" for further information.
*
* dvdisaster - can not continue:
*
Could not open sdz ().

View File

@@ -0,0 +1,12 @@
ignore
ignore
This software comes with ABSOLUTELY NO WARRANTY. This
is free software and you are welcome to redistribute it
under the conditions of the GNU GENERAL PUBLIC LICENSE.
See the file "COPYING" for further information.
*
* dvdisaster - can not continue:
*
Could not open /dev/sdz ().

View File

@@ -0,0 +1,12 @@
ignore
ignore
This software comes with ABSOLUTELY NO WARRANTY. This
is free software and you are welcome to redistribute it
under the conditions of the GNU GENERAL PUBLIC LICENSE.
See the file "COPYING" for further information.
*
* dvdisaster - can not continue:
*
Could not open device V:.

View File

@@ -0,0 +1,12 @@
ignore
ignore
This software comes with ABSOLUTELY NO WARRANTY. This
is free software and you are welcome to redistribute it
under the conditions of the GNU GENERAL PUBLIC LICENSE.
See the file "COPYING" for further information.
*
* dvdisaster - can not continue:
*
Could not open sdz ().

View File

@@ -0,0 +1,12 @@
ignore
ignore
This software comes with ABSOLUTELY NO WARRANTY. This
is free software and you are welcome to redistribute it
under the conditions of the GNU GENERAL PUBLIC LICENSE.
See the file "COPYING" for further information.
*
* dvdisaster - can not continue:
*
Could not open /dev/sdz ().

View File

@@ -0,0 +1,12 @@
ignore
ignore
This software comes with ABSOLUTELY NO WARRANTY. This
is free software and you are welcome to redistribute it
under the conditions of the GNU GENERAL PUBLIC LICENSE.
See the file "COPYING" for further information.
*
* dvdisaster - can not continue:
*
Could not open device V:.

View File

@@ -0,0 +1,12 @@
ignore
ignore
This software comes with ABSOLUTELY NO WARRANTY. This
is free software and you are welcome to redistribute it
under the conditions of the GNU GENERAL PUBLIC LICENSE.
See the file "COPYING" for further information.
*
* dvdisaster - can not continue:
*
Could not open sdz ().

View File

@@ -1,522 +0,0 @@
ca01afa400e2244fc4797cae542888d1
ignore
This software comes with ABSOLUTELY NO WARRANTY. This
is free software and you are welcome to redistribute it
under the conditions of the GNU GENERAL PUBLIC LICENSE.
See the file "COPYING" for further information.
# *** OpenImageFromDevice(sim-cd) ***
# InquireDevice returned: Simulated CD drive 1.00
Device: sim-cd, Simulated CD drive 1.00
# *** query_type(Simulated CD drive 1.00, 0) ***
# *** get_configuration(Simulated CD drive 1.00) ***
# 8 data len, 9 current
-> profile 9: CD-R
# trying READ DISC INFORMATION for size
# size returned is 32
# trying READ DISC INFORMATION for real info
0000: 00 20 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 . ...... ........
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
# status is 1e, disc type 0
#CD: starting media probe
#CD: querying size of READ TOC/PMA/ATIP (for TOC)
#CD: size returned is 12
#CD: querying real READ TOC/PMA/ATIP (for TOC)
0000: 00 0a 00 00 00 14 00 00 00 00 00 00 ........ ....
#CD: control is 0x14
#CD: querying size of READ TOC/PMA/ATIP (for full TOC)
# Warning: Realigning length from 26 to 24
#CD: size returned is 24
#CD: querying real READ TOC/PMA/ATIP (for full TOC)
0000: 00 18 00 01 00 00 00 a0 00 00 00 00 00 00 00 00 ........ ........
0010: 00 00 00 00 00 00 00 00 ........
#CD: 1 sessions
#CD: CD medium detected, type: CD-R mode 1
# query_type() returned.
# deciding reading strategy...
Using READ CD.
GetImageFingerprint(16): read & cached
ExamineUDF(Device: Simulated CD drive 1.00)
Examining the ISO file system...
Sector 16:
Volume descriptor type = 1
Volume descriptor version = 1
Standard identifier = CD001
-> primary volume descriptor:
System identifier : | |
Volume identifier : |RANDOM IMAGE |
Volume space size : 21000 sectors
Volume set size : 1
Volume sequence size : 1
Logical block size : 2048
Path table size : 10 bytes
L-Path table location : 19
Opt L-Path table location : 0
M-Path table location : 20
Opt M-Path table location : 0
Volume creation date/time : 16-07-2006 10:35:46.23
Volume modification d/t : 16-07-2006 10:35:46.23
Volume expiration d/t : 16-07-2106 10:35:46.23
Volume effective d/t : 16-07-2006 10:35:46.23
File structure version : 1
Sector 17:
Volume descriptor type = 2
Volume descriptor version = 1
Standard identifier = CD001
-> supplementary volume descriptor: *skipped*
Sector 18:
Volume descriptor type = 255
Volume descriptor version = 1
Standard identifier = CD001
-> volume descriptor set terminator;
end of ISO file system parsing.
Examining the UDF file system...
not yet implemented.
# *** read_capacity(Simulated CD drive 1.00) ***
-> 24989
ExamineECC() started
...trying RS01
...trying RS02
RS02Recognize: medium sim-cd
try_sector: trying sector 21000
try_sector: no cookie, skipping current modulo
try_sector: trying sector 20850
try_sector: no cookie, skipping current modulo
RS02Recognize: quick RS02 search, attempting up to 3 sector reads max
Medium rewriteable: FALSE
FindHeaderInMedium: Trying modulo 4611686018427387904
FindHeaderInMedium: Trying modulo 2305843009213693952
FindHeaderInMedium: Trying modulo 1152921504606846976
FindHeaderInMedium: Trying modulo 576460752303423488
FindHeaderInMedium: Trying modulo 288230376151711744
FindHeaderInMedium: Trying modulo 144115188075855872
FindHeaderInMedium: Trying modulo 72057594037927936
FindHeaderInMedium: Trying modulo 36028797018963968
FindHeaderInMedium: Trying modulo 18014398509481984
FindHeaderInMedium: Trying modulo 9007199254740992
FindHeaderInMedium: Trying modulo 4503599627370496
FindHeaderInMedium: Trying modulo 2251799813685248
FindHeaderInMedium: Trying modulo 1125899906842624
FindHeaderInMedium: Trying modulo 562949953421312
FindHeaderInMedium: Trying modulo 281474976710656
FindHeaderInMedium: Trying modulo 140737488355328
FindHeaderInMedium: Trying modulo 70368744177664
FindHeaderInMedium: Trying modulo 35184372088832
FindHeaderInMedium: Trying modulo 17592186044416
FindHeaderInMedium: Trying modulo 8796093022208
FindHeaderInMedium: Trying modulo 4398046511104
FindHeaderInMedium: Trying modulo 2199023255552
FindHeaderInMedium: Trying modulo 1099511627776
FindHeaderInMedium: Trying modulo 549755813888
FindHeaderInMedium: Trying modulo 274877906944
FindHeaderInMedium: Trying modulo 137438953472
FindHeaderInMedium: Trying modulo 68719476736
FindHeaderInMedium: Trying modulo 34359738368
FindHeaderInMedium: Trying modulo 17179869184
FindHeaderInMedium: Trying modulo 8589934592
FindHeaderInMedium: Trying modulo 4294967296
FindHeaderInMedium: Trying modulo 2147483648
FindHeaderInMedium: Trying modulo 1073741824
FindHeaderInMedium: Trying modulo 536870912
FindHeaderInMedium: Trying modulo 268435456
FindHeaderInMedium: Trying modulo 134217728
FindHeaderInMedium: Trying modulo 67108864
FindHeaderInMedium: Trying modulo 33554432
FindHeaderInMedium: Trying modulo 16777216
FindHeaderInMedium: Trying modulo 8388608
FindHeaderInMedium: Trying modulo 4194304
FindHeaderInMedium: Trying modulo 2097152
FindHeaderInMedium: Trying modulo 1048576
FindHeaderInMedium: Trying modulo 524288
FindHeaderInMedium: Trying modulo 262144
FindHeaderInMedium: Trying modulo 131072
FindHeaderInMedium: Trying modulo 65536
FindHeaderInMedium: Trying modulo 32768
FindHeaderInMedium: Trying modulo 16384
try_sector: trying sector 16384
try_sector: no cookie, skipping current modulo
FindHeaderInMedium: Trying modulo 8192
try_sector: trying sector 24576
try_sector: no cookie, skipping current modulo
FindHeaderInMedium: Trying modulo 4096
Sector 24576 cached; skipping modulo
FindHeaderInMedium: Trying modulo 2048
Sector 24576 cached; skipping modulo
FindHeaderInMedium: Trying modulo 1024
Sector 24576 cached; skipping modulo
FindHeaderInMedium: Trying modulo 512
Sector 24576 cached; skipping modulo
FindHeaderInMedium: Trying modulo 256
try_sector: trying sector 24832
try_sector: no cookie, skipping current modulo
...trying RS03
RS03RecognizeImage: medium sim-cd
FindRS03HeaderInImage: medium sim-cd
RS03RecognizeImage: No EH, entering exhaustive search
Warning: image size set to 25000 for debugging!
.. trying layer size 98
Scanning layers for signatures.
- layer slice 0
RS03: try number = 1, reading sector 8232
RS03: try number = 2, reading sector 8330
RS03: try number = 3, reading sector 8428
RS03: try number = 4, reading sector 8526
RS03: try number = 5, reading sector 8624
RS03: try number = 6, reading sector 8722
RS03: try number = 7, reading sector 8820
RS03: try number = 8, reading sector 8918
RS03: try number = 9, reading sector 9016
RS03: try number = 10, reading sector 9114
RS03: try number = 11, reading sector 9212
RS03: try number = 12, reading sector 9310
RS03: try number = 13, reading sector 9408
RS03: try number = 14, reading sector 9506
RS03: try number = 15, reading sector 9604
RS03: try number = 16, reading sector 9702
RS03: try number = 17, reading sector 9800
RS03: try number = 18, reading sector 9898
RS03: try number = 19, reading sector 9996
RS03: try number = 20, reading sector 10094
RS03: try number = 21, reading sector 10192
RS03: try number = 22, reading sector 10290
RS03: try number = 23, reading sector 10388
RS03: try number = 24, reading sector 10486
RS03: try number = 25, reading sector 10584
RS03: try number = 26, reading sector 10682
RS03: try number = 27, reading sector 10780
RS03: try number = 28, reading sector 10878
RS03: try number = 29, reading sector 10976
RS03: try number = 30, reading sector 11074
RS03: try number = 31, reading sector 11172
RS03: try number = 32, reading sector 11270
RS03: try number = 33, reading sector 11368
RS03: try number = 34, reading sector 11466
RS03: try number = 35, reading sector 11564
RS03: try number = 36, reading sector 11662
RS03: try number = 37, reading sector 11760
RS03: try number = 38, reading sector 11858
RS03: try number = 39, reading sector 11956
RS03: try number = 40, reading sector 12054
RS03: try number = 41, reading sector 12152
RS03: try number = 42, reading sector 12250
RS03: try number = 43, reading sector 12348
RS03: try number = 44, reading sector 12446
RS03: try number = 45, reading sector 12544
RS03: try number = 46, reading sector 12642
RS03: try number = 47, reading sector 12740
RS03: try number = 48, reading sector 12838
RS03: try number = 49, reading sector 12936
RS03: try number = 50, reading sector 13034
RS03: try number = 51, reading sector 13132
RS03: try number = 52, reading sector 13230
RS03: try number = 53, reading sector 13328
RS03: try number = 54, reading sector 13426
RS03: try number = 55, reading sector 13524
RS03: try number = 56, reading sector 13622
RS03: try number = 57, reading sector 13720
RS03: try number = 58, reading sector 13818
RS03: try number = 59, reading sector 13916
RS03: try number = 60, reading sector 14014
RS03: try number = 61, reading sector 14112
RS03: try number = 62, reading sector 14210
RS03: try number = 63, reading sector 14308
RS03: try number = 64, reading sector 14406
RS03: try number = 65, reading sector 14504
RS03: try number = 66, reading sector 14602
RS03: try number = 67, reading sector 14700
RS03: try number = 68, reading sector 14798
RS03: try number = 69, reading sector 14896
RS03: try number = 70, reading sector 14994
RS03: try number = 71, reading sector 15092
RS03: try number = 72, reading sector 15190
RS03: try number = 73, reading sector 15288
RS03: try number = 74, reading sector 15386
RS03: try number = 75, reading sector 15484
RS03: try number = 76, reading sector 15582
RS03: try number = 77, reading sector 15680
RS03: try number = 78, reading sector 15778
RS03: try number = 79, reading sector 15876
RS03: try number = 80, reading sector 15974
RS03: try number = 81, reading sector 16072
RS03: try number = 82, reading sector 16170
RS03: try number = 83, reading sector 16268
RS03: try number = 84, reading sector 16366
RS03: try number = 85, reading sector 16464
RS03: try number = 86, reading sector 16562
RS03: try number = 87, reading sector 16660
RS03: try number = 88, reading sector 16758
RS03: try number = 89, reading sector 16856
RS03: try number = 90, reading sector 16954
RS03: try number = 91, reading sector 17052
RS03: try number = 92, reading sector 17150
RS03: try number = 93, reading sector 17248
RS03: try number = 94, reading sector 17346
RS03: try number = 95, reading sector 17444
RS03: try number = 96, reading sector 17542
RS03: try number = 97, reading sector 17640
RS03: try number = 98, reading sector 17738
RS03: try number = 99, reading sector 17836
RS03: try number = 100, reading sector 17934
RS03: try number = 101, reading sector 18032
RS03: try number = 102, reading sector 18130
RS03: try number = 103, reading sector 18228
RS03: try number = 104, reading sector 18326
RS03: try number = 105, reading sector 18424
RS03: try number = 106, reading sector 18522
RS03: try number = 107, reading sector 18620
RS03: try number = 108, reading sector 18718
RS03: try number = 109, reading sector 18816
RS03: try number = 110, reading sector 18914
RS03: try number = 111, reading sector 19012
RS03: try number = 112, reading sector 19110
RS03: try number = 113, reading sector 19208
RS03: try number = 114, reading sector 19306
RS03: try number = 115, reading sector 19404
RS03: try number = 116, reading sector 19502
RS03: try number = 117, reading sector 19600
RS03: try number = 118, reading sector 19698
RS03: try number = 119, reading sector 19796
RS03: try number = 120, reading sector 19894
RS03: try number = 121, reading sector 19992
RS03: try number = 122, reading sector 20090
RS03: try number = 123, reading sector 20188
RS03: try number = 124, reading sector 20286
RS03: try number = 125, reading sector 20384
RS03: try number = 126, reading sector 20482
RS03: try number = 127, reading sector 20580
RS03: try number = 128, reading sector 20678
RS03: try number = 129, reading sector 20776
RS03: try number = 130, reading sector 20874
RS03: try number = 131, reading sector 20972
RS03: try number = 132, reading sector 21070
** Success: sector 21070, rediscovered format with 39 roots
...augmented image found
# Calling query_size()
# *** query_size(Simulated CD drive 1.00) ***
Medium size obtained from ECC header: 24990 sectors
# returned: 24990 sectors
Medium "Random Image": CD-R mode 1, 24990 sectors, Ecc, created 16-07-2006.
Creating new rs03i-tmp.iso image.
Reading CRC information from ecc data (RS03) ... Calculated layout for RS03 image:
data sectors = 21000
data padding = 68
layer size = 98
total sectors = 24990
medium capacity = 0
header position = 21000
first CRC sector = 21070
first ECC sector = 21168
ndata = 216
nroots = 39 (18.1%)
done.
* CRC error, sector: 21000
Current sector: 22032. This session: NewSectorsReadOK=22032, ReadErrors=0, CRCErrors=1
Current sector: 22048. This session: NewSectorsReadOK=22048, ReadErrors=0, CRCErrors=1
Current sector: 22064. This session: NewSectorsReadOK=22064, ReadErrors=0, CRCErrors=1
Current sector: 22080. This session: NewSectorsReadOK=22080, ReadErrors=0, CRCErrors=1
Current sector: 22096. This session: NewSectorsReadOK=22096, ReadErrors=0, CRCErrors=1
Current sector: 22112. This session: NewSectorsReadOK=22112, ReadErrors=0, CRCErrors=1
Current sector: 22128. This session: NewSectorsReadOK=22128, ReadErrors=0, CRCErrors=1
Current sector: 22144. This session: NewSectorsReadOK=22144, ReadErrors=0, CRCErrors=1
Current sector: 22160. This session: NewSectorsReadOK=22160, ReadErrors=0, CRCErrors=1
Current sector: 22176. This session: NewSectorsReadOK=22176, ReadErrors=0, CRCErrors=1
Current sector: 22192. This session: NewSectorsReadOK=22192, ReadErrors=0, CRCErrors=1
Current sector: 22208. This session: NewSectorsReadOK=22208, ReadErrors=0, CRCErrors=1
Current sector: 22224. This session: NewSectorsReadOK=22224, ReadErrors=0, CRCErrors=1
Current sector: 22240. This session: NewSectorsReadOK=22240, ReadErrors=0, CRCErrors=1
Current sector: 22256. This session: NewSectorsReadOK=22256, ReadErrors=0, CRCErrors=1
Current sector: 22272. This session: NewSectorsReadOK=22272, ReadErrors=0, CRCErrors=1
Current sector: 22288. This session: NewSectorsReadOK=22288, ReadErrors=0, CRCErrors=1
Current sector: 22304. This session: NewSectorsReadOK=22304, ReadErrors=0, CRCErrors=1
Current sector: 22320. This session: NewSectorsReadOK=22320, ReadErrors=0, CRCErrors=1
Current sector: 22336. This session: NewSectorsReadOK=22336, ReadErrors=0, CRCErrors=1
Current sector: 22352. This session: NewSectorsReadOK=22352, ReadErrors=0, CRCErrors=1
Current sector: 22368. This session: NewSectorsReadOK=22368, ReadErrors=0, CRCErrors=1
Current sector: 22384. This session: NewSectorsReadOK=22384, ReadErrors=0, CRCErrors=1
Current sector: 22400. This session: NewSectorsReadOK=22400, ReadErrors=0, CRCErrors=1
Current sector: 22416. This session: NewSectorsReadOK=22416, ReadErrors=0, CRCErrors=1
Current sector: 22432. This session: NewSectorsReadOK=22432, ReadErrors=0, CRCErrors=1
Current sector: 22448. This session: NewSectorsReadOK=22448, ReadErrors=0, CRCErrors=1
Current sector: 22464. This session: NewSectorsReadOK=22464, ReadErrors=0, CRCErrors=1
Current sector: 22480. This session: NewSectorsReadOK=22480, ReadErrors=0, CRCErrors=1
Current sector: 22496. This session: NewSectorsReadOK=22496, ReadErrors=0, CRCErrors=1
Current sector: 22512. This session: NewSectorsReadOK=22512, ReadErrors=0, CRCErrors=1
Current sector: 22528. This session: NewSectorsReadOK=22528, ReadErrors=0, CRCErrors=1
Current sector: 22544. This session: NewSectorsReadOK=22544, ReadErrors=0, CRCErrors=1
Current sector: 22560. This session: NewSectorsReadOK=22560, ReadErrors=0, CRCErrors=1
Current sector: 22576. This session: NewSectorsReadOK=22576, ReadErrors=0, CRCErrors=1
Current sector: 22592. This session: NewSectorsReadOK=22592, ReadErrors=0, CRCErrors=1
Current sector: 22608. This session: NewSectorsReadOK=22608, ReadErrors=0, CRCErrors=1
Current sector: 22624. This session: NewSectorsReadOK=22624, ReadErrors=0, CRCErrors=1
Current sector: 22640. This session: NewSectorsReadOK=22640, ReadErrors=0, CRCErrors=1
Current sector: 22656. This session: NewSectorsReadOK=22656, ReadErrors=0, CRCErrors=1
Current sector: 22672. This session: NewSectorsReadOK=22672, ReadErrors=0, CRCErrors=1
Current sector: 22688. This session: NewSectorsReadOK=22688, ReadErrors=0, CRCErrors=1
Current sector: 22704. This session: NewSectorsReadOK=22704, ReadErrors=0, CRCErrors=1
Current sector: 22720. This session: NewSectorsReadOK=22720, ReadErrors=0, CRCErrors=1
Current sector: 22736. This session: NewSectorsReadOK=22736, ReadErrors=0, CRCErrors=1
Current sector: 22752. This session: NewSectorsReadOK=22752, ReadErrors=0, CRCErrors=1
Current sector: 22768. This session: NewSectorsReadOK=22768, ReadErrors=0, CRCErrors=1
Current sector: 22784. This session: NewSectorsReadOK=22784, ReadErrors=0, CRCErrors=1
Current sector: 22800. This session: NewSectorsReadOK=22800, ReadErrors=0, CRCErrors=1
Current sector: 22816. This session: NewSectorsReadOK=22816, ReadErrors=0, CRCErrors=1
Current sector: 22832. This session: NewSectorsReadOK=22832, ReadErrors=0, CRCErrors=1
Current sector: 22848. This session: NewSectorsReadOK=22848, ReadErrors=0, CRCErrors=1
Current sector: 22864. This session: NewSectorsReadOK=22864, ReadErrors=0, CRCErrors=1
Current sector: 22880. This session: NewSectorsReadOK=22880, ReadErrors=0, CRCErrors=1
Current sector: 22896. This session: NewSectorsReadOK=22896, ReadErrors=0, CRCErrors=1
Current sector: 22912. This session: NewSectorsReadOK=22912, ReadErrors=0, CRCErrors=1
Current sector: 22928. This session: NewSectorsReadOK=22928, ReadErrors=0, CRCErrors=1
Current sector: 22944. This session: NewSectorsReadOK=22944, ReadErrors=0, CRCErrors=1
Current sector: 22960. This session: NewSectorsReadOK=22960, ReadErrors=0, CRCErrors=1
Current sector: 22976. This session: NewSectorsReadOK=22976, ReadErrors=0, CRCErrors=1
Current sector: 22992. This session: NewSectorsReadOK=22992, ReadErrors=0, CRCErrors=1
Current sector: 23008. This session: NewSectorsReadOK=23008, ReadErrors=0, CRCErrors=1
Current sector: 23024. This session: NewSectorsReadOK=23024, ReadErrors=0, CRCErrors=1
Current sector: 23040. This session: NewSectorsReadOK=23040, ReadErrors=0, CRCErrors=1
Current sector: 23056. This session: NewSectorsReadOK=23056, ReadErrors=0, CRCErrors=1
Current sector: 23072. This session: NewSectorsReadOK=23072, ReadErrors=0, CRCErrors=1
Current sector: 23088. This session: NewSectorsReadOK=23088, ReadErrors=0, CRCErrors=1
Current sector: 23104. This session: NewSectorsReadOK=23104, ReadErrors=0, CRCErrors=1
Current sector: 23120. This session: NewSectorsReadOK=23120, ReadErrors=0, CRCErrors=1
Current sector: 23136. This session: NewSectorsReadOK=23136, ReadErrors=0, CRCErrors=1
Current sector: 23152. This session: NewSectorsReadOK=23152, ReadErrors=0, CRCErrors=1
Current sector: 23168. This session: NewSectorsReadOK=23168, ReadErrors=0, CRCErrors=1
Current sector: 23184. This session: NewSectorsReadOK=23184, ReadErrors=0, CRCErrors=1
Current sector: 23200. This session: NewSectorsReadOK=23200, ReadErrors=0, CRCErrors=1
Current sector: 23216. This session: NewSectorsReadOK=23216, ReadErrors=0, CRCErrors=1
Current sector: 23232. This session: NewSectorsReadOK=23232, ReadErrors=0, CRCErrors=1
Current sector: 23248. This session: NewSectorsReadOK=23248, ReadErrors=0, CRCErrors=1
Current sector: 23264. This session: NewSectorsReadOK=23264, ReadErrors=0, CRCErrors=1
Current sector: 23280. This session: NewSectorsReadOK=23280, ReadErrors=0, CRCErrors=1
Current sector: 23296. This session: NewSectorsReadOK=23296, ReadErrors=0, CRCErrors=1
Current sector: 23312. This session: NewSectorsReadOK=23312, ReadErrors=0, CRCErrors=1
Current sector: 23328. This session: NewSectorsReadOK=23328, ReadErrors=0, CRCErrors=1
Current sector: 23344. This session: NewSectorsReadOK=23344, ReadErrors=0, CRCErrors=1
Current sector: 23360. This session: NewSectorsReadOK=23360, ReadErrors=0, CRCErrors=1
Current sector: 23376. This session: NewSectorsReadOK=23376, ReadErrors=0, CRCErrors=1
Current sector: 23392. This session: NewSectorsReadOK=23392, ReadErrors=0, CRCErrors=1
Current sector: 23408. This session: NewSectorsReadOK=23408, ReadErrors=0, CRCErrors=1
Current sector: 23424. This session: NewSectorsReadOK=23424, ReadErrors=0, CRCErrors=1
Current sector: 23440. This session: NewSectorsReadOK=23440, ReadErrors=0, CRCErrors=1
Current sector: 23456. This session: NewSectorsReadOK=23456, ReadErrors=0, CRCErrors=1
Current sector: 23472. This session: NewSectorsReadOK=23472, ReadErrors=0, CRCErrors=1
Current sector: 23488. This session: NewSectorsReadOK=23488, ReadErrors=0, CRCErrors=1
Current sector: 23504. This session: NewSectorsReadOK=23504, ReadErrors=0, CRCErrors=1
Current sector: 23520. This session: NewSectorsReadOK=23520, ReadErrors=0, CRCErrors=1
Current sector: 23536. This session: NewSectorsReadOK=23536, ReadErrors=0, CRCErrors=1
Current sector: 23552. This session: NewSectorsReadOK=23552, ReadErrors=0, CRCErrors=1
Current sector: 23568. This session: NewSectorsReadOK=23568, ReadErrors=0, CRCErrors=1
Current sector: 23584. This session: NewSectorsReadOK=23584, ReadErrors=0, CRCErrors=1
Current sector: 23600. This session: NewSectorsReadOK=23600, ReadErrors=0, CRCErrors=1
Current sector: 23616. This session: NewSectorsReadOK=23616, ReadErrors=0, CRCErrors=1
Current sector: 23632. This session: NewSectorsReadOK=23632, ReadErrors=0, CRCErrors=1
Current sector: 23648. This session: NewSectorsReadOK=23648, ReadErrors=0, CRCErrors=1
Current sector: 23664. This session: NewSectorsReadOK=23664, ReadErrors=0, CRCErrors=1
Current sector: 23680. This session: NewSectorsReadOK=23680, ReadErrors=0, CRCErrors=1
Current sector: 23696. This session: NewSectorsReadOK=23696, ReadErrors=0, CRCErrors=1
Current sector: 23712. This session: NewSectorsReadOK=23712, ReadErrors=0, CRCErrors=1
Current sector: 23728. This session: NewSectorsReadOK=23728, ReadErrors=0, CRCErrors=1
Current sector: 23744. This session: NewSectorsReadOK=23744, ReadErrors=0, CRCErrors=1
Current sector: 23760. This session: NewSectorsReadOK=23760, ReadErrors=0, CRCErrors=1
Current sector: 23776. This session: NewSectorsReadOK=23776, ReadErrors=0, CRCErrors=1
Current sector: 23792. This session: NewSectorsReadOK=23792, ReadErrors=0, CRCErrors=1
Current sector: 23808. This session: NewSectorsReadOK=23808, ReadErrors=0, CRCErrors=1
Current sector: 23824. This session: NewSectorsReadOK=23824, ReadErrors=0, CRCErrors=1
Current sector: 23840. This session: NewSectorsReadOK=23840, ReadErrors=0, CRCErrors=1
Current sector: 23856. This session: NewSectorsReadOK=23856, ReadErrors=0, CRCErrors=1
Current sector: 23872. This session: NewSectorsReadOK=23872, ReadErrors=0, CRCErrors=1
Current sector: 23888. This session: NewSectorsReadOK=23888, ReadErrors=0, CRCErrors=1
Current sector: 23904. This session: NewSectorsReadOK=23904, ReadErrors=0, CRCErrors=1
Current sector: 23920. This session: NewSectorsReadOK=23920, ReadErrors=0, CRCErrors=1
Current sector: 23936. This session: NewSectorsReadOK=23936, ReadErrors=0, CRCErrors=1
Current sector: 23952. This session: NewSectorsReadOK=23952, ReadErrors=0, CRCErrors=1
Current sector: 23968. This session: NewSectorsReadOK=23968, ReadErrors=0, CRCErrors=1
Current sector: 23984. This session: NewSectorsReadOK=23984, ReadErrors=0, CRCErrors=1
Current sector: 24000. This session: NewSectorsReadOK=24000, ReadErrors=0, CRCErrors=1
Current sector: 24016. This session: NewSectorsReadOK=24016, ReadErrors=0, CRCErrors=1
Current sector: 24032. This session: NewSectorsReadOK=24032, ReadErrors=0, CRCErrors=1
Current sector: 24048. This session: NewSectorsReadOK=24048, ReadErrors=0, CRCErrors=1
Current sector: 24064. This session: NewSectorsReadOK=24064, ReadErrors=0, CRCErrors=1
Current sector: 24080. This session: NewSectorsReadOK=24080, ReadErrors=0, CRCErrors=1
Current sector: 24096. This session: NewSectorsReadOK=24096, ReadErrors=0, CRCErrors=1
Current sector: 24112. This session: NewSectorsReadOK=24112, ReadErrors=0, CRCErrors=1
Current sector: 24128. This session: NewSectorsReadOK=24128, ReadErrors=0, CRCErrors=1
Current sector: 24144. This session: NewSectorsReadOK=24144, ReadErrors=0, CRCErrors=1
Current sector: 24160. This session: NewSectorsReadOK=24160, ReadErrors=0, CRCErrors=1
Current sector: 24176. This session: NewSectorsReadOK=24176, ReadErrors=0, CRCErrors=1
Current sector: 24192. This session: NewSectorsReadOK=24192, ReadErrors=0, CRCErrors=1
Current sector: 24208. This session: NewSectorsReadOK=24208, ReadErrors=0, CRCErrors=1
Current sector: 24224. This session: NewSectorsReadOK=24224, ReadErrors=0, CRCErrors=1
Current sector: 24240. This session: NewSectorsReadOK=24240, ReadErrors=0, CRCErrors=1
Current sector: 24256. This session: NewSectorsReadOK=24256, ReadErrors=0, CRCErrors=1
Current sector: 24272. This session: NewSectorsReadOK=24272, ReadErrors=0, CRCErrors=1
Current sector: 24288. This session: NewSectorsReadOK=24288, ReadErrors=0, CRCErrors=1
Current sector: 24304. This session: NewSectorsReadOK=24304, ReadErrors=0, CRCErrors=1
Current sector: 24320. This session: NewSectorsReadOK=24320, ReadErrors=0, CRCErrors=1
Current sector: 24336. This session: NewSectorsReadOK=24336, ReadErrors=0, CRCErrors=1
Current sector: 24352. This session: NewSectorsReadOK=24352, ReadErrors=0, CRCErrors=1
Current sector: 24368. This session: NewSectorsReadOK=24368, ReadErrors=0, CRCErrors=1
Current sector: 24384. This session: NewSectorsReadOK=24384, ReadErrors=0, CRCErrors=1
Current sector: 24400. This session: NewSectorsReadOK=24400, ReadErrors=0, CRCErrors=1
Current sector: 24416. This session: NewSectorsReadOK=24416, ReadErrors=0, CRCErrors=1
Current sector: 24432. This session: NewSectorsReadOK=24432, ReadErrors=0, CRCErrors=1
Current sector: 24448. This session: NewSectorsReadOK=24448, ReadErrors=0, CRCErrors=1
Current sector: 24464. This session: NewSectorsReadOK=24464, ReadErrors=0, CRCErrors=1
Current sector: 24480. This session: NewSectorsReadOK=24480, ReadErrors=0, CRCErrors=1
Current sector: 24496. This session: NewSectorsReadOK=24496, ReadErrors=0, CRCErrors=1
Current sector: 24512. This session: NewSectorsReadOK=24512, ReadErrors=0, CRCErrors=1
Current sector: 24528. This session: NewSectorsReadOK=24528, ReadErrors=0, CRCErrors=1
Current sector: 24544. This session: NewSectorsReadOK=24544, ReadErrors=0, CRCErrors=1
Current sector: 24560. This session: NewSectorsReadOK=24560, ReadErrors=0, CRCErrors=1
Current sector: 24576. This session: NewSectorsReadOK=24576, ReadErrors=0, CRCErrors=1
Current sector: 24592. This session: NewSectorsReadOK=24592, ReadErrors=0, CRCErrors=1
Current sector: 24608. This session: NewSectorsReadOK=24608, ReadErrors=0, CRCErrors=1
Current sector: 24624. This session: NewSectorsReadOK=24624, ReadErrors=0, CRCErrors=1
Current sector: 24640. This session: NewSectorsReadOK=24640, ReadErrors=0, CRCErrors=1
Current sector: 24656. This session: NewSectorsReadOK=24656, ReadErrors=0, CRCErrors=1
Current sector: 24672. This session: NewSectorsReadOK=24672, ReadErrors=0, CRCErrors=1
Current sector: 24688. This session: NewSectorsReadOK=24688, ReadErrors=0, CRCErrors=1
Current sector: 24704. This session: NewSectorsReadOK=24704, ReadErrors=0, CRCErrors=1
Current sector: 24720. This session: NewSectorsReadOK=24720, ReadErrors=0, CRCErrors=1
Current sector: 24736. This session: NewSectorsReadOK=24736, ReadErrors=0, CRCErrors=1
Current sector: 24752. This session: NewSectorsReadOK=24752, ReadErrors=0, CRCErrors=1
Current sector: 24768. This session: NewSectorsReadOK=24768, ReadErrors=0, CRCErrors=1
Current sector: 24784. This session: NewSectorsReadOK=24784, ReadErrors=0, CRCErrors=1
Current sector: 24800. This session: NewSectorsReadOK=24800, ReadErrors=0, CRCErrors=1
Current sector: 24816. This session: NewSectorsReadOK=24816, ReadErrors=0, CRCErrors=1
Current sector: 24832. This session: NewSectorsReadOK=24832, ReadErrors=0, CRCErrors=1
Current sector: 24848. This session: NewSectorsReadOK=24848, ReadErrors=0, CRCErrors=1
Current sector: 24864. This session: NewSectorsReadOK=24864, ReadErrors=0, CRCErrors=1
Current sector: 24880. This session: NewSectorsReadOK=24880, ReadErrors=0, CRCErrors=1
Current sector: 24896. This session: NewSectorsReadOK=24896, ReadErrors=0, CRCErrors=1
Current sector: 24912. This session: NewSectorsReadOK=24912, ReadErrors=0, CRCErrors=1
Current sector: 24928. This session: NewSectorsReadOK=24928, ReadErrors=0, CRCErrors=1
Current sector: 24944. This session: NewSectorsReadOK=24944, ReadErrors=0, CRCErrors=1
Current sector: 24960. This session: NewSectorsReadOK=24960, ReadErrors=0, CRCErrors=1
Current sector: 24976. This session: NewSectorsReadOK=24976, ReadErrors=0, CRCErrors=1
Current sector: 24977. This session: NewSectorsReadOK=24977, ReadErrors=0, CRCErrors=1
Current sector: 24978. This session: NewSectorsReadOK=24978, ReadErrors=0, CRCErrors=1
Current sector: 24979. This session: NewSectorsReadOK=24979, ReadErrors=0, CRCErrors=1
Current sector: 24980. This session: NewSectorsReadOK=24980, ReadErrors=0, CRCErrors=1
Current sector: 24981. This session: NewSectorsReadOK=24981, ReadErrors=0, CRCErrors=1
Current sector: 24982. This session: NewSectorsReadOK=24982, ReadErrors=0, CRCErrors=1
Current sector: 24983. This session: NewSectorsReadOK=24983, ReadErrors=0, CRCErrors=1
Current sector: 24984. This session: NewSectorsReadOK=24984, ReadErrors=0, CRCErrors=1
Current sector: 24985. This session: NewSectorsReadOK=24985, ReadErrors=0, CRCErrors=1
Current sector: 24986. This session: NewSectorsReadOK=24986, ReadErrors=0, CRCErrors=1
Current sector: 24987. This session: NewSectorsReadOK=24987, ReadErrors=0, CRCErrors=1
Current sector: 24988. This session: NewSectorsReadOK=24988, ReadErrors=0, CRCErrors=1
Current sector: 24989. This session: NewSectorsReadOK=24989, ReadErrors=0, CRCErrors=1
Current sector: 24990. This session: NewSectorsReadOK=24990, ReadErrors=0, CRCErrors=1
1 CRC errors.
CrcBuf contents, image path none (medium):
crcSize: 24990, dataSectors: 21000, coveredSectors: 21070, allSectors: 24990
md5State: invalid
fp sector: 16; 15c0fd35a0cfa0f83b9ccbd8604c2592
missing crcs: 0

View File

@@ -127,6 +127,15 @@ case "$cfg_uname" in
}
;;
Darwin*) cfg_system=darwin
CFG_SYS_OPTIONS="-DSYS_DARWIN"
CFG_SYS_NAME="-DSYS_NAME=\\\"Darwin\\\""
CFG_EXE_SUFFIX=""
function add_linker_flags()
{ lflags_return="-L$1 -Wl,-rpath,$1 $2"
}
;;
FreeBSD*) cfg_system=freebsd-std
CFG_SYS_OPTIONS="-DSYS_FREEBSD"
CFG_SYS_NAME="-DSYS_NAME=\\\"FreeBSD\\\""
@@ -348,6 +357,42 @@ function REQUIRE_GMAKE()
exit 1;
}
function REQUIRE_CLANG()
{
if test -n "$cfg_help_mode"; then
return 0
fi
echo -n "Checking for clang: "
# Try $CC first
if test -n "$CC" && $CC -v >/dev/null 2>&1; then
if ($CC -v 2>&1 | grep "clang") > /dev/null 2>&1 ; then
CC=`type -P $CC`
echo "yes ($CC)"
echo "CC = $CC" >>Makefile.config
return 0
fi
fi
# Try clang binary
CC=clang
if test -n "$CC" && $CC -v >/dev/null 2>&1; then
if ($CC -v 2>&1 | grep "clang") > /dev/null 2>&1 ; then
CC=`type -P $CC`
echo "yes ($CC)"
echo "CC = $CC" >>Makefile.config
return 0
fi
fi
echo "no"
echo "This package requires the Clang C compiler (clang)."
exit 1;
}
function REQUIRE_GCC()
{
if test -n "$cfg_help_mode"; then

View File

@@ -58,6 +58,35 @@ static char* get_exe_path()
}
#endif
#ifdef SYS_DARWIN
#include <mach-o/dyld.h>
// Get the path of the current executable
static char* get_bin_path() {
char path[PATH_MAX];
uint32_t size = sizeof(path);
if (_NSGetExecutablePath(path, &size) == 0) {
char *lastSlash = strrchr(path, '/');
if (lastSlash) {
*lastSlash = '\0';
return strdup(path);
}
}
return strdup(".");
}
// Check if the given path is within an app bundle
int isWithinAppBundle(const char *filePath) {
// Check if "Contents/MacOS" exists in the path
if (strstr(filePath, ".app/Contents/MacOS") != NULL) {
return 1; // The binary is within an app bundle
}
return 0; // The binary is not within an app bundle
}
#endif
#ifdef WITH_GUI_YES
/***
@@ -396,7 +425,7 @@ static void get_base_dirs()
source directory is supposed to hold the most recent files,
so try this first. */
#if defined(WITH_EMBEDDED_SRC_PATH_YES) && !defined(SYS_MINGW)
#if defined(WITH_EMBEDDED_SRC_PATH_YES) && !defined(SYS_MINGW) && !defined(SYS_DARWIN)
if(DirStat(SRCDIR))
{ Closure->binDir = g_strdup(SRCDIR);
Closure->docDir = g_strdup_printf("%s/documentation",SRCDIR);
@@ -405,6 +434,29 @@ static void get_base_dirs()
}
#endif /* WITH_EMBEDDED_SRC_PATH_YES */
#if defined(WITH_EMBEDDED_SRC_PATH_YES) && defined(SYS_DARWIN)
char *binPath = get_bin_path();
Closure->binDir = g_strdup_printf("%s/../Resources",binPath);
Closure->docDir = g_strdup_printf("%s/../Resources/documentation",binPath);
free(binPath);
goto find_dotfile;
#endif
// We may also be in an app bundle
#if defined(SYS_DARWIN)
// Obtain the path to the executable
const char *pathToExecutable = get_bin_path();
// Check if the executable is within an app bundle
if (isWithinAppBundle(pathToExecutable)) {
// Inside an app bundle, set directory paths accordingly
Closure->binDir = g_strdup_printf("%s/../Resources", pathToExecutable);
Closure->docDir = g_strdup_printf("%s/../Resources/documentation", pathToExecutable);
goto find_dotfile;
}
#endif /* SYS_DARWIN */
/*** Otherwise try the installation directory.
On Unices this is a hardcoded directory. */

378
src/scsi-darwin.c Normal file
View File

@@ -0,0 +1,378 @@
/* dvdisaster: Additional error correction for optical media.
* Copyright (C) 2004-2011 Carsten Gnoerlich.
*
* Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org
* Project homepage: http://www.dvdisaster.org
*
* This file is part of dvdisaster.
*
* dvdisaster is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* dvdisaster is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with dvdisaster. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Darwin support by Julian Einwag <julian@einwag.de>.
* This is still an early version.
*/
#include "dvdisaster.h"
#include "scsi-layer.h"
#include "udf.h"
#ifdef SYS_DARWIN
#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h>
#include <IOKit/storage/IOStorageDeviceCharacteristics.h>
#include <IOKit/IOBSD.h>
#include <IOKit/IOCFPlugIn.h>
#include <IOKit/usb/IOUSBLib.h>
#include <IOKit/usb/USBSpec.h>
#include <stdlib.h>
/*
* Unmount media before trying to access them.
* Added by Bernd Heller, <bdheller@users.sourceforge.net>
*/
static void unmountDVD(io_object_t scsiDevice)
{
CFStringRef bsdName = NULL;
bsdName = (CFStringRef) IORegistryEntrySearchCFProperty(scsiDevice,
kIOServicePlane,
CFSTR(kIOBSDNameKey),
kCFAllocatorDefault,
kIORegistryIterateRecursively);
if (bsdName != NULL) {
// unmount all partitions
char cmd[4096];
char bsdNameStr[100];
CFStringGetCString(bsdName, bsdNameStr, sizeof(bsdNameStr), kCFStringEncodingUTF8);
sprintf(cmd, "/usr/sbin/diskutil unmountDisk /dev/%s", bsdNameStr);
system(cmd);
CFRelease(bsdName);
} else {
// no media to unmount
return;
}
}
char *getProductName(io_object_t device)
{
CFDictionaryRef devCharacteristics;
CFStringRef nameRef;
CFIndex length;
char *prodName;
devCharacteristics = IORegistryEntryCreateCFProperty(device, CFSTR(kIOPropertyDeviceCharacteristicsKey), kCFAllocatorDefault, 0);
if (CFDictionaryGetValueIfPresent(devCharacteristics, CFSTR("Product Name"), (const void **) &nameRef)) {
length = CFStringGetLength(nameRef)+1;
prodName = malloc(length);
CFStringGetCString(nameRef, prodName, length, 0);
CFRelease(nameRef);
return prodName;
} else
return NULL;
}
io_iterator_t getDVDIterator(char* ioClass)
{
io_iterator_t scsiObjectIterator = (io_iterator_t) NULL;
CFMutableDictionaryRef matchingDict = NULL;
IOReturn ioReturnValue = kIOReturnSuccess;
matchingDict = IOServiceMatching(ioClass);
if (matchingDict == (CFMutableDictionaryRef) NULL) {
return (io_iterator_t) NULL;
}
ioReturnValue = IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, &scsiObjectIterator);
if (scsiObjectIterator == (io_iterator_t) NULL || (ioReturnValue != kIOReturnSuccess)) {
return (io_iterator_t) NULL;
}
return scsiObjectIterator;
}
IOCFPlugInInterface **getPlugInInterface(io_object_t scsiDevice)
{
IOReturn ioReturnValue;
SInt32 score = 0;
IOCFPlugInInterface **plugInInterface = NULL;
ioReturnValue = IOCreatePlugInInterfaceForService(scsiDevice, kIOMMCDeviceUserClientTypeID, kIOCFPlugInInterfaceID,&plugInInterface, &score);
if (ioReturnValue != kIOReturnSuccess) {
return NULL;
}
return plugInInterface;
}
MMCDeviceInterface** getMMCInterface(IOCFPlugInInterface** plugInInterface)
{
MMCDeviceInterface **mmcDeviceInterface = NULL;
HRESULT pluginResult;
pluginResult = (*plugInInterface)->QueryInterface(plugInInterface,
CFUUIDGetUUIDBytes(kIOMMCDeviceInterfaceID),
(LPVOID)&mmcDeviceInterface);
if (pluginResult != KERN_SUCCESS) {
return NULL;
}
return mmcDeviceInterface;
}
char *DefaultDevice()
{
int i;
io_iterator_t scsiObjectIterator = (io_iterator_t) NULL;
io_object_t scsiDevice;
char *deviceName, *prodName;
/* As a convenience, add the simulated drive first. */
InitSimulatedCD();
/* Now probe the physical drives. */
scsiObjectIterator = getDVDIterator("IOBDServices");
for (i = 1; (scsiDevice = (io_object_t) IOIteratorNext(scsiObjectIterator)) != (io_object_t) NULL; i++) {
deviceName = g_malloc0(80);
sprintf(deviceName,"IOBDServices/%d",i);
prodName = getProductName(scsiDevice);
g_ptr_array_add(Closure->deviceNodes, g_strdup(deviceName));
g_ptr_array_add(Closure->deviceNames, g_strdup(prodName));
g_free(deviceName);
}
IOObjectRelease(scsiObjectIterator);
scsiObjectIterator = getDVDIterator("IODVDServices");
for (i = 1; (scsiDevice = (io_object_t) IOIteratorNext(scsiObjectIterator)) != (io_object_t) NULL; i++) {
deviceName = g_malloc0(80);
sprintf(deviceName,"IODVDServices/%d",i);
prodName = getProductName(scsiDevice);
g_ptr_array_add(Closure->deviceNodes, g_strdup(deviceName));
g_ptr_array_add(Closure->deviceNames, g_strdup(prodName));
g_free(deviceName);
}
IOObjectRelease(scsiObjectIterator);
scsiObjectIterator = getDVDIterator("IOCompactDiscServices");
for (i = 1; (scsiDevice = IOIteratorNext(scsiObjectIterator)) != (io_object_t) NULL; i++) {
deviceName = g_malloc0(80);
sprintf(deviceName,"IOCompactDiscServices/%d",i);
g_ptr_array_add(Closure->deviceNodes, g_strdup(deviceName));
g_ptr_array_add(Closure->deviceNames, g_strdup(deviceName));
g_free(deviceName);
}
if(Closure->deviceNodes->len)
return g_strdup(g_ptr_array_index(Closure->deviceNodes, 0));
else { PrintLog(_("No CD/DVD drives found."));
return NULL;
}
}
DeviceHandle* OpenDevice(char *device)
{
DeviceHandle *dh;
io_iterator_t scsiObjectIterator;
io_object_t scsiDevice;
IOReturn ioReturnValue = kIOReturnSuccess;
int numericalId = 1, i;
char *realdevice = NULL, *tmp;
/* use a naming scheme identical to cdrtools */
realdevice = tmp = strdup(device);
tmp = strchr(tmp, '/');
if (tmp != NULL) {
*tmp++ = '\0';
numericalId = atoi(tmp);
}
dh = g_malloc0(sizeof(DeviceHandle));
dh->senseSize = sizeof(SCSI_Sense_Data);
if(!strcmp(device, "sim-cd"))
{ if(!Closure->simulateCD) /* can happen via resource file / last-device */
{ g_free(dh);
return NULL;
}
dh->simImage = LargeOpen(Closure->simulateCD, O_RDONLY, IMG_PERMS);
if(!dh->simImage)
{ g_free(dh);
Stop(_("Could not open %s: %s"), Closure->simulateCD, strerror(errno));
return NULL;
}
dh->device = g_strdup(device);
return dh;
}
scsiObjectIterator = getDVDIterator(realdevice);
if (scsiObjectIterator == (io_iterator_t) NULL) {
g_free(dh);
Stop(_("Could not open %s (%s)."), device, realdevice);
return NULL;
}
/* look up handle for the selected device */
for (i = 1; (scsiDevice = IOIteratorNext(scsiObjectIterator)) != (io_object_t) NULL; i++) {
if (i == numericalId) {
break;
}
}
unmountDVD(scsiDevice);
dh->plugInInterface = getPlugInInterface(scsiDevice);
if (dh->plugInInterface == NULL) {
g_free(dh);
Stop("Could not get PlugInInterface.");
return NULL;
}
dh->mmcDeviceInterface = getMMCInterface(dh->plugInInterface);
if (dh->mmcDeviceInterface == NULL) {
g_free(dh);
Stop("Could not get MMCDeviceInterface.");
return NULL;
}
(dh->scsiTaskDeviceInterface) = (*dh->mmcDeviceInterface)->GetSCSITaskDeviceInterface(dh->mmcDeviceInterface);
if (dh->scsiTaskDeviceInterface == NULL) {
g_free(dh);
Stop("Could not get SCSITaskDeviceInterface.");
return NULL;
}
ioReturnValue = (*dh->scsiTaskDeviceInterface)->ObtainExclusiveAccess(dh->scsiTaskDeviceInterface);
if (ioReturnValue != kIOReturnSuccess) {
Stop("Couldn't obtain exclusive access to drive.");
return NULL;
}
dh->taskInterface = (*dh->scsiTaskDeviceInterface)->CreateSCSITask(dh->scsiTaskDeviceInterface);
if (dh->taskInterface == NULL) {
Stop("Could not create taskInterface.");
return NULL;
}
(*dh->taskInterface)->SetTimeoutDuration(dh->taskInterface, 120*1000);
dh->device = g_strdup(device);
return dh;
}
void CloseDevice(DeviceHandle *dh)
{
if(dh->simImage)
LargeClose(dh->simImage);
if(dh->canReadDefective)
SetRawMode(dh, MODE_PAGE_UNSET);
if(dh->rawBuffer)
FreeRawBuffer(dh->rawBuffer);
if (dh->taskInterface) {
(*dh->taskInterface)->Release(dh->taskInterface);
}
if (dh->scsiTaskDeviceInterface) {
(*dh->scsiTaskDeviceInterface)->ReleaseExclusiveAccess(dh->scsiTaskDeviceInterface);
(*dh->scsiTaskDeviceInterface)->Release(dh->scsiTaskDeviceInterface);
}
if (dh->mmcDeviceInterface) {
(*dh->mmcDeviceInterface)->Release(dh->mmcDeviceInterface);
}
if(dh->plugInInterface) {
IODestroyPlugInInterface(dh->plugInInterface);
}
if(dh->range) {
g_free(dh->range);
}
if(dh->typeDescr)
g_free(dh->typeDescr);
if(dh->mediumDescr)
g_free(dh->mediumDescr);
if(dh->defects)
FreeBitmap(dh->defects);
g_free(dh);
}
int SendPacket(DeviceHandle *dh, unsigned char *cmd, int cdb_size, unsigned char *buf, int size, Sense *sense, int data_mode)
{
u_int32_t flags = 0;
SCSITaskInterface **taskInterface;
SCSITaskStatus taskStatus = kSCSITaskStatus_No_Status;
IOReturn ioReturnValue;
if(dh->simImage)
return SimulateSendPacket(dh, cmd, cdb_size, buf, size, sense, data_mode);
switch(data_mode) {
case DATA_READ:
flags = kSCSIDataTransfer_FromTargetToInitiator;
break;
case DATA_WRITE:
flags = kSCSIDataTransfer_FromInitiatorToTarget;
break;
case DATA_NONE:
flags = kSCSIDataTransfer_NoDataTransfer;
break;
default:
Stop("illegal data_mode: %d",data_mode);
}
taskInterface = dh->taskInterface;
if (flags == kSCSIDataTransfer_FromTargetToInitiator || flags == kSCSIDataTransfer_FromInitiatorToTarget) {
dh->range = (IOVirtualRange *) g_malloc(sizeof(IOVirtualRange));
dh->range->address = (IOVirtualAddress) buf;
dh->range->length = size;
}
ioReturnValue = (*taskInterface)->SetCommandDescriptorBlock(taskInterface, cmd, cdb_size);
if (ioReturnValue != kIOReturnSuccess) {
Stop("Couldn't set command descriptor block.");
}
if (flags == kSCSIDataTransfer_FromTargetToInitiator || flags == kSCSIDataTransfer_FromInitiatorToTarget) {
ioReturnValue = (*taskInterface)->SetScatterGatherEntries(taskInterface, dh->range, 1, size, flags);
if (ioReturnValue != kIOReturnSuccess) {
Stop("Couldn't set scatter-gather.");
}
}
// Set the timeout in the task
ioReturnValue = ( *taskInterface )->SetTimeoutDuration ( taskInterface, 5000 );
if ( ioReturnValue != kIOReturnSuccess ) {
Stop("Operation timed out.");;
}
ioReturnValue = (*taskInterface)->ExecuteTaskSync(taskInterface, (SCSI_Sense_Data*) sense, &taskStatus, NULL);
if (ioReturnValue != kIOReturnSuccess) {
return -1;
}
if (taskStatus == kSCSITaskStatus_DeliveryFailure && cmd[0] == 0x00) {
return 0;
}
if (taskStatus != kSCSITaskStatus_GOOD) {
return -1;
}
return 0;
}
#endif

View File

@@ -37,6 +37,20 @@
#include <camlib.h>
#endif
#ifdef SYS_DARWIN
#define REAL_VERSION VERSION
#undef VERSION
#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h>
#include <IOKit/IOCFPlugIn.h>
#include <IOKit/scsi/SCSITaskLib.h>
#include <IOKit/storage/IODVDTypes.h>
#include <mach/mach.h>
#include <string.h>
#include <stdlib.h>
#define VERSION REAL_VERSION
#endif
/***
*** Global settings
***/
@@ -113,6 +127,12 @@ typedef struct _DeviceHandle
union ccb *ccb;
#elif defined(SYS_MINGW)
HANDLE fd; /* Windows SPTI file handle for the device */
#elif defined(SYS_DARWIN)
IOCFPlugInInterface **plugInInterface;
MMCDeviceInterface **mmcDeviceInterface;
SCSITaskDeviceInterface **scsiTaskDeviceInterface;
SCSITaskInterface **taskInterface;
IOVirtualRange *range;
#endif
/*

View File

@@ -30,7 +30,7 @@
#include "shellapi.h"
#endif
#ifndef SYS_MINGW
#if !defined(SYS_MINGW) && !defined(SYS_DARWIN)
static void send_errormsg(int fd, char *format, ...)
{ va_list argp;
char *msg;
@@ -63,7 +63,7 @@ void GuiShowURL(char *target)
int hyperlink = 0;
char *path;
#ifndef SYS_MINGW
#if !defined(SYS_MINGW) && !defined(SYS_DARWIN)
pid_t pid;
char *msg;
int err_pipe[2]; /* child may send down err msgs to us here */
@@ -105,15 +105,29 @@ void GuiShowURL(char *target)
/* Okay, Billy wins big time here ;-) */
ShellExecute(NULL, "open", path, NULL, NULL, SW_SHOWNORMAL);
#elif defined(SYS_DARWIN)
char command[256];
snprintf(command, sizeof(command), "open \"%s\"", path);
system(command);
#else
/* fork xdg-open */
result = pipe2(err_pipe, O_CLOEXEC);
result = pipe(err_pipe);
if(result == -1)
{ GuiCreateMessage(_("Could not create pipe before fork"), GTK_MESSAGE_ERROR);
return;
}
result = fcntl(err_pipe[0], F_SETFL, O_CLOEXEC);
if(result == -1)
{ GuiCreateMessage(_("Could not set pipe flags before fork"), GTK_MESSAGE_ERROR);
return;
}
result = fcntl(err_pipe[1], F_SETFL, O_CLOEXEC);
if(result == -1)
{ GuiCreateMessage(_("Could not set pipe flags before fork"), GTK_MESSAGE_ERROR);
return;
}
pid = fork();
if(pid == -1)

View File

@@ -81,8 +81,8 @@ static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer dat
Closure->invisibleDash = g_strdup_printf("<span color=\"#%02x%02x%02x\">-</span>",
bg->red>>8, bg->green>>8, bg->blue>>8);
GuiAboutTextWithLink(box, _("This is <b>v0.79.10-pl1</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, a Windows build, an option to produce bigger BD-R RS03,\n"
GuiAboutTextWithLink(box, _("This is <b>v0.79.10-pl2</b>. The [patchlevel series] are enhanced from the last upstream release.\n"
"We add support for BD-R TL/QL, Windows and MacOS builds, an option to produce bigger BD-R RS03,\n"
"images, support for stripping ECC from ISOs, re-enabled adaptive reading (except for RS03), and more.\n"
"\n"
"Please refer to the <i>Help &gt; Change log</i> menu for all the details."), "https://github.com/speed47/dvdisaster");