This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository e16-epplets.
View the commit online.
commit acf2e352563dcb89fef938e702b5cdf619d1f6b6
Author: Kim Woelders <k...@woelders.dk>
AuthorDate: Tue Aug 13 08:42:24 2024 +0200
E-Slides: Fix potential segv
If there was only one background and it was attempted to chose the
previous a segv would occur.
---
epplets/E-Slides.c | 70 +++++++++++++++++++++++++++++-------------------------
1 file changed, 37 insertions(+), 33 deletions(-)
diff --git a/epplets/E-Slides.c b/epplets/E-Slides.c
index 3e7f963..1a2a626 100644
--- a/epplets/E-Slides.c
+++ b/epplets/E-Slides.c
@@ -31,10 +31,8 @@
#define D(x) ((void) 0)
#endif
-#define PREV_PIC() do {if (idx == 1) idx = image_cnt - 1; else if (idx == 0) idx = image_cnt - 2; else idx -= 2;} while (0)
-#define CUR_PIC() ((idx == 0) ? (image_cnt - 1) : (idx - 1))
-#define NEXT_PIC() ((void) 0)
-#define INC_PIC() do {idx++; if (idx == image_cnt) idx = 0;} while (0)
+#define INC2PTR(i) ((void*)(long)(i))
+#define PTR2INC(p) ((int)(long)(p))
#define AUTOBG_OFF 0
#define AUTOBG_TILED 1
@@ -205,10 +203,9 @@ set_background(int tiled, int keep_aspect)
current_desk = atoi(++ptr);
free(reply);
- snprintf(bg_name, sizeof(bg_name), "E_SLIDES_BG_%s", filenames[CUR_PIC()]);
+ snprintf(bg_name, sizeof(bg_name), "E_SLIDES_BG_%s", filenames[idx]);
- Epplet_send_ipc("bg set %s bg.file %s/%s", bg_name, path,
- filenames[CUR_PIC()]);
+ Epplet_send_ipc("bg set %s bg.file %s/%s", bg_name, path, filenames[idx]);
Epplet_send_ipc("bg set %s bg.solid 0 0 0", bg_name);
Epplet_send_ipc("bg set %s bg.tile %d", bg_name, tiled);
Epplet_send_ipc("bg set %s bg.keep_aspect %d", bg_name, keep_aspect);
@@ -221,33 +218,43 @@ set_background(int tiled, int keep_aspect)
}
static void
-change_image(void *data __UNUSED__)
+change_image(void *data)
{
- Imlib_Image *im = NULL;
+ Imlib_Image *im;
double ratio;
- unsigned int first = idx;
+ unsigned int i, ii;
int new_w, new_h, new_x, new_y;
- if (!filenames)
+ idx += PTR2INC(data);
+ idx = (image_cnt > 0) ? (idx + image_cnt) % image_cnt : 0;
+
+ if (image_cnt == 0 || !filenames)
return;
/* Test-load each image to make sure it's a valid image file. */
- for (; ((!filenames[idx]) || (!(im = imlib_load_image(filenames[idx]))));)
+ im = NULL;
+ for (i = 0; i < image_cnt; i++)
{
+ ii = (idx + i) % image_cnt;
+ if (!filenames[ii])
+ continue;
+ im = imlib_load_image(filenames[ii]);
+ if (im)
+ break;
/* It isn't, so NULL out its name. */
filenames[idx] = NULL;
- INC_PIC();
- if (idx == first)
- {
- /* They're all NULL now. Time to give up. */
- Epplet_dialog_ok
- ("There don't seem to be any images in \"%s\". Please choose another directory.\n",
- path);
- Esync();
- config_cb(NULL);
- return;
- }
}
+ if (!im)
+ {
+ /* They're all NULL now. Time to give up. */
+ Epplet_dialog_ok
+ ("There don't seem to be any images in \"%s\". Please choose another directory.\n",
+ path);
+ //Esync();
+ config_cb(NULL);
+ return;
+ }
+ idx = ii;
new_w = (w * 16 - 6);
new_h = (h * 16 - 6);
@@ -273,7 +280,6 @@ change_image(void *data __UNUSED__)
Epplet_move_change_image(picture, new_x, new_y, new_w, new_h,
filenames[idx]);
- INC_PIC();
switch (auto_setbg)
{
case AUTOBG_TILED:
@@ -292,7 +298,7 @@ change_image(void *data __UNUSED__)
Epplet_remove_timer("CHANGE_IMAGE");
if (!paused)
{
- Epplet_timer(change_image, NULL, delay, "CHANGE_IMAGE");
+ Epplet_timer(change_image, INC2PTR(1), delay, "CHANGE_IMAGE");
}
}
@@ -307,7 +313,7 @@ zoom_cb(void *data __UNUSED__)
{
char buff[1024];
- snprintf(buff, sizeof(buff), zoom_cmd, filenames[CUR_PIC()]);
+ snprintf(buff, sizeof(buff), zoom_cmd, filenames[idx]);
Epplet_spawn_command(buff);
}
@@ -347,8 +353,7 @@ play_cb(void *data)
{
case -1:
/* Previous image */
- PREV_PIC();
- change_image(NULL);
+ change_image(INC2PTR(-1));
break;
case 0:
/* Pause */
@@ -362,12 +367,11 @@ play_cb(void *data)
paused = 0;
Epplet_gadget_hide(play_button);
Epplet_gadget_show(pause_button);
- change_image(NULL);
+ change_image(INC2PTR(0));
break;
case 2:
/* Next image */
- NEXT_PIC();
- change_image(NULL);
+ change_image(INC2PTR(1));
break;
default:
break;
@@ -514,7 +518,7 @@ apply_config(void)
maintain_aspect = cfg_maintain_aspect;
sprintf(buff, "%d", maintain_aspect);
Epplet_modify_config("maintain_aspect", buff);
- change_image(NULL);
+ change_image(INC2PTR(0));
}
static void
@@ -732,7 +736,7 @@ main(int argc, char **argv)
if (get_images(path))
{
- change_image(NULL);
+ change_image(INC2PTR(0));
}
else
{
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.