svn commit: trunk/busybox: miscutils util-linux
aldot at busybox.net
aldot at busybox.net
Wed Feb 18 15:28:44 UTC 2009
Author: aldot
Date: 2009-02-18 15:28:43 +0000 (Wed, 18 Feb 2009)
New Revision: 25366
Log:
- bail out if screen resolution does not match PPM dimensions.
Previously a 640x480 PPM on an e.g. 720x400 console would just segfault when
reading the lines. While this bug should perhaps be fixed to handle such cases
properly we just exit gracefully until somebody is willing to take care of it
properly.
Modified:
trunk/busybox/miscutils/fbsplash.c
trunk/busybox/util-linux/fbset.c
Changeset:
Modified: trunk/busybox/miscutils/fbsplash.c
===================================================================
--- trunk/busybox/miscutils/fbsplash.c 2009-02-18 15:13:05 UTC (rev 25365)
+++ trunk/busybox/miscutils/fbsplash.c 2009-02-18 15:28:43 UTC (rev 25366)
@@ -257,7 +257,9 @@
if (ENABLE_FEATURE_CLEAN_UP)
free(head);
-
+ if (width != G.scr_var.xres || height != G.scr_var.yres)
+ bb_error_msg_and_die("PPM %dx%d does not match screen %dx%d",
+ width, height, G.scr_var.xres, G.scr_var.yres);
line_size = width*3;
if (width > G.scr_var.xres)
width = G.scr_var.xres;
Modified: trunk/busybox/util-linux/fbset.c
===================================================================
--- trunk/busybox/util-linux/fbset.c 2009-02-18 15:13:05 UTC (rev 25365)
+++ trunk/busybox/util-linux/fbset.c 2009-02-18 15:28:43 UTC (rev 25366)
@@ -30,7 +30,8 @@
/* CMD_XCOMPAT = 10, */
CMD_ALL = 11,
CMD_INFO = 12,
- CMD_CHANGE = 13,
+ CMD_SHOW = 13,
+ CMD_CHANGE = 14,
#if ENABLE_FEATURE_FBSET_FANCY
CMD_XRES = 100,
@@ -123,7 +124,8 @@
{ "vsync" , 1, CMD_VSYNC },
{ "laced" , 1, CMD_LACED },
{ "double" , 1, CMD_DOUBLE },
- { "n" , 0, CMD_CHANGE },
+ { "show" , 0, CMD_SHOW },
+ { "s" , 0, CMD_SHOW },
#if ENABLE_FEATURE_FBSET_FANCY
{ "all" , 0, CMD_ALL },
{ "xres" , 1, CMD_XRES },
@@ -172,7 +174,7 @@
*x |= flag;
}
-static int readmode(struct fb_var_screeninfo *base, const char *fn,
+static int read_mode_db(struct fb_var_screeninfo *base, const char *fn,
const char *mode)
{
char *token[2], *p, *s;
@@ -302,7 +304,7 @@
{
enum {
OPT_CHANGE = (1 << 0),
- /*OPT_INFO = (1 << 1), ??*/
+ OPT_SHOW = (1 << 1),
OPT_READMODE = (1 << 2),
OPT_ALL = (1 << 9),
};
@@ -333,6 +335,12 @@
case CMD_DB:
modefile = argv[1];
break;
+ case CMD_ALL:
+ options |= OPT_ALL;
+ break;
+ case CMD_SHOW:
+ options |= OPT_SHOW;
+ break;
case CMD_GEOMETRY:
varset.xres = xatou32(argv[1]);
varset.yres = xatou32(argv[2]);
@@ -349,12 +357,6 @@
varset.hsync_len = xatou32(argv[6]);
varset.vsync_len = xatou32(argv[7]);
break;
- case CMD_ALL:
- options |= OPT_ALL;
- break;
- case CMD_CHANGE:
- options |= OPT_CHANGE;
- break;
#if ENABLE_FEATURE_FBSET_FANCY
case CMD_XRES:
varset.xres = xatou32(argv[1]);
@@ -367,6 +369,15 @@
break;
#endif
}
+ switch (g_cmdoptions[i].code) {
+ case CMD_FB:
+ case CMD_DB:
+ case CMD_ALL:
+ case CMD_SHOW:
+ break;
+ default:
+ options |= OPT_CHANGE; /* the other commands imply changes */
+ }
argc -= g_cmdoptions[i].param_count;
argv += g_cmdoptions[i].param_count;
goto contin;
@@ -384,19 +395,20 @@
#if !ENABLE_FEATURE_FBSET_READMODE
bb_show_usage();
#else
- if (!readmode(&var, modefile, mode)) {
+ if (!read_mode_db(&var, modefile, mode)) {
bb_error_msg_and_die("unknown video mode '%s'", mode);
}
#endif
}
- setmode(&var, &varset);
if (options & OPT_CHANGE) {
+ setmode(&var, &varset);
if (options & OPT_ALL)
var.activate = FB_ACTIVATE_ALL;
xioctl(fh, FBIOPUT_VSCREENINFO, &var);
}
- showmode(&var);
+ if (options == 0 || options & OPT_SHOW)
+ showmode(&var);
/* Don't close the file, as exiting will take care of that */
/* close(fh); */
More information about the busybox-cvs
mailing list