]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - src/patches/grub-0.95-xpmjunk.patch
Grub hat wieder ein huebsches Splashimage.
[people/teissler/ipfire-2.x.git] / src / patches / grub-0.95-xpmjunk.patch
diff --git a/src/patches/grub-0.95-xpmjunk.patch b/src/patches/grub-0.95-xpmjunk.patch
new file mode 100644 (file)
index 0000000..de02897
--- /dev/null
@@ -0,0 +1,55 @@
+--- grub-0.95/stage2/graphics.c.xpmjunk        2005-01-04 17:01:35.492804523 -0500
++++ grub-0.95/stage2/graphics.c        2005-01-04 17:02:52.722495885 -0500
+@@ -262,6 +262,35 @@
+     return;
+ }
++/* Open the file, and search for a valid XPM header.  Return 1 if one is found,
++ * leaving the current position as the start of the next line.  Else,
++ * return 0.
++ */
++int xpm_open(const char *s) {
++    char buf, prev, target[]="/* XPM */\n";
++    int pos=0;
++
++    if (!grub_open(s))
++        return 0;
++
++    prev='\n';
++    buf=0;
++    do {
++        if (grub_read(&buf, 1) != 1) {
++            grub_close();
++            return 0;
++        }
++        if ((pos == 0 && prev == '\n') || pos > 0) {
++            if (buf == target[pos])
++                pos++;
++            else
++                pos=0;
++        }
++        prev=buf;
++    } while (target[pos]);
++    return 1;
++}
++
+ /* Read in the splashscreen image and set the palette up appropriately.
+  * Format of splashscreen is an xpm (can be gzipped) with 16 colors and
+  * 640x480. */
+@@ -271,15 +300,9 @@
+     unsigned char c, base, mask, *s1, *s2, *s4, *s8;
+     unsigned i, len, idx, colors, x, y, width, height;
+-    if (!grub_open(s))
++    if (!xpm_open(s))
+         return 0;
+-    /* read header */
+-    if (!grub_read((char*)&buf, 10) || grub_memcmp(buf, "/* XPM */\n", 10)) {
+-        grub_close();
+-        return 0;
+-    }
+-    
+     /* parse info */
+     while (grub_read(&c, 1)) {
+         if (c == '"')