Package: splashy
Version: 0.3.8-1
Severity: important
Tags: patch

Hello,

trying to solve bugs #455685 [1] and #459447 [2], I found that splashy
always starts, even when its requirements are not satisfied.  As
reported at [3], we can have two major boot situations when splashy is
installed:

- vga=NNN splash

  all the requirements are there, splashy can start

- only vga=NNN (or video=), only splash, nothing, single

  something is missing, splashy should not start (and no code related to
  it should be executed).

If splashy is always started, in the latter situation you always receive
a segfault, reproducible with `splashy test` (log attached).  I guess
bug #458959 [4] is related to this situation.

For this reason I reworked the init.d and initramfs scripts to have
saner checks.  I based my test on the 0.3.8 version, so something could
be different from the git tree.  We rely on /proc/cmdline to know if we
can or cannot start splashy, based on the following reasoning.

- parsing /proc/cmdline in the same way as [5] is the best thing: it
  contains all splashy requirements.  This removes the last grep line
  (already commented out in the git tree), which BTW didn't work at
  least on my sid-amd64 when booting with 'splash' only [2].

  For these checks I really prefer to have a separate script, because it
  avoids code duplication.  The script should just return 0 in case
  splashy can be enabled and 1 in case not.  If needed, we can support
  the -v|--verbose argument.  I'd say that having the checks inside the
  main splashy code (`splashy check`) would be the best thing to do.

- when no vga= or video= command line is provided, AFAIK even if fbcon
  and vesafb are inserted (on Debian kernel they're compiled in by
  default), /proc/fb is present, but with zero size.  Thus, when
  checking for /proc/fb to create /dev nodes we should check for its
  size (test -s).  However, according to [6] and [7], if no vga= or
  video= parameter is specified, fb is not initialised ([2] and [4]).

  I guess the segfaults at [2] and [4] (as well as the one in the
  `splashy test` output attached) are caused by the fact that splashy
  tries to start even if there's no fb available.

- log_warning_message doesn't exists, it's log_warning_msg

With these patch, together with the one I provided at [3], I can boot
with all the possible combinations, with or without splashy support in
the initramfs.

Comments and suggestions welcome!

Thx, bye,
Gismo / Luca

Footnotes: 
[1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=455685
[2] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=459447
[3] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=455685#73
[4] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=458959
[5] /usr/share/initramfs-tools/scripts/init-top/framebuffer
[6] linux/Documentation/fb/vesafb.txt
[7] linux/Documentation/svga.txt

-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (990, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.24-rc6-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages splashy depends on:
ii  initramfs-tools         0.91d            tools for generating an initramfs
ii  libc6                   2.7-5            GNU C Library: Shared libraries
ii  libdirectfb-1.0-0       1.0.1-5          direct frame buffer graphics - sha
ii  libgcc1                 1:4.3-20080104-1 GCC support library
ii  libglib2.0-0            2.14.4-2         The GLib library of C routines
ii  libmagic1               4.21-4           File type determination library us
ii  libsplashy1             0.3.8-1          Library to draw splash screen on b
ii  lsb-base                3.1-24           Linux Standard Base 3.1 init scrip
ii  zlib1g                  1:1.2.3.3.dfsg-8 compression library - runtime

splashy recommends no packages.

-- no debconf information

Script started on Sat 05 Jan 2008 06:46:32 PM CET
[EMAIL PROTECTED]:~# cat /proc/cmdline
BOOT_IMAGE=(hd0,1)/vmlinuz-2.6.22-3-amd64 root=/dev/mapper/vggismo-lvroot ro 
splash
[EMAIL PROTECTED]:~# strace splashy test
execve("/sbin/splashy", ["splashy", "test"], [/* 12 vars */]) = 0
brk(0)                                  = 0x605000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x2b6db6d29000
uname({sys="Linux", node="gismo.pca.it", ...}) = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x2b6db6d2a000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/lib/directfb-1.0-0/systems/tls/x86_64/libsplashycnf.so.1", O_RDONLY) = 
-1 ENOENT (No such file or directory)
stat("/lib/directfb-1.0-0/systems/tls/x86_64", 0x7ffff3d9cf00) = -1 ENOENT (No 
such file or directory)
open("/lib/directfb-1.0-0/systems/tls/libsplashycnf.so.1", O_RDONLY) = -1 
ENOENT (No such file or directory)
stat("/lib/directfb-1.0-0/systems/tls", 0x7ffff3d9cf00) = -1 ENOENT (No such 
file or directory)
open("/lib/directfb-1.0-0/systems/x86_64/libsplashycnf.so.1", O_RDONLY) = -1 
ENOENT (No such file or directory)
stat("/lib/directfb-1.0-0/systems/x86_64", 0x7ffff3d9cf00) = -1 ENOENT (No such 
file or directory)
open("/lib/directfb-1.0-0/systems/libsplashycnf.so.1", O_RDONLY) = -1 ENOENT 
(No such file or directory)
stat("/lib/directfb-1.0-0/systems", 0x7ffff3d9cf00) = -1 ENOENT (No such file 
or directory)
open("/lib/directfb-1.0-0/wm/tls/x86_64/libsplashycnf.so.1", O_RDONLY) = -1 
ENOENT (No such file or directory)
stat("/lib/directfb-1.0-0/wm/tls/x86_64", 0x7ffff3d9cf00) = -1 ENOENT (No such 
file or directory)
open("/lib/directfb-1.0-0/wm/tls/libsplashycnf.so.1", O_RDONLY) = -1 ENOENT (No 
such file or directory)
stat("/lib/directfb-1.0-0/wm/tls", 0x7ffff3d9cf00) = -1 ENOENT (No such file or 
directory)
open("/lib/directfb-1.0-0/wm/x86_64/libsplashycnf.so.1", O_RDONLY) = -1 ENOENT 
(No such file or directory)
stat("/lib/directfb-1.0-0/wm/x86_64", 0x7ffff3d9cf00) = -1 ENOENT (No such file 
or directory)
open("/lib/directfb-1.0-0/wm/libsplashycnf.so.1", O_RDONLY) = -1 ENOENT (No 
such file or directory)
stat("/lib/directfb-1.0-0/wm", 0x7ffff3d9cf00) = -1 ENOENT (No such file or 
directory)
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/tls/x86_64/libsplashycnf.so.1",
 O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/tls/x86_64", 
0x7ffff3d9cf00) = -1 ENOENT (No such file or directory)
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/tls/libsplashycnf.so.1",
 O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/tls", 0x7ffff3d9cf00) 
= -1 ENOENT (No such file or directory)
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/x86_64/libsplashycnf.so.1",
 O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/x86_64", 
0x7ffff3d9cf00) = -1 ENOENT (No such file or directory)
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/libsplashycnf.so.1", 
O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont", 
{st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/lib/directfb-1.0-0/interfaces/IDirectFBImageProvider/tls/x86_64/libsplashycnf.so.1",
 O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/directfb-1.0-0/interfaces/IDirectFBImageProvider/tls/x86_64", 
0x7ffff3d9cf00) = -1 ENOENT (No such file or directory)
open("/lib/directfb-1.0-0/interfaces/IDirectFBImageProvider/tls/libsplashycnf.so.1",
 O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/directfb-1.0-0/interfaces/IDirectFBImageProvider/tls", 
0x7ffff3d9cf00) = -1 ENOENT (No such file or directory)
open("/lib/directfb-1.0-0/interfaces/IDirectFBImageProvider/x86_64/libsplashycnf.so.1",
 O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/directfb-1.0-0/interfaces/IDirectFBImageProvider/x86_64", 
0x7ffff3d9cf00) = -1 ENOENT (No such file or directory)
open("/lib/directfb-1.0-0/interfaces/IDirectFBImageProvider/libsplashycnf.so.1",
 O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/directfb-1.0-0/interfaces/IDirectFBImageProvider", 0x7ffff3d9cf00) = 
-1 ENOENT (No such file or directory)
open("/lib/directfb-1.0-0/inputdrivers/tls/x86_64/libsplashycnf.so.1", 
O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/directfb-1.0-0/inputdrivers/tls/x86_64", 0x7ffff3d9cf00) = -1 ENOENT 
(No such file or directory)
open("/lib/directfb-1.0-0/inputdrivers/tls/libsplashycnf.so.1", O_RDONLY) = -1 
ENOENT (No such file or directory)
stat("/lib/directfb-1.0-0/inputdrivers/tls", 0x7ffff3d9cf00) = -1 ENOENT (No 
such file or directory)
open("/lib/directfb-1.0-0/inputdrivers/x86_64/libsplashycnf.so.1", O_RDONLY) = 
-1 ENOENT (No such file or directory)
stat("/lib/directfb-1.0-0/inputdrivers/x86_64", 0x7ffff3d9cf00) = -1 ENOENT (No 
such file or directory)
open("/lib/directfb-1.0-0/inputdrivers/libsplashycnf.so.1", O_RDONLY) = -1 
ENOENT (No such file or directory)
stat("/lib/directfb-1.0-0/inputdrivers", 0x7ffff3d9cf00) = -1 ENOENT (No such 
file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=51182, ...}) = 0
mmap(NULL, 51182, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b6db6d2c000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libsplashycnf.so.1", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\17\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=10824, ...}) = 0
mmap(NULL, 2106224, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x2b6db6f2a000
mprotect(0x2b6db6f2c000, 2097152, PROT_NONE) = 0
mmap(0x2b6db712c000, 4096, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x2b6db712c000
close(3)                                = 0
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/libsplashy.so.1", 
O_RDONLY) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libsplashy.so.1", O_RDONLY)  = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\24\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=20832, ...}) = 0
mmap(NULL, 2116408, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x2b6db712d000
mprotect(0x2b6db7132000, 2093056, PROT_NONE) = 0
mmap(0x2b6db7331000, 4096, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4000) = 0x2b6db7331000
close(3)                                = 0
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/libgcc_s.so.1", 
O_RDONLY) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libgcc_s.so.1", O_RDONLY)    = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 ,\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=93016, ...}) = 0
mmap(NULL, 2188856, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x2b6db7332000
mprotect(0x2b6db7348000, 2097152, PROT_NONE) = 0
mmap(0x2b6db7548000, 4096, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x2b6db7548000
close(3)                                = 0
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/libm.so.6", O_RDONLY) 
= -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libm.so.6", O_RDONLY)        = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260>\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=526560, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x2b6db7549000
mmap(NULL, 2621672, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x2b6db754a000
mprotect(0x2b6db75ca000, 2093056, PROT_NONE) = 0
mmap(0x2b6db77c9000, 8192, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7f000) = 0x2b6db77c9000
close(3)                                = 0
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/libglib-2.0.so.0", 
O_RDONLY) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libglib-2.0.so.0", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260<\1\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=708088, ...}) = 0
mmap(NULL, 2805064, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x2b6db77cb000
mprotect(0x2b6db7877000, 2093056, PROT_NONE) = 0
mmap(0x2b6db7a76000, 8192, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xab000) = 0x2b6db7a76000
close(3)                                = 0
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/libdirectfb-1.0.so.0", 
O_RDONLY) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libdirectfb-1.0.so.0", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>[EMAIL PROTECTED]"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=455976, ...}) = 0
mmap(NULL, 2553144, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x2b6db7a78000
mprotect(0x2b6db7ae4000, 2097152, PROT_NONE) = 0
mmap(0x2b6db7ce4000, 12288, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6c000) = 0x2b6db7ce4000
mmap(0x2b6db7ce7000, 1336, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2b6db7ce7000
close(3)                                = 0
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/libfusion-1.0.so.0", 
O_RDONLY) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libfusion-1.0.so.0", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P-\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=33160, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x2b6db7ce8000
mmap(NULL, 2128568, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x2b6db7ce9000
mprotect(0x2b6db7cf1000, 2093056, PROT_NONE) = 0
mmap(0x2b6db7ef0000, 4096, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7000) = 0x2b6db7ef0000
close(3)                                = 0
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/libdirect-1.0.so.0", 
O_RDONLY) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libdirect-1.0.so.0", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0pB\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=83376, ...}) = 0
mmap(NULL, 2181168, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x2b6db7ef1000
mprotect(0x2b6db7f05000, 2093056, PROT_NONE) = 0
mmap(0x2b6db8104000, 4096, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13000) = 0x2b6db8104000
mmap(0x2b6db8105000, 2096, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2b6db8105000
close(3)                                = 0
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/libpthread.so.0", 
O_RDONLY) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libpthread.so.0", O_RDONLY)  = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260W\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=126128, ...}) = 0
mmap(NULL, 2204528, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x2b6db8106000
mprotect(0x2b6db811c000, 2093056, PROT_NONE) = 0
mmap(0x2b6db831b000, 8192, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15000) = 0x2b6db831b000
mmap(0x2b6db831d000, 13168, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2b6db831d000
close(3)                                = 0
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/libc.so.6", O_RDONLY) 
= -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\342"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1420624, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x2b6db8321000
mmap(NULL, 3527256, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x2b6db8322000
mprotect(0x2b6db8476000, 2097152, PROT_NONE) = 0
mmap(0x2b6db8676000, 20480, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x154000) = 0x2b6db8676000
mmap(0x2b6db867b000, 16984, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2b6db867b000
close(3)                                = 0
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/libpcre.so.3", 
O_RDONLY) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libpcre.so.3", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220&\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=160840, ...}) = 0
mmap(NULL, 2256136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x2b6db8680000
mprotect(0x2b6db86a6000, 2097152, PROT_NONE) = 0
mmap(0x2b6db88a6000, 4096, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x26000) = 0x2b6db88a6000
close(3)                                = 0
open("/usr/lib64/directfb-1.0-0/interfaces/IDirectFBFont/libdl.so.2", O_RDONLY) 
= -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libdl.so.2", O_RDONLY)       = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \16\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=14624, ...}) = 0
mmap(NULL, 2109728, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0x2b6db88a7000
mprotect(0x2b6db88a9000, 2097152, PROT_NONE) = 0
mmap(0x2b6db8aa9000, 8192, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x2b6db8aa9000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x2b6db8aab000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x2b6db8aac000
arch_prctl(ARCH_SET_FS, 0x2b6db8aac630) = 0
mprotect(0x2b6db8676000, 12288, PROT_READ) = 0
munmap(0x2b6db6d2c000, 51182)           = 0
set_tid_address(0x2b6db8aac6c0)         = 3147
set_robust_list(0x2b6db8aac6d0, 0x18)   = 0
futex(0x7ffff3d9da3c, 0x81 /* FUTEX_??? */, 1) = 0
rt_sigaction(SIGRTMIN, {0x2b6db810b2d0, [], SA_RESTORER|SA_SIGINFO, 
0x2b6db81147d0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x2b6db810b350, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 
0x2b6db81147d0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
close(0)                                = 0
open("/dev/null", O_RDWR)               = 0
close(1)                                = 0
open("/dev/null", O_RDWR)               = 1
stat("/etc/splashy/config.xml", {st_mode=S_IFREG|0644, st_size=549, ...}) = 0
brk(0)                                  = 0x605000
brk(0x626000)                           = 0x626000
stat("/etc/splashy/config.xml", {st_mode=S_IFREG|0644, st_size=549, ...}) = 0
open("/usr/lib/charset.alias", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/splashy/config.xml", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=549, ...}) = 0
read(3, "<?xml version=\"1.0\" encoding=\"UT"..., 549) = 549
close(3)                                = 0
stat("/etc/splashy/themes/debian-swirl///theme.xml", {st_mode=S_IFREG|0644, 
st_size=4995, ...}) = 0
stat("/etc/splashy/themes/debian-swirl///theme.xml", {st_mode=S_IFREG|0644, 
st_size=4995, ...}) = 0
stat("/etc/splashy/themes/debian-swirl///theme.xml", {st_mode=S_IFREG|0644, 
st_size=4995, ...}) = 0
open("/etc/splashy/themes/debian-swirl///theme.xml", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=4995, ...}) = 0
read(3, "<?xml version=\"1.0\" encoding=\"UT"..., 4995) = 4995
close(3)                                = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, 
child_tidptr=0x2b6db8aac6c0) = 3148
exit_group(0)                           = ?
Process 3147 detached
[EMAIL PROTECTED]:~# Splashy ERROR: Couldn't splashy_start_splashy(). Error -2

splashy[3148]: segfault at 0000000000000018 rip 00002b6db712f4c7 r sp 
00007ffff3d9da00 error 4
[EMAIL PROTECTED]:~# exit

Script done on Sat 05 Jan 2008 06:47:35 PM CET
diff --git a/scripts/init.d/splashy b/scripts/init.d/splashy
index 879ff0f..8677e0f 100755
--- a/scripts/init.d/splashy
+++ b/scripts/init.d/splashy
@@ -13,6 +13,7 @@
 
 # Author: Tim Dijkstra <[EMAIL PROTECTED]>, 
 #         Luis Mondesi <[EMAIL PROTECTED]> 
+#         Luca Capello <[EMAIL PROTECTED]>
 #
 # If called in the rc[06].d runlevels with the stop target it will start 
 # splashy in 'shutdown' mode. In the rcS.d runlevel it will try 
@@ -55,12 +56,39 @@ fi
 
 set -e
 
-[ "$ENABLE" = "1" ] && log_warning_message "To enable $NAME add 'splash' to the kernel command line. Use of ENABLE in /etc/default/$NAME is deprecated.";
-ENABLE=0
-# Enable splash parameter if it is set on the kernel command line.
-grep -q -e '[[:space:]]splash\([[:space:]]\|$\)' /proc/cmdline && ENABLE=1
-grep -q -e '[[:space:]]nosplash\([[:space:]]\|$\)' /proc/cmdline && ENABLE=0
 
+[ "$ENABLE" = "1" ] && log_warning_msg "To enable $NAME add 'splash' to the kernel command line. Use of ENABLE in /etc/default/$NAME is deprecated.";
+
+check_to_enable () {
+	ENABLE=0
+	SINGLE=false
+	SPLASH=false
+	FBMODESET=false
+
+	for x in $(cat /proc/cmdline); do
+	    case $x in
+		single)
+		    SINGLE=true
+		;;
+		splash)
+		    SPLASH=true
+		;;
+		nosplash)
+		    SPLASH=false
+		;;
+		vga=*|video=*)
+		    FBMODESET=true
+		;;
+	    esac
+	done
+	[ "$SPLASH" = "true" -a "$FBMODESET" = "true" ] && ENABLE=1
+	[ "$SINGLE" = "true" ] && ENABLE=0
+
+	if [ "$ENABLE" = "0" ]; then
+	    log_warning_msg "To enable $NAME on multiuser runlevel add 'splash' and a valid framebuffer videomode to the kernel command line"
+	    exit 0
+	fi
+}
 
 calculate_steps () {
         log_daemon_msg "(Re)generating splash steps for"
@@ -115,24 +143,24 @@ fi
 
 case "$1" in
     start)
-        # We start splashy in rcS.d if we haven't already in initramfs
-        if [ "x$RUNLEVEL" = "xN S" -o "x$RUNLEVEL" = "xS" ]; then
-	    [ "$ENABLE" = "1" ] || exit 0;
-
-	    calculate_steps
-
-            log_daemon_msg "Starting $DESC" $NAME
-            if [ "$DEBUG" = "1" ]; then
-                pidof $NAME > /dev/null || \
-                echo "$0: Splashy not running?" >> $STEPS_DIR/splashy.log
-            fi
-            pidof $NAME > /dev/null || /sbin/$NAME boot
-            log_end_msg $?
+	check_to_enable
+
+	# We start splashy in rcS.d if we haven't already in initramfs
+	[ "x$RUNLEVEL" = "xN S" -o "x$RUNLEVEL" = "xS" ] || exit 0
+
+        calculate_steps
+
+        log_daemon_msg "Starting $DESC" $NAME
+        if [ "$DEBUG" = "1" ]; then
+            pidof $NAME > /dev/null || \
+            echo "$0: Splashy not running?" >> $STEPS_DIR/splashy.log
         fi
+        pidof $NAME > /dev/null || /sbin/$NAME boot
+        log_end_msg $?
     ;;
     stop)
+	check_to_enable
 
-	[ "$ENABLE" = "1" ] || exit 0;
 	calculate_steps
 
         log_daemon_msg "Starting $DESC" $NAME
diff --git a/scripts/initramfs-tools/scripts/init-top/splashy b/scripts/initramfs-tools/scripts/init-top/splashy
index 4d01bf3..76e1a71 100755
--- a/scripts/initramfs-tools/scripts/init-top/splashy
+++ b/scripts/initramfs-tools/scripts/init-top/splashy
@@ -25,24 +25,32 @@ silent()
 test -x /sbin/splashy || exit
 SPLASH=false
 SINGLE=false
+FBMODESET=false
 for x in $(cat /proc/cmdline); do
     case $x in
-        splash*)
+        single)
+            SINGLE=true
+        ;;
+        splash)
             SPLASH=true
         ;;
-        single=*)
-            SINGLE=true
+        nosplash)
+            SPLASH=false
+        ;;
+        vga=*|video=*)
+            FBMODESET=true
         ;;
     esac
 done
 test $SINGLE = "false" || exit
 test $SPLASH = "true" || exit
+test $FBMODESET = "true" || exit
 
 depmod -a
 silent modprobe fbcon
 silent modprobe vesafb
 
-if [ -e /proc/fb ]; then
+if [ -s /proc/fb ]; then
         while read fbno desc; do
                 mknod /dev/fb${fbno} c 29 ${fbno}
         done < /proc/fb
@@ -55,15 +63,6 @@ for i in 0 1 2 3 4 5 6 7 8; do
             mknod /dev/tty${i} c 4 ${i}
 done
 
-# [ tdykstra ]
-# This is supposed to replace the test for vga=
-# on the command line. Didn't test it much...
-# Luis Mondesi
-# Splashy will show error if /proc/fb is not
-# set correctly. This assumes users have vesafb
-# commenting it out
-#grep -q '\(VESA\|VGA\)' /proc/fb || exit
-
 if [ -x /sbin/splashy_chvt ]; then
 	/sbin/splashy_chvt 8
 fi

Reply via email to