@@ -411,11 +411,18 @@ static const char *assign_image_name(struct parser_comm *comm,
411
411
struct compiler_sc * sc = comm -> u .sc ;
412
412
char * totalname ;
413
413
struct image * img ;
414
- #endif
415
414
416
- if (number > IMAGE_COUNT )
417
- return strdup ("image number out of bounds" );
418
- #ifndef STANDALONE
415
+ if (number > sc -> p -> n_images ) {
416
+ int i ;
417
+
418
+ sc -> p -> images = realloc (sc -> p -> images ,
419
+ number * sizeof (struct image ));
420
+ for (i = sc -> p -> n_images ; i != number ; i ++ ) {
421
+ sc -> p -> images [i ].pixbuf = NULL ;
422
+ sc -> p -> images [i ].filename = NULL ;
423
+ }
424
+ sc -> p -> n_images = number ;
425
+ }
419
426
number -- ;
420
427
421
428
if (* name == '/' )
@@ -472,7 +479,6 @@ struct patch *patch_compile(const char *basedir, const char *patch_code,
472
479
{
473
480
struct compiler_sc * sc ;
474
481
struct patch * p ;
475
- int i ;
476
482
477
483
sc = malloc (sizeof (struct compiler_sc ));
478
484
if (sc == NULL ) {
@@ -485,10 +491,8 @@ struct patch *patch_compile(const char *basedir, const char *patch_code,
485
491
free (sc );
486
492
return NULL ;
487
493
}
488
- for (i = 0 ;i < IMAGE_COUNT ;i ++ ) {
489
- sc -> p -> images [i ].pixbuf = NULL ;
490
- sc -> p -> images [i ].filename = NULL ;
491
- }
494
+ sc -> p -> images = NULL ;
495
+ sc -> p -> n_images = 0 ;
492
496
sc -> p -> ref = 1 ;
493
497
sc -> p -> require = 0 ;
494
498
sc -> p -> original = NULL ;
@@ -561,18 +565,23 @@ struct patch *patch_copy(struct patch *p)
561
565
{
562
566
struct patch * new_patch ;
563
567
struct image * img ;
568
+ int i ;
564
569
565
570
new_patch = malloc (sizeof (struct patch ));
566
571
assert (new_patch != NULL );
567
572
memcpy (new_patch , p , sizeof (struct patch ));
568
573
new_patch -> ref = 1 ;
569
574
new_patch -> original = p ;
570
575
new_patch -> next = NULL ;
571
- for (img = new_patch -> images ;
572
- img != new_patch -> images + IMAGE_COUNT ; img ++ ) {
573
- if (img -> filename )
574
- img -> filename = strdup (img -> filename );
575
- pixbuf_inc_ref (img -> pixbuf );
576
+ if (p -> images ) {
577
+ new_patch -> images = malloc (p -> n_images * sizeof (struct image ));
578
+ for (i = 0 ; i != p -> n_images ; i ++ ) {
579
+ img = new_patch -> images + i ;
580
+ * img = p -> images [i ];
581
+ if (img -> filename )
582
+ img -> filename = strdup (img -> filename );
583
+ pixbuf_inc_ref (img -> pixbuf );
584
+ }
576
585
}
577
586
new_patch -> stim = stim_get (p -> stim );
578
587
if (p -> stim )
@@ -587,10 +596,11 @@ void patch_free(struct patch *p)
587
596
assert (p -> ref );
588
597
if (-- p -> ref );
589
598
return ;
590
- for (img = p -> images ; img != p -> images + IMAGE_COUNT ; img ++ ) {
599
+ for (img = p -> images ; img != p -> images + p -> n_images ; img ++ ) {
591
600
pixbuf_dec_ref (img -> pixbuf );
592
601
free ((void * ) img -> filename );
593
602
}
603
+ free (p -> images );
594
604
stim_put (p -> stim );
595
605
free (p );
596
606
}
@@ -600,7 +610,7 @@ struct patch *patch_refresh(struct patch *p)
600
610
struct image * img ;
601
611
struct pixbuf * pixbuf ;
602
612
603
- for (img = p -> images ; img != p -> images + IMAGE_COUNT ; img ++ ) {
613
+ for (img = p -> images ; img != p -> images + p -> n_images ; img ++ ) {
604
614
if (!img -> pixbuf )
605
615
continue ;
606
616
pixbuf = pixbuf_update (img -> pixbuf );
0 commit comments