summaryrefslogtreecommitdiff
path: root/src/w32image.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2020-04-18 12:57:08 +0300
committerEli Zaretskii <eliz@gnu.org>2020-04-18 12:57:08 +0300
commit13210712a06a53031cfb82ec5dc0ab5f8e720668 (patch)
tree5ef1e5c4253e8df8e0f1156620209863d8b50191 /src/w32image.c
parenta0c8c274d354f3901f076d163d3828ae55d13a2d (diff)
downloademacs-13210712a06a53031cfb82ec5dc0ab5f8e720668.tar.gz
Don't abort when using GDI+ for images
* src/w32image.c (decode_delay): Instead of aborting when the type of delay value is unrecognized, return an invalid negative value.
Diffstat (limited to 'src/w32image.c')
-rw-r--r--src/w32image.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/w32image.c b/src/w32image.c
index 95d8ddfe117..31c9b852ace 100644
--- a/src/w32image.c
+++ b/src/w32image.c
@@ -214,30 +214,37 @@ enum PropertyItem_type {
PI_LONG_PAIR = 10
};
-static unsigned long
+static double
decode_delay (PropertyItem *propertyItem, int frame)
{
enum PropertyItem_type type = propertyItem[0].type;
- unsigned long delay;
+ unsigned long udelay;
+ double retval;
switch (type)
{
case PI_BYTE:
case PI_BYTE_ANY:
- delay = ((unsigned char *)propertyItem[0].value)[frame];
+ udelay = ((unsigned char *)propertyItem[0].value)[frame];
+ retval = udelay;
break;
case PI_USHORT:
- delay = ((unsigned short *)propertyItem[0].value)[frame];
+ udelay = ((unsigned short *)propertyItem[0].value)[frame];
+ retval = udelay;
break;
case PI_ULONG:
case PI_LONG: /* delay should always be positive */
- delay = ((unsigned long *)propertyItem[0].value)[frame];
+ udelay = ((unsigned long *)propertyItem[0].value)[frame];
+ retval = udelay;
break;
default:
- emacs_abort ();
+ /* This negative value will cause the caller to disregard the
+ delay if we cannot determine it reliably. */
+ add_to_log ("Invalid or unknown propertyItem type in w32image.c");
+ retval = -1.0;
}
- return delay;
+ return retval;
}
static double