You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.1 KiB
70 lines
2.1 KiB
# --- SDE-COPYRIGHT-NOTE-BEGIN --- |
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch. |
|
# |
|
# Filename: package/.../grub/grub-0.95-xpmjunk.patch |
|
# Copyright (C) 2004 - 2006 The T2 SDE Project |
|
# |
|
# More information can be found in the files COPYING and README. |
|
# |
|
# This patch file is dual-licensed. It is available under the license the |
|
# patched project is licensed under, as long as it is an OpenSource license |
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms |
|
# of the GNU General Public License as published by the Free Software |
|
# Foundation; either version 2 of the License, or (at your option) any later |
|
# version. |
|
# --- SDE-COPYRIGHT-NOTE-END --- |
|
--- 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 == '"')
|
|
|