[OpenBIOS] ping [PATCH] bootinfo_load.c: Translate \r to \n for Mac OS 9 compatibility
Programmingkid
programmingkidx at gmail.com
Sat Apr 16 06:02:43 CEST 2016
On Apr 15, 2016, at 5:10 PM, Tarl Neustaedter wrote:
> On 2016-Apr-15 16:57 , Programmingkid wrote:
>> [...] So if we filtered out the comment, things might work correctly.
>> I will try this.
>
> Actually, there are several comments. I saw at least three. Probably the
> right thing to do would be to find where the "\" word is processed and
> make sure it accepts either CR (0xD) or LF (0xA) as end-of-comment.
>
> My original thought was that the only thing that could differentiate
> between end-of-line and space was the "accept" word, which I didn't
> expect to see in the bootloader. I forgot that comment is a variant on
> accept.
I made a patch that removes comments from the bootscript variable. It did not
solve the problem of not being able to boot Mac OS 9. Here is the patch.
Index: libopenbios/bootinfo_load.c
===================================================================
--- libopenbios/bootinfo_load.c (revision 1391)
+++ libopenbios/bootinfo_load.c (working copy)
@@ -134,7 +134,7 @@
char *base;
int proplen;
phandle_t chosen;
- int tag, taglen, script, scriptlen, scriptvalid, entity, chrp;
+ int tag, taglen, script, scriptlen, scriptvalid, entity, chrp, comment;
char tagbuf[128], c;
char *device, *filename, *directory, *partition;
int current, size;
@@ -187,10 +187,26 @@
scriptlen = 0;
entity = 0;
current = 0;
+ comment = 0;
while (current < size) {
c = base[current++];
+ // filter out comments
+ if (c == '\\') {
+ comment = 1;
+ continue;
+ }
+
+ if (comment) {
+ // only a carriage return or linefeed character can end a comment
+ if (c == '\r' || c == '\n') {
+ comment = 0;
+ } else {
+ continue;
+ }
+ }
+
if (c == '<') {
script = 0;
tag = 1;
More information about the OpenBIOS
mailing list