Re: [psplash][PATCH] psplash: add option to read startup message from file


Richard Leitner
 

Any comments/updates on that patch of mine?

On 04/15/2016 10:49 AM, Richard Leitner wrote:
This patch adds an option to read the displayed message from a file.
Additionally the maximum length for the read string can be defined.
If both, a message (STARTUP_MSG) and a file (STARTUP_MSG_FILE) are
defined the content of the file will be appended to the message.
The string will be cutted after the given maximum number of chars.

For these changes the following defines were introduced:
PSPLASH_STARTUP_MSG_MAX_LEN ... maximum lenght of the complete message
PSPLASH_STARTUP_MSG_FILE ...... path to the file to read

Signed-off-by: Richard Leitner <richard.leitner@...>
---
psplash-config.h | 5 +++++
psplash.c | 29 ++++++++++++++++++++++++++++-
2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/psplash-config.h b/psplash-config.h
index 82bb76d..7fa44fa 100644
--- a/psplash-config.h
+++ b/psplash-config.h
@@ -21,6 +21,11 @@

/* Text to output on program start; if undefined, output nothing */
#define PSPLASH_STARTUP_MSG ""
+#define PSPLASH_STARTUP_MSG_MAX_LEN 32
+
+/* File to read and display its first line on program start;
+ * if undefined, output nothing; if MSG is defined also, append to it */
+#define PSPLASH_STARTUP_MSG_FILE ""

/* Bool indicating if the image is fullscreen, as opposed to split screen */
#define PSPLASH_IMG_FULLSCREEN 0
diff --git a/psplash.c b/psplash.c
index 04d3d49..b7d2d28 100644
--- a/psplash.c
+++ b/psplash.c
@@ -208,6 +208,9 @@ main (int argc, char** argv)
int pipe_fd, i = 0, angle = 0, ret = 0;
PSplashFB *fb;
bool disable_console_switch = FALSE;
+ char msg[PSPLASH_STARTUP_MSG_MAX_LEN];
+ int msglen;
+ FILE *fd_msg;

signal(SIGHUP, psplash_exit);
signal(SIGINT, psplash_exit);
@@ -298,9 +301,33 @@ main (int argc, char** argv)

psplash_draw_progress (fb, 0);

+ memset(msg, 0, PSPLASH_STARTUP_MSG_MAX_LEN);
+ msglen = 0;
#ifdef PSPLASH_STARTUP_MSG
- psplash_draw_msg (fb, PSPLASH_STARTUP_MSG);
+ snprintf(msg, PSPLASH_STARTUP_MSG_MAX_LEN, "%s", PSPLASH_STARTUP_MSG);
+ msglen = strlen(msg);
#endif
+#ifdef PSPLASH_STARTUP_MSG_FILE
+ fd_msg = fopen (PSPLASH_STARTUP_MSG_FILE, "r");
+ if (fd_msg)
+ {
+ if (msglen == 0)
+ {
+ fgets (msg, PSPLASH_STARTUP_MSG_MAX_LEN, fd_msg);
+ }
+ else
+ {
+ fgets (&msg[msglen + 1], PSPLASH_STARTUP_MSG_MAX_LEN - msglen - 1, fd_msg);
+ msg[msglen] = ' ';
+ }
+ fclose (fd_msg);
+ }
+ msglen = strlen(msg);
+#endif
+
+ /* draw message if we have one */
+ if (msglen > 0)
+ psplash_draw_msg (fb, msg);

psplash_main (fb, pipe_fd, 0);

Join yocto@lists.yoctoproject.org to automatically receive all group messages.