diff options
author | Marti Maria <info@littlecms.com> | 2011-05-24 16:00:20 +0200 |
---|---|---|
committer | Marti Maria <info@littlecms.com> | 2011-05-24 16:00:20 +0200 |
commit | a4d8ee129fdd10b980e8a77badbb45df786c48ef (patch) | |
tree | 21d875fba14de1625d662fba6a1271c4c22ed4d1 | |
parent | cfafa7495a0e2d3bc4429010f0cbdd701ea2cb98 (diff) | |
download | lcms2-a4d8ee129fdd10b980e8a77badbb45df786c48ef.tar.gz |
Testbed for dictionary tag
-rw-r--r-- | src/cmstypes.c | 7 | ||||
-rw-r--r-- | testbed/testcms2.c | 74 |
2 files changed, 79 insertions, 2 deletions
diff --git a/src/cmstypes.c b/src/cmstypes.c index 462e85c..5fd702f 100644 --- a/src/cmstypes.c +++ b/src/cmstypes.c @@ -4939,6 +4939,13 @@ cmsBool ReadOneMLUC(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, _cm { cmsUInt32Number nItems = 0; + // A way to get null MLUCs + if (e -> Sizes[i] == 0) { + + *mlu = NULL; + return TRUE; + } + if (!io -> Seek(io, e -> Offsets[i])) return FALSE; *mlu = (cmsMLU*) Type_MLU_Read(self, io, &nItems, e ->Sizes[i]); diff --git a/testbed/testcms2.c b/testbed/testcms2.c index 2d108d7..4e6501b 100644 --- a/testbed/testcms2.c +++ b/testbed/testcms2.c @@ -4863,6 +4863,75 @@ cmsInt32Number CheckDictionary16(cmsInt32Number Pass, cmsHPROFILE hProfile) } + +static +cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile) +{ + cmsHANDLE hDict; + const cmsDICTentry* e; + cmsMLU* DisplayName; + char Buffer[256]; + cmsInt32Number rc = 1; + + switch (Pass) { + + case 1: + hDict = cmsDictAlloc(DbgThread()); + + DisplayName = cmsMLUalloc(DbgThread(), 0); + + cmsMLUsetWide(DisplayName, "en", "US", L"Hello, world"); + cmsMLUsetWide(DisplayName, "es", "ES", L"Hola, mundo"); + cmsMLUsetWide(DisplayName, "fr", "FR", L"Bonjour, le monde"); + cmsMLUsetWide(DisplayName, "ca", "CA", L"Hola, mon"); + + cmsDictAddEntry(hDict, L"Name", L"String", DisplayName, NULL); + cmsMLUfree(DisplayName); + + cmsDictAddEntry(hDict, L"Name2", L"12", NULL, NULL); + if (!cmsWriteTag(hProfile, cmsSigMetaTag, hDict)) return 0; + cmsDictFree(hDict); + + return 1; + + + case 2: + + hDict = cmsReadTag(hProfile, cmsSigMetaTag); + if (hDict == NULL) return 0; + + e = cmsDictGetEntryList(hDict); + if (memcmp(e ->Name, L"Name2", sizeof(wchar_t) * 5) != 0) return 0; + if (memcmp(e ->Value, L"12", sizeof(wchar_t) * 2) != 0) return 0; + e = cmsDictNextEntry(e); + if (memcmp(e ->Name, L"Name", sizeof(wchar_t) * 4) != 0) return 0; + if (memcmp(e ->Value, L"String", sizeof(wchar_t) * 5) != 0) return 0; + + cmsMLUgetASCII(e->DisplayName, "en", "US", Buffer, 256); + if (strcmp(Buffer, "Hello, world") != 0) rc = 0; + + + cmsMLUgetASCII(e->DisplayName, "es", "ES", Buffer, 256); + if (strcmp(Buffer, "Hola, mundo") != 0) rc = 0; + + + cmsMLUgetASCII(e->DisplayName, "fr", "FR", Buffer, 256); + if (strcmp(Buffer, "Bonjour, le monde") != 0) rc = 0; + + + cmsMLUgetASCII(e->DisplayName, "ca", "CA", Buffer, 256); + if (strcmp(Buffer, "Hola, mon") != 0) rc = 0; + + if (rc == 0) + Fail("Unexpected string '%s'", Buffer); + return 1; + + default:; + } + + return 0; +} + static cmsInt32Number CheckRAWtags(cmsInt32Number Pass, cmsHPROFILE hProfile) { @@ -5026,6 +5095,7 @@ cmsInt32Number CheckProfileCreation(void) SubTest("Dictionary meta tags"); if (!CheckDictionary16(Pass, h)) return 0; + if (!CheckDictionary24(Pass, h)) return 0; if (Pass == 1) { cmsSaveProfileToFile(h, "alltags.icc"); @@ -7439,7 +7509,7 @@ void CheckProfileZOO(void) #endif - +#if 0 #define TYPE_709 709 static double Rec709Math(int Type, const double Params[], double R) { double Fun; @@ -7466,7 +7536,7 @@ return Fun; cmsPluginParametricCurves NewCurvePlugin = { { cmsPluginMagicNumber, 2000, cmsPluginParametricCurveSig, NULL }, 1, {TYPE_709}, {5}, Rec709Math}; - +#endif |