FIX: valgrind reported this one:
UMR ==23598== Use of uninitialised value of size 4
==23598== at 0x77C5B7: isalpha (in /lib/tls/libc-2.3.2.so)
==23598== by 0x3C2CAB2E: gdcmDocument::FindDocEntryVR(gdcmDocEntry*) (gdcmDocument.cxx:1783)
==23598== by 0x3C2CCE83: gdcmDocument::ReadNextDocEntry() (gdcmDocument.cxx:2556)
==23598== by 0x3C2C985C: gdcmDocument::ParseSQ(gdcmSeqEntry*, long, long, bool) (gdcmDocument.cxx:1422)
==23598== by 0x3C2C9792: gdcmDocument::ParseDES(gdcmDocEntrySet*, long, long, bool) (gdcmDocument.cxx:1391)
==23598== by 0x3C2C5858: gdcmDocument::gdcmDocument(std::string const&, bool, bool, bool) (gdcmDocument.cxx:130)
==23598== by 0x3C2B19FA: gdcmHeader::gdcmHeader(std::string const&, bool, bool, bool) (gdcmHeader.cxx:47)
==23598== by 0x8053824: PrintAllDocument(int, char**) (PrintAllDocument.cxx:34)
==23598== by 0x8050D3E: main (gdcmTests.cxx:173)
==23598==
BUG: On recent debian system, the dirent structure is not fed properly. Furthermore the scandir is only a BSD extension and not POSIX. So rewrote Explore function to be POSIX and works on recent debian system. The Explore function will also now return the number of files read
* src/gdcmCommon.h, gdcmDict.cxx, gdcmTS.cxx : bug fix for msvc6 compilation
* src/gdcmDebug.[h|cxx] : bug fix for msvc6 compilation. Replace the dbg
variable (instance of gdcmDebug) by a definition macro, and the instance
is now in static in the gdcmDebug class
* src/gdcmSQItem.h : (FIXME) remove an undefined method
* Test/PrintAllDocument.cxx : bug fix in the result of the test
-- BeNours
* WARNING: ctest now depends more tightly on gdcmData. You should
check out gdcmData properly for things to run smoothly...
* src/gdcmDocument.cxx MAX_SIZE_LOAD_ELEMENT_VALUE is set back to 0xfff
(4096) for "ctest -R TestAllEntryVerify" to be able to run (i.e.
we need the pixels not be loaded in order to use the ValEntry
that displays position and size).
* Test/TestAllEntryVerify.cxx a new low level test now seems fair.
This is a C++ based equivalent of gdcmPython/testSuite.py that should
be deprecated. If you have any doubts about the advantages of a
modern scripting language (read Python) versus grass root C++ (i.e.
without lex + yacc, because of gdcm commitement to MS-VC++, sighhh),
I suggest you compare TestAllEntryVerify.cxx (639 lines, without the
reference file gdcmData/TestAllEntryVerifyReference.txt) and testSuite.py.
Anyhow, consider documenting the gdcmData images in
gdcmData/TestAllEntryVerifyReference.txt (and please run ctest before
commiting changes).
* Test/CMakeLists.txt:
- now uses TestAllEntryVerify.cxx
- specific comments on oldACR00001.ima (now renamed in gdcmData
to SIEMENS_GBS_III-16-ACR_NEMA_1.acr) moved away to
gdcmData/TestAllEntryVerifyReference.txt
* TODO updated.
- guint16 and guint32 removed. Use ISO C uint16_t, uint32_t instead.
- TagKey renamed to gdcmTagKey (for external usage)
- VRKey renamed to gdcmVRKey (for external usage)
- removal of typedef duplication.
- Removed all unecessary inline keyword from class inline definitions.
- Some method|function(void) declarations replaced with method|function().
* src/jpeg/libijg12/jdhuff12.c:
- printf polluting ctest removed.
- TAB removal for comminting
* Test:
- TestAllReadCompareDicom.cxx: added a test that compares all the
images in gdcmDataImages.h with corresponding images in
gdcmData/BaselineDicom/. When baseline images are not present
this test creates them.
Note: we need to validate each reference image, but before that
I'd like to rename them with a more explicit name...
- CMakeLists.txt: changed accordingly.
* Example/*.cxx: examples now only include gdcm.h (as opposed to
including each header needed).
* Test/*.cxx and Example/*.cxx: moved some examples away from the
test suite to the Example directory. Are concerned:
- PrintHeader.cxx
- TestDcm2Acr.cxx
- TestFindTags.cxx
- TestWrite.cxx was
- TestWriteSimple.cxx
* Test/CMakeLists.txt: added some comments on reasons for black listing
image gdcmData/oldACR00001.ima
frog [Wed, 30 Jun 2004 00:10:58 +0000 (00:10 +0000)]
* Test/CmakeList.txt: removed the following from black list (to be coherent
with removal from gdcmData):
- gdcm-MR-PHILIPS-16-Multi-Seq.fixed.dcm
- gdcm-MR-PHILIPS-16.dcm
- US.3405.1.dcm
Added the following because after last cvs update, they cause
ctest -R TestReadWriteReadCompare
to segfault:
- gdcm-MR-SIEMENS-16-1.acr
- oldACR00001.ima
frog [Tue, 29 Jun 2004 23:43:19 +0000 (23:43 +0000)]
* Test/TestReadWriteReadCompare.cxx was properly written (with a call
to gdcmFile::SetImageData()) BUT since gdcmFile is brain damaged (see
new comments in this file) we temporarily (sigh) move to a weaker
form of test...
* Test/CmakeList.txt: with the change to Test/TestReadWriteReadCompare.cxx
we don't need to black list the following images anymore:
- 8BitsUncompressedColor.dcm
- OT-PAL-8-face.dcm
- US-PAL-8-10x-echo.dcm
* src/gdcmDocument.[h|cxx]: RE-Reverting to version 1.42 with the proper
fixes and the beautified code ;-)
This fixes the bug introduced in version 1.42 (when beautifying)
that made the parsing of 8BitsRunLengthColor.dcm unproper.
Note: ctest was blind to this bug (this means we need to still
improve the test suite). The bug could be detected by using
gdcmbin/bin/PrintDocument $GDCM_DATA/8BitsRunLengthColor.dcm
or by using
gdcmbin/bin/ReadWrite $GDCM_DATA/8BitsRunLengthColor.dcm
and by displaying the (garbage) produced file temp.XDCM...
frog [Tue, 29 Jun 2004 14:00:37 +0000 (14:00 +0000)]
* Test/TestWriteRead.cxx and TestReadWrite.cxx merged (because of
redundancy) to added Test/TestReadWriteReadCompare.cxx
* Test/CmakeList.txt: because the compare test of
Test/TestReadWriteReadCompare.cxx fails, the following images are
black listed: - 8BitsUncompressedColor.dcm
- OT-PAL-8-face.dcm
- US-PAL-8-10x-echo.dcm
frog [Tue, 29 Jun 2004 11:27:13 +0000 (11:27 +0000)]
* src/gdcmDocument.cxx: for broken (non DICOM V3 conformal) images
(e.g. gdcm-JPEG-LossLess3a.dcm see comments in
gdcm/gdcmPython/testSuite.py for details) ::FindDocLengthOB() had
and ad-hoc kludge. This kludge is now removed, and on encountering
such an image (OB field brain damaged) we set errno. Then in
::FindDocLength() we "fix" the length as being ALL what remains
in the file (until EOF). We then proceed, hoping for the best...
This fixes a SegFault in ShowDicom when trying to write such an
image.
* Test/CmakeList.txt: 8BitsRunLengthColor.dcm is now blacklisted
(because TestWriteRead breaks on it, after a non conformal commit?).
ctest now runs properly, except for MakeDicomDir (which was allways
broken) and the Python related stuff (still not fixed).
jpr [Mon, 28 Jun 2004 09:30:58 +0000 (09:30 +0000)]
- now Write drops LUT Descriptors and LUTs (if any) when SamplesPerPixel =3
- now Write is no longer confused by 'BitsAllocated = 12" and 'BitsStored=12"
malaterre [Sat, 26 Jun 2004 04:09:32 +0000 (04:09 +0000)]
ENH: Some cosmetic cleanup of gdcmFile, main changes are: lgrTotal -> ImageDataSize / lgrTotaleRaw -> ImageDataSizeRaw, it matches then there accessors (simple et de bon gout in french).
* I also marked some lines as dangerous (mem leaks), and a comment for 12 bits images
* Added conversion table in DEVELOPPERS
* Also untabify, checkTabs is working :P
malaterre [Fri, 25 Jun 2004 20:48:25 +0000 (20:48 +0000)]
ENH: * 3'tabify
* Fix bug where gdcmHeader was passed a const char*
* use const_iterator where possible
* made some method const correct
* moved a method in class (inline)
...hopefully should be more readable
jpr [Fri, 25 Jun 2004 15:42:17 +0000 (15:42 +0000)]
Add a 'test' - reads an image
- writes it as an uncompressed, (RGB if necessary), Explicit VR
- reads it
- compares the PixelData Length and the Pixels.
- The, *we* cry :
frog [Fri, 25 Jun 2004 12:56:38 +0000 (12:56 +0000)]
* Test/PrintAllDocument.cxx: looping on files is now effective. It used to
loop on the same image until memory went out.
Note: this means we still have gobs of memory loss in PrintDocument
* src/gdcmDocument.cxx: fixes problem on parsing on file
gdcmData/16BitsJpegLosslessGrayScale.dcm.
malaterre [Fri, 25 Jun 2004 03:06:37 +0000 (03:06 +0000)]
EMH: *Add PrintAllDocument, dog slow right now
*Moved PrintDocument as example instead
* vtkGdcmReader was free'ing instead of delete[]'ing
* 3'tabulify ShowDicom / PrintAllDocument
* Minor comments for -W -Wall compilation
jpr [Thu, 24 Jun 2004 18:03:14 +0000 (18:03 +0000)]
Jean-Pierre Roux
FIX : Write - All the Sequences and Sequence Item are now written
as 'no length' stuff, and a Sequence Delimitor aor an Item Delimitor
is added a the end, when necessary.
- A lot of brain-damaged images, that were read correctly are
now written correctly
- length compatible BinEntry are now loaded correctly
(even for odd groups)
- Note : only Explicit Value Representation was checked.
(question : is implicit VR really necessary for gdcm ?)
jpr [Wed, 23 Jun 2004 09:30:22 +0000 (09:30 +0000)]
gdcmDocument.cxx
- Now we do recognize the JpegLossLess format (there was a misstyping in
code 'beautyfication' :-(
- Now we automaticaticaly load the Luts, if any
jpr [Tue, 22 Jun 2004 13:47:33 +0000 (13:47 +0000)]
2004-06-22 Jean-Pierre Roux
In order : to write Sequences, whatever their imbrication level,
: to allow user to create his own Sequences
a lot of modif where necessary (adding, moving, or virtualising methods)
frog [Mon, 21 Jun 2004 12:38:28 +0000 (12:38 +0000)]
* src/gdcmBinEntry.cxx, gdcmValEntry.cxx: gdcmBinEntry::Print() now
properly calls gdcmValEntry::Print() (that was weed out from
code related to gdcmBinEntry).
frog [Mon, 21 Jun 2004 08:47:13 +0000 (08:47 +0000)]
* Test/TestWriteSimple.cxx: fix to gdcmHeader-gdcmHeaderHelper revamping.
The default constructor invoked by the line
gdcmHeader *f1 = new gdcmHeader( header );
was gdcmHeader::gdcmHeader(bool) instead of the expected
gdcmHeader::gdcmHeader(std::string const &, bool = false, bool, bool).
Hence the parsing wasn't executed... See also below.
* src/gdcmHeader.h: the declaration of gdcmHeader::gdcmHeader(bool)
as explicit constructor didn't do the trick to fix the above problem.
Could anyone explain why ? --- Frog
malaterre [Mon, 21 Jun 2004 04:43:01 +0000 (04:43 +0000)]
ENH: Ok second chunk of patch, tests seems to go smoothly
1. Compile with CMAKE_CXX_FLAGS (need to turn advanced ON) = -W -Wall -Werror
2. Add two virtual to destructor, with a bit of luck these were the leaks reported by frog
malaterre [Mon, 21 Jun 2004 04:18:23 +0000 (04:18 +0000)]
ENH:First chunk of patch:
1. Get rid of gdcmHeaderHelper, the class was only gdcmHeader with nice default values, no big deal
2. Left a legacy mode where you can still use the class gdcmHeaderHelper
3. Some minor clean up, but all the tests are passing
frog [Sun, 20 Jun 2004 18:08:46 +0000 (18:08 +0000)]
* Erroneous leading white fix:
- src/gdcmDict.cxx: getline(from,xxx) doesn't remove the leading
white[s] (as opposed to from >> xxx, that removes it [them].
- src/gdcmTS.cxx: ditto.
- gdcmPython/testSuite.py: dirty related kludge removed.
* src/*: remaining references to gdcmParser removed.
* src/*[cxx|h]: added copy[way]left header. --- Frog
frog [Sat, 19 Jun 2004 23:51:03 +0000 (23:51 +0000)]
* In order to fix memory leaks:
- Test/TestWriteSimple.cxx: added cleaning of free store through
some delete calls.
- src/gdcmBinEntry.cxx: fix to avoid SegFault.
- src/gdcmDicomDir.[cxx|h]: fixed initialisation in constructor
gdcmDicomDir::gdcmDicomDir(bool) [either the constructor itself
(through the call to ::AddDicomDirMeta()) or the destructor
would crash when deleting uninitialized ::metaElems].
- src/gdcmDictEntry.cxx: annotation of ununderstood memory leak.
- src/gdcmDocument.cxx:
-- ::~gdcmDocument() destructor now cleans up all dictionary entries
from dynamic stores.
-- ::ParseDES() misplaced deletion of temporary NewDocEntry
was causing memory leaks.
- src/gdcmSQItem.cxx:
-- ::~gdcmSQItem() dummy code cleaned (learned that deletion is
cleanly handled with polymophism: sorry but my milage is low).
-- ::SetEntryByNumber(string, guint16, guint16) now cleanly allocates
a gdcmValENtry, and makes no assumption on type (gdcmDocEntry,
gdcmSeqEntry vs gdcmValEntry) of existing entry (when present).
This avoids SegFaulting.
- src/gdcmSQItem.h: coding style.
* Conclusion:
- Test/TestWriteSimple still severely sucks. The output image content
(when $(GDCMDATA_HOME)/012345.002.050.dcm in input) is brain
damaged when displayed with vtkgdcmViewer.
- on memory leaks: TestWriteSimple leaks really less (see entry
of 2004-06-18 in Changelog file for the call to valgrind).
- on segfaults: ctest now passes all the tests but one (no more
segfaults).