The problem is that 028_loader_speed_hack.diff optimizes too much :)

In xc/programs/Xserver/hw/xfree86/loader/loadmod.c, function
LoaderListDirs(), your patch removed all work on fp before
fp = LoaderGetCanonicalName(buf, NULL);
This line is added by your patch.

However in the upstream source fp points _into_ buf, so changes to fp,
change buf. Directly before the aforementioned line, a test is done to check
whether buf points to a regular file or not. Since the apropriate changes to
buf won't be made anymore, this test fails because buf points to a
directory, not to a file.

Due to this failure, the return variable (listing) will remain NULL
throughout the whole function. LoaderListDirs() is therefore reduced to a
quite expensive return NULL :)

Seeing that this function will never be able to work properly and that X.org
remains perfectly functional - with the only noted exception being the
probing and autoconfiguration I reported before - one might conclude that
the function is not called very often. From this, one might also conclude
that optimizations in it are a waste of (valuable) programmer time and a bug
hazard.

I think a proper fix would be to reinstate the following three lines:

After line 437 [ strcat(buf, *s); ]:
fp = buf + dirlen;

After line 440 [ buf[dirlen++] = '/'; ]:
fp++;

After line 444 [ continue; ]:
strcpy(fp, dp->d_name);

How three lines can keep a guy busy for 16 hours truly amazes me.

Sjoerd Hemminga
Snow B.V.


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to