viafb: use read-only mode parsing
viafb: use read-only mode parsing The previous method of mode parsing wrote to the strings resulting in truncated mode strings in the sysfs. Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> Cc: Scott Fang <ScottFang@viatech.com.cn> Cc: Joseph Chan <JosephChan@via.com.tw> Cc: Harald Welte <laforge@gnumonks.org> Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
837b0abba1
commit
5ff32f69e7
@ -1821,11 +1821,29 @@ static void viafb_remove_proc(struct proc_dir_entry *viafb_entry)
|
|||||||
remove_proc_entry("viafb", NULL);
|
remove_proc_entry("viafb", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void parse_mode(const char *str, u32 *xres, u32 *yres)
|
||||||
|
{
|
||||||
|
char *ptr;
|
||||||
|
|
||||||
|
*xres = simple_strtoul(str, &ptr, 10);
|
||||||
|
if (ptr[0] != 'x')
|
||||||
|
goto out_default;
|
||||||
|
|
||||||
|
*yres = simple_strtoul(&ptr[1], &ptr, 10);
|
||||||
|
if (ptr[0])
|
||||||
|
goto out_default;
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
out_default:
|
||||||
|
printk(KERN_WARNING "viafb received invalid mode string: %s\n", str);
|
||||||
|
*xres = 640;
|
||||||
|
*yres = 480;
|
||||||
|
}
|
||||||
|
|
||||||
static int __devinit via_pci_probe(void)
|
static int __devinit via_pci_probe(void)
|
||||||
{
|
{
|
||||||
unsigned long default_xres, default_yres;
|
u32 default_xres, default_yres;
|
||||||
char *tmpc, *tmpm;
|
|
||||||
char *tmpc_sec, *tmpm_sec;
|
|
||||||
int vmode_index;
|
int vmode_index;
|
||||||
u32 viafb_par_length;
|
u32 viafb_par_length;
|
||||||
|
|
||||||
@ -1902,26 +1920,14 @@ static int __devinit via_pci_probe(void)
|
|||||||
viafb_second_size * 1024 * 1024;
|
viafb_second_size * 1024 * 1024;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpm = viafb_mode;
|
parse_mode(viafb_mode, &default_xres, &default_yres);
|
||||||
tmpc = strsep(&tmpm, "x");
|
|
||||||
strict_strtoul(tmpc, 0, &default_xres);
|
|
||||||
strict_strtoul(tmpm, 0, &default_yres);
|
|
||||||
|
|
||||||
vmode_index = viafb_get_mode_index(default_xres, default_yres);
|
vmode_index = viafb_get_mode_index(default_xres, default_yres);
|
||||||
DEBUG_MSG(KERN_INFO "0->index=%d\n", vmode_index);
|
DEBUG_MSG(KERN_INFO "0->index=%d\n", vmode_index);
|
||||||
|
|
||||||
if (viafb_SAMM_ON == 1) {
|
if (viafb_SAMM_ON == 1) {
|
||||||
if (strcmp(viafb_mode, viafb_mode1)) {
|
parse_mode(viafb_mode1, &viafb_second_xres,
|
||||||
tmpm_sec = viafb_mode1;
|
&viafb_second_yres);
|
||||||
tmpc_sec = strsep(&tmpm_sec, "x");
|
|
||||||
strict_strtoul(tmpc_sec, 0,
|
|
||||||
(unsigned long *)&viafb_second_xres);
|
|
||||||
strict_strtoul(tmpm_sec, 0,
|
|
||||||
(unsigned long *)&viafb_second_yres);
|
|
||||||
} else {
|
|
||||||
viafb_second_xres = default_xres;
|
|
||||||
viafb_second_yres = default_yres;
|
|
||||||
}
|
|
||||||
if (0 == viafb_second_virtual_xres) {
|
if (0 == viafb_second_virtual_xres) {
|
||||||
switch (viafb_second_xres) {
|
switch (viafb_second_xres) {
|
||||||
case 1400:
|
case 1400:
|
||||||
|
Loading…
Reference in New Issue
Block a user