< prev index next >

src/share/native/sun/java2d/cmm/lcms/cmsnamed.c

Print this page
rev 12531 : 8171261: Stability fixes for lcms
Reviewed-by: serb, vadim, mschoene


 504 }
 505 
 506 
 507 // Named color lists --------------------------------------------------------------------------------------------
 508 
 509 // Grow the list to keep at least NumElements
 510 static
 511 cmsBool  GrowNamedColorList(cmsNAMEDCOLORLIST* v)
 512 {
 513     cmsUInt32Number size;
 514     _cmsNAMEDCOLOR * NewPtr;
 515 
 516     if (v == NULL) return FALSE;
 517 
 518     if (v ->Allocated == 0)
 519         size = 64;   // Initial guess
 520     else
 521         size = v ->Allocated * 2;
 522 
 523     // Keep a maximum color lists can grow, 100K entries seems reasonable
 524     if (size > 1024*100) return FALSE;




 525 
 526     NewPtr = (_cmsNAMEDCOLOR*) _cmsRealloc(v ->ContextID, v ->List, size * sizeof(_cmsNAMEDCOLOR));
 527     if (NewPtr == NULL)
 528         return FALSE;
 529 
 530     v ->List      = NewPtr;
 531     v ->Allocated = size;
 532     return TRUE;
 533 }
 534 
 535 // Allocate a list for n elements
 536 cmsNAMEDCOLORLIST* CMSEXPORT cmsAllocNamedColorList(cmsContext ContextID, cmsUInt32Number n, cmsUInt32Number ColorantCount, const char* Prefix, const char* Suffix)
 537 {
 538     cmsNAMEDCOLORLIST* v = (cmsNAMEDCOLORLIST*) _cmsMallocZero(ContextID, sizeof(cmsNAMEDCOLORLIST));
 539 
 540     if (v == NULL) return NULL;
 541 
 542     v ->List      = NULL;
 543     v ->nColors   = 0;
 544     v ->ContextID  = ContextID;
 545 
 546     while (v -> Allocated < n){
 547         if (!GrowNamedColorList(v)) return NULL;



 548     }
 549 
 550     strncpy(v ->Prefix, Prefix, sizeof(v ->Prefix)-1);
 551     strncpy(v ->Suffix, Suffix, sizeof(v ->Suffix)-1);
 552     v->Prefix[32] = v->Suffix[32] = 0;
 553 
 554     v -> ColorantCount = ColorantCount;
 555 
 556     return v;
 557 }
 558 
 559 // Free a list
 560 void CMSEXPORT cmsFreeNamedColorList(cmsNAMEDCOLORLIST* v)
 561 {
 562     if (v == NULL) return;
 563     if (v ->List) _cmsFree(v ->ContextID, v ->List);
 564     _cmsFree(v ->ContextID, v);
 565 }
 566 
 567 cmsNAMEDCOLORLIST* CMSEXPORT cmsDupNamedColorList(const cmsNAMEDCOLORLIST* v)




 504 }
 505 
 506 
 507 // Named color lists --------------------------------------------------------------------------------------------
 508 
 509 // Grow the list to keep at least NumElements
 510 static
 511 cmsBool  GrowNamedColorList(cmsNAMEDCOLORLIST* v)
 512 {
 513     cmsUInt32Number size;
 514     _cmsNAMEDCOLOR * NewPtr;
 515 
 516     if (v == NULL) return FALSE;
 517 
 518     if (v ->Allocated == 0)
 519         size = 64;   // Initial guess
 520     else
 521         size = v ->Allocated * 2;
 522 
 523     // Keep a maximum color lists can grow, 100K entries seems reasonable
 524     if (size > 1024 * 100) {
 525         _cmsFree(v->ContextID, (void*) v->List);
 526         v->List = NULL;
 527         return FALSE;
 528     }
 529 
 530     NewPtr = (_cmsNAMEDCOLOR*) _cmsRealloc(v ->ContextID, v ->List, size * sizeof(_cmsNAMEDCOLOR));
 531     if (NewPtr == NULL)
 532         return FALSE;
 533 
 534     v ->List      = NewPtr;
 535     v ->Allocated = size;
 536     return TRUE;
 537 }
 538 
 539 // Allocate a list for n elements
 540 cmsNAMEDCOLORLIST* CMSEXPORT cmsAllocNamedColorList(cmsContext ContextID, cmsUInt32Number n, cmsUInt32Number ColorantCount, const char* Prefix, const char* Suffix)
 541 {
 542     cmsNAMEDCOLORLIST* v = (cmsNAMEDCOLORLIST*) _cmsMallocZero(ContextID, sizeof(cmsNAMEDCOLORLIST));
 543 
 544     if (v == NULL) return NULL;
 545 
 546     v ->List      = NULL;
 547     v ->nColors   = 0;
 548     v ->ContextID  = ContextID;
 549 
 550     while (v -> Allocated < n) {
 551         if (!GrowNamedColorList(v)) {
 552             _cmsFree(ContextID, (void*) v);
 553             return NULL;
 554         }
 555     }
 556 
 557     strncpy(v ->Prefix, Prefix, sizeof(v ->Prefix)-1);
 558     strncpy(v ->Suffix, Suffix, sizeof(v ->Suffix)-1);
 559     v->Prefix[32] = v->Suffix[32] = 0;
 560 
 561     v -> ColorantCount = ColorantCount;
 562 
 563     return v;
 564 }
 565 
 566 // Free a list
 567 void CMSEXPORT cmsFreeNamedColorList(cmsNAMEDCOLORLIST* v)
 568 {
 569     if (v == NULL) return;
 570     if (v ->List) _cmsFree(v ->ContextID, v ->List);
 571     _cmsFree(v ->ContextID, v);
 572 }
 573 
 574 cmsNAMEDCOLORLIST* CMSEXPORT cmsDupNamedColorList(const cmsNAMEDCOLORLIST* v)


< prev index next >