From 20fe7efb4d37fedf807416c16d74d51d893ea48a Mon Sep 17 00:00:00 2001 From: Andy McFadden Date: Mon, 11 Jan 2016 09:11:30 -0800 Subject: [PATCH] Fix extraction of disk images A recent change was causing NufxLib to try to create a fake empty data thread in records that had nothing but a disk image thread. --- nufxlib/ChangeLog.txt | 3 +++ nufxlib/Record.c | 6 ++++++ nufxlib/Thread.c | 3 +++ nulib2/State.c | 2 +- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/nufxlib/ChangeLog.txt b/nufxlib/ChangeLog.txt index e84eaed..9ca2f6d 100644 --- a/nufxlib/ChangeLog.txt +++ b/nufxlib/ChangeLog.txt @@ -1,3 +1,6 @@ +2016/01/11 fadden + - Fix handling of disk images (broken by previous change). + 2015/12/26 fadden - Fix handling of entries with missing threads. - Improve handling of Mac OS X file type attributes. diff --git a/nufxlib/Record.c b/nufxlib/Record.c index 858cf4d..6c85684 100644 --- a/nufxlib/Record.c +++ b/nufxlib/Record.c @@ -1586,6 +1586,9 @@ NuError Nu_StreamExtract(NuArchive* pArchive) needFakeData = false; } else if (pThread->thThreadKind == kNuThreadKindRsrcFork) { needFakeRsrc = false; + } else if (pThread->thThreadKind == kNuThreadKindDiskImage) { + /* needFakeRsrc shouldn't be set, but clear anyway */ + needFakeData = needFakeRsrc = false; } err = Nu_ExtractThreadBulk(pArchive, &tmpRecord, pThread); if (err == kNuErrSkipped) { @@ -1723,6 +1726,9 @@ static NuError Nu_ExtractRecordByPtr(NuArchive* pArchive, NuRecord* pRecord) needFakeData = false; } else if (pThread->thThreadKind == kNuThreadKindRsrcFork) { needFakeRsrc = false; + } else if (pThread->thThreadKind == kNuThreadKindDiskImage) { + /* needFakeRsrc shouldn't be set, but clear anyway */ + needFakeData = needFakeRsrc = false; } err = Nu_ExtractThreadBulk(pArchive, pRecord, pThread); if (err == kNuErrSkipped) { diff --git a/nufxlib/Thread.c b/nufxlib/Thread.c index 0ad4ba0..6480bfd 100644 --- a/nufxlib/Thread.c +++ b/nufxlib/Thread.c @@ -223,6 +223,9 @@ NuError Nu_ReadThreadHeaders(NuArchive* pArchive, NuRecord* pRecord, needFakeData = false; } else if (pThread->thThreadKind == kNuThreadKindRsrcFork) { needFakeRsrc = false; + } else if (pThread->thThreadKind == kNuThreadKindDiskImage) { + /* needFakeRsrc shouldn't be set, but clear anyway */ + needFakeData = needFakeRsrc = false; } } diff --git a/nulib2/State.c b/nulib2/State.c index 29a584b..832887c 100644 --- a/nulib2/State.c +++ b/nulib2/State.c @@ -9,7 +9,7 @@ #include "NuLib2.h" -static const char* gProgramVersion = "3.1.0-a1"; +static const char* gProgramVersion = "3.1.0-a2"; /*