[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [k3b/multisession] libk3b/projects: Fix multisession implementation as Thomas suggested
From: Leslie Zhai <xiangzhai83 () gmail ! com>
Date: 2016-09-23 2:40:27
Message-ID: E1bnGPb-00020L-Fn () code ! kde ! org
[Download RAW message or body]
Git commit 076340502f14a5ecd928551500392e5f38dd2c41 by Leslie Zhai.
Committed on 23/09/2016 at 02:35.
Pushed by lesliezhai into branch 'multisession'.
Fix multisession implementation as Thomas suggested
Summary:
- Use device driver's path instead of stdin
- Stay module DataMultiSessionParameterJob so CdrskinIsoImager can use
that
- Throw error info message to user
CCBUG: 367639
M +1 -0 libk3b/projects/datacd/k3bdatajob.cpp
M +30 -0 libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp
M +0 -41 libk3b/projects/datacd/k3bisoimager.cpp
M +8 -2 libk3b/projects/k3bgrowisofswriter.cpp
http://commits.kde.org/k3b/076340502f14a5ecd928551500392e5f38dd2c41
diff --git a/libk3b/projects/datacd/k3bdatajob.cpp \
b/libk3b/projects/datacd/k3bdatajob.cpp index b3b4ebd..d06407c 100644
--- a/libk3b/projects/datacd/k3bdatajob.cpp
+++ b/libk3b/projects/datacd/k3bdatajob.cpp
@@ -176,6 +176,7 @@ void K3b::DataJob::prepareWriting()
if( !d->doc->onlyCreateImages() &&
( d->multiSessionParameterJob->usedMultiSessionMode() == \
K3b::DataDoc::CONTINUE ||
d->multiSessionParameterJob->usedMultiSessionMode() == \
K3b::DataDoc::FINISH ) ) { + // TODO: KDEBUG-367639
unsigned int nextSessionStart = \
d->multiSessionParameterJob->nextSessionStart();
// for some reason cdrdao needs 150 additional sectors in the ms info
if( writingApp() == K3b::WritingAppCdrdao ) {
diff --git a/libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp \
b/libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp index 45c4529..000b528 \
100644
--- a/libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp
+++ b/libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp
@@ -280,6 +280,36 @@ bool \
K3b::DataMultiSessionParameterJob::setupMultiSessionParameters() }
d->previousSessionStart = lastSessionStart;
+ // TODO: KDEBUG-367639
+ if (nextSessionStart == 0) {
+ int imgfd = -1;
+ // Validate file descriptor
+ imgfd = open(d->doc->burner(), O_RDONLY);
+ if (imgfd != -1) {
+ char buf[6] = { '\0' };
+ if (lseek(imgfd, 32 * 1024, SEEK_SET) != -1) {
+ if (read(imgfd, buf, sizeof(buf)) == sizeof(buf)) {
+ // Check for the ISO 9660 magic number
+ if (buf[0] == 0x01 && buf[1] == 'C' && buf[2] == 'D' &&
+ buf[3] == '0' && buf[4] == '0' && buf[5] == '1') {
+ if (lseek(imgfd, 32 * 1024 + 80, SEEK_SET) != -1) {
+ uint8_t buf[4] = { '\0' };
+ if (read(imgfd, buf, sizeof(buf)) == sizeof(buf)) {
+ // Interpret the read bytes as little-endian number
+ nextSessionStart = buf[0] | (buf[1] << 8) | (buf[2] \
<< 16) | (buf[3] << 24); + // Round up to full \
multipes of 16 + nextSessionStart += 15;
+ nextSessionStart /= 16;
+ nextSessionStart *= 16;
+ }
+ }
+ }
+ }
+ }
+ close(imgfd);
+ imgfd = -1;
+ }
+ }
d->nextSessionStart = nextSessionStart;
return true;
diff --git a/libk3b/projects/datacd/k3bisoimager.cpp \
b/libk3b/projects/datacd/k3bisoimager.cpp index 74c956b..28fcae5 100644
--- a/libk3b/projects/datacd/k3bisoimager.cpp
+++ b/libk3b/projects/datacd/k3bisoimager.cpp
@@ -473,46 +473,6 @@ void K3b::IsoImager::setMultiSessionInfo( const QString& info, \
K3b::Device::Devi {
m_multiSessionInfo = info;
m_device = dev;
- if (m_multiSessionInfo.isEmpty())
- return;
- QStringList ms = m_multiSessionInfo.split(',');
- if (ms.size() != 2)
- return;
- if (ms[0] != "0" && ms[1] != "0")
- return;
- int imgfd = -1;
- char* in_image = "/dev/fd/0";
- // Validate file descriptor
- if (sscanf(in_image, "/dev/fd/%u", &imgfd) == 1)
- imgfd = dup(imgfd);
- else
- imgfd = open(in_image, O_RDONLY);
- if (imgfd == -1)
- return;
- char buf[6] = { '\0' };
- if (lseek(imgfd, 32 * 1024, SEEK_SET) != -1) {
- if (read(imgfd, buf, sizeof(buf)) == sizeof(buf)) {
- // Check for the ISO 9660 magic number
- if (buf[0] == 0x01 && buf[1] == 'C' && buf[2] == 'D' &&
- buf[3] == '0' && buf[4] == '0' && buf[5] == '1') {
- if (lseek(imgfd, 32 * 1024 + 80, SEEK_SET) != -1) {
- uint32_t c2;
- uint8_t buf[4] = { '\0' };
- if (read(imgfd, buf, sizeof(buf)) == sizeof(buf)) {
- // Interpret the read bytes as little-endian number
- c2 = buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << \
24);
- // Round up to full multipes of 16
- c2 += 15;
- c2 /= 16;
- c2 *= 16;
- m_multiSessionInfo = ms[0] + "," + QString::number(c2);
- }
- }
- }
- }
- }
- close(imgfd);
- imgfd = -1;
}
@@ -541,7 +501,6 @@ static void truncateTheHardWay( QString& s, int max )
bool K3b::IsoImager::addMkisofsParameters( bool printSize )
{
- // TODO: KDEBUG-367639
// add multisession info
if( !m_multiSessionInfo.isEmpty() ) {
*m_process << "-cdrecord-params" << m_multiSessionInfo;
diff --git a/libk3b/projects/k3bgrowisofswriter.cpp \
b/libk3b/projects/k3bgrowisofswriter.cpp index d3d4d85..2c685ac 100644
--- a/libk3b/projects/k3bgrowisofswriter.cpp
+++ b/libk3b/projects/k3bgrowisofswriter.cpp
@@ -197,8 +197,14 @@ bool K3b::GrowisofsWriter::prepareProcess()
else
s += d->image;
- if (d->multiSession && !d->multiSessionInfo.isEmpty())
- d->process << "-C" << d->multiSessionInfo;
+ if (d->multiSession && !d->multiSessionInfo.isEmpty()) {
+ QStringList ms = d->multiSessionInfo.split(',');
+ if (ms.size() == 2 && ms[1] != 0) {
+ d->process << "-C" << d->multiSessionInfo;
+ } else {
+ emit infoMessage(i18n("Medium is not of multi-session type and does not \
contain ISO 9660. Cannot emulate multi-session on it."), MessageError); + }
+ }
if( d->multiSession )
d->process << "-M";
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic